MySQL
CSV出力
| sudo vi /etc/my.cnf
[mysqld]
secure-file-priv=""
mysql.server restart
mysqldump -u{ユーザー名} -p --tab=/tmp --fields-terminated-by=, {DB名} {テーブル名(省略可能)}
|
MySQL自体のユーザー情報を取る
WindowsのA5SQLでDockerのMySQLに接続したい
- 前提: Docker は (WSL 上ではなく) Windows にインストールしている
- 参考: 外部アクセス設定
- 「#28000Access denied for user 'root'@'gateway' (using password: NO)」のようなエラーへの対応
- 結論: MySQL で外部アクセスできるユーザーを作り, WSL2 (の Ubuntu) の IP でアクセスする.
手順は以下の通り.
- WSL2 の Linux (ここでは Ubuntu 前提) の IP を調べる
sudo apt install -y net-tools
ifconfig
eth0
の inet
の値を覚えておく
- Docker で MySQL を立ち上げる (サービス名は
mysql
とする) docker compose up -d
docker compose exec mysql bash
mysql -uroot -p
use mysql
create user docker@% identified by 'docker';
select host, user from user;` 「% | docker」があることを確認
- A5SQL の mysql 接続で次の設定でテスト接続してみる
- ホスト名: Ubuntu の IP
- ユーザーID: MySQL で設定した mysql ユーザー (上の例では docker)
- パスワード: MySQL で設定したパスワード (上の例では docker)
- データベース: 作ったデータベース名
UPDATE
| UPDATE users SET shop_id=1 WHERE name='user';
|
あるデータベースのテーブル名とカラム一覧の取得
| SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'dbname';
mysql -uroot -p 'dbname' -e "SELECT table_name, column_name, data_type, column_comment FROM information_schema.columns WHERE table_schema = 'dbname';" > table_columns.csv
mysql -uroot -p 'fist' -e "SELECT table_name, column_name, data_type, column_comment FROM information_schema.columns WHERE table_schema = 'fist';" > table_columns.csv
mysql -uroot -pmysql 'try' -e "SELECT table_name, column_name, data_type, column_comment FROM information_schema.columns WHERE table_schema = 'try';" > table_columns.csv
|
あるデータベースのテーブルのコメントを取得
| SELECT table_name, table_comment
FROM information_schema.tables
WHERE table_schema = 'dbname';
mysql -uroot -p 'dbname' -e "SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema = 'dbname';" > table_comments.csv
mysql -uroot -p 'fist' -e "SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema = 'fist';" > table_comments.csv
mysql -uroot -pmysql 'try' -e "SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema = 'try';" > table_comments.csv
|
あるユーザーとホスト名の確認
| select user, host from mysql.user;
|
あるユーザーの権限確認
| show grants for 'ユーザー名'@'ホスト名'
|
インデックス確認
インデックス削除
| DROP INDEX index_uid_and_provider ON users;
|
インデックス追加
| ALTER TABLE users ADD UNIQUE INDEX index_uid_and_provider (email, uid, provider);
CREATE UNIQUE INDEX index_uid_and_provider ON users(email, uid, provider);
|
インデックス追加時のエラー: 複合インデックス時のduplicate entry
エラーで指定された項目を複合インデックスに追加する.
| ALTER TABLE users ADD UNIQUE INDEX index_uid_and_provider (uid, provider);
|
これでduplicate entry email
と言われたら次のように書き換える.
| ALTER TABLE users ADD UNIQUE INDEX index_uid_and_provider (email, uid, provider);
|
カラムコメント追加(カラムを再設定する)
| -- ALTER TABLE テーブル名 CHANGE カラム名 変更後カラム名 データ型 [NOT NULL DEFAULT 0 など] COMMENT 'コメント内容';
ALTER TABLE Customers CHANGE parent_person_id parent_person_id int(11) COMMENT '保護者ID:保護者 ID が空または NULL なら保護者なしで設定';
|
基本的な確認: show利用
| show variables like 'char%'; # 文字コード
show databases;
|
テーブル・カラム情報取得
| mysql -h richu.suri.co.jp -utrygmd -ptrygmd001 trygmd -e "SELECT table_name, column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE column_name = 'to_date';" > columns.tmp.csv
|
テーブルコメント修正
| -- ALTER TABLE テーブル名 COMMENT 'コメント内容';
ALTER TABLE StaffOperationCodes COMMENT 'スタッフ業務コードマスタ:勤怠';
|
テーブル名修正
| -- ALTER TABLE tbl_name RENAME [TO] new_tbl_name;
ALTER TABLE LectureTimeMnagements RENAME LectureTimeManagements
|
テーブル名のキャメルケースを大文字にして格納させる
- 参考
- lower_case_table_names=2 にする。
- my.ini または my.cnf で [mysqld] に lower_case_table_names=2 を設定、再起動。
文字コード設定
次のように追記して MySQL を再起動.
| [mysqld]
default-character-set=utf8
skip-character-set-client-handshake
[mysqldump]
default-character-set=utf8
[mysql]
default-character-set=utf8
|
パスワードの再設定
- 参考
- MySQL 停止
- 「SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');」と書いたファイルを mysql-init.txt と名付け, C ドライブ直下に置く.
- 次のコマンドを発行する.
- 「mysqld --init-file=C:\mysql-init.txt」
権限付与
| GRANT ALL PRIVILEGES ON `DB名` TO 'ユーザ名'@'ホスト名';
GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' IDENTIFIED BY 'dbpass' WITH GRANT OPTION;
|
権限確認
| show grants for 'user_name'@'%';
|
リモート接続
| mysql -u ユーザ -p DB -h IP/ホスト
|