最近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;
コメント