MySQLのメモ書き

2018-10-04

mysql, linux

最近MySQLとお話する機会が減った気がするな。。。

$ mysql -V
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

ワンライナー

-e してクエリ書く

1
$ mysql -u root -p -h domain -P 3333 dbname -e "SELECT * FROM foo WHERE name='bar'\G"

コンソールログに残るのでパスワードの扱いに注意

ダンプ

バックアップとか、ダンプ同士でdiffとったりとか

1
$ mysqldump -h domain -u username -p dbname > /tmp/dbname.sql

実行ファイルにしてファイル名に日付なんか足してcronで実行すればバックアップっぽくていいのではないですかね
上のコマンドは以下のクエリを全テーブル分ダンプします

DROP TABLE
CREATE TABLE
INSERT INTO TABLE_A VALUES(.....

CREATE DATABASE もしたければ -B dbname

複数のデータベースを一つのサーバーで管理しているなら

1
$ mysqldump -h domain -u username -p -A > /tmp/domain.sql

もアリかもしれませんが、経験上ファイルが巨大になりすぎて扱いにくいことが多い

-d をつけよう

1
$ mysqldump -h domain -u username -p -A -d > /tmp/domain.sql

DBだけのサービスを管理してると必要になりそうですね
コンテナのvolumeに食わせればmigration省けてちょっとラクになるかも

-t をつけましょう

1
$ mysqldump -u username -p -t database > /tmp/database_data.sql

INSERTだけ作ります
deleteもtruncateもしないのでご注意を

テーブル名を指定しましょう
どういうときに使うんですかね?
でも機能が細かく分かれているのは良いことですよね。

1
$ mysqldump -u username -p database tablename > /tmp/tablename.sql

パスワードの変更

インストールした直後は仮のパスワードが設定されています
/var/log/mysqld.log にあるので password でgrepして探そう

開発機のパスワードを定期的に変えるなんてめんどくさいのでやめちゃいましょう

1
2
# sh -c "echo default_password_lifetime = 0 >> /etc/my.cnf"
# systemctl restart mysqld.service

本番運用機なら変えるべきなのでしょう

1
$ mysql -uroot -p --connect-expired-password -e "SET GLOBAL validate_password_length=4; SET GLOBAL validate_password_policy=LOW; ALTER USER 'root'@'localhost' IDENTIFIED BY 'pass';"

コレでパスワードが pass になりました。短

ノーガードスタイル

1
2
3
# sh -c "echo skip-grant-tables >> /etc/my.cnf"
# systemctl restart mysqld.service
$ mysql -u root -e "use mysql; UPDATE user SET authentication_string=password('') WHERE user='root'; flush privileges;"

終わったら /etc/my.cnf から skip-grant-tables の行を削除しましょう

客先でもらったユーザー「これってリードオンリーですよね…?」ってときに

show grants for{USER}@{HOST};

HOSTやUSERを一覧したければ以下

select user,host from mysql.user order by user,host;

コメント

投稿する

投稿したコメントはご自身で削除できません

不適切なコメントと判断した場合は管理側で削除することがあります