コンテンツにスキップ

MySQL

CSV出力

1
2
3
4
5
6
7
8
sudo vi /etc/my.cnf

[mysqld]
secure-file-priv=""

mysql.server restart

mysqldump -u{ユーザー名} -p --tab=/tmp --fields-terminated-by=, {DB名} {テーブル名(省略可能)}

MySQL自体のユーザー情報を取る

1
SELECT * FROM mysql.user

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
    • eth0inet の値を覚えておく
  • 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

1
UPDATE users SET shop_id=1 WHERE name='user';

あるデータベースのテーブル名とカラム一覧の取得

1
2
3
4
5
6
7
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

あるデータベースのテーブルのコメントを取得

1
2
3
4
5
6
7
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

あるユーザーとホスト名の確認

1
select user, host from mysql.user;

あるユーザーの権限確認

1
show grants for 'ユーザー名'@'ホスト名'

インデックス確認

1
SHOW INDEX FROM users;

インデックス削除

1
DROP INDEX index_uid_and_provider ON users;

インデックス追加

1
2
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

エラーで指定された項目を複合インデックスに追加する.

1
ALTER TABLE users ADD UNIQUE INDEX index_uid_and_provider (uid, provider);

これでduplicate entry emailと言われたら次のように書き換える.

1
ALTER TABLE users ADD UNIQUE INDEX index_uid_and_provider (email, uid, provider);

カラムコメント追加(カラムを再設定する)

1
2
-- 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利用

1
2
show variables like 'char%'; # 文字コード
show databases;

テーブル・カラム情報取得

1
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

テーブルコメント修正

1
2
-- ALTER TABLE テーブル名 COMMENT 'コメント内容';
ALTER TABLE StaffOperationCodes COMMENT 'スタッフ業務コードマスタ:勤怠';

テーブル名修正

1
2
-- 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 を再起動.

1
2
3
4
5
6
7
8
9
[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」

権限付与

1
2
3
4
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;

権限確認

1
show grants for 'user_name'@'%';

リモート接続

1
mysql -u ユーザ -p DB -h IP/ホスト