最近Dockerを覚えてから、色々楽になりました。
さて、Bashやらの設定変更してたせいか、Dockerのデータが全部消えてしまい、データベースのバックアップをちゃんとしようと思った次第です。
ただ、毎回長いコマンド打つのも面倒だし覚えれないので、なるべく簡単になるようにしてます。
ただし、Macでしか確認をしていないのであしからず。
Macだと標準でMakefile
が使えるはずなので、このMakefileを利用してdocker MySQLのdumpをできるようにします。
まずは、mysqlコマンドを利用するため、ユーザー名とパスワードの入力が必要になりますが、パスワードの部分で入力を求められてしまい、ダンプファイルができても1行目にログが出力されてしまい、毎回消さないと使えないのは無理ですね。
Docker Compose で MySQLを構築 | ぷちめも
こちらの記事に答えが載ってしまっていたので、コマンド部分のみを抜粋しますね。
# mysqlのログイン情報をセットする
$ docker exec -it {CONTAINER_NAME} mysql_config_editor set -u root -p
# mysqldumpのログイン情報をセットする
$ docker exec -it {CONTAINER_NAME} mysql_config_editor set --login-path=mysqldump -u root -p
2つとも、実行した際にパスワードの入力を求められます。
このときにmysqlのパスワードを入力して完了です。
パスワードは、コンテナを作成したさいに設定したパスワードを入力。
これで、ダンプするときとかにパスワードの入力を求められなくなるので、1個楽になりました。
次に、データベースのダンプとリストアのコマンドです。
# データベースをダンプする
$ docker exec -it {CONTAINER_NAME} mysqldump {DATABASE_NAME} > backup.sql
# データベースをリストアする
$ docker exec -i {CONTAINER_NAME} mysql {DATABASE_NAME} < backup.sql
すごくシンプルになったところで、Makefileに作っていきます。
# コンテナ名
CONTAINER_NAME = example_container_name
# データベース名
DB_NAME = example_database_name
# mysqlのログイン情報を設定
set:
docker exec -it $(CONTAINER_NAME) mysql_config_editor set -u root -p
# mysqldumpのログイン情報を設定
setdump:
docker exec -it $(CONTAINER_NAME) mysql_config_editor set --login-path=mysqldump -u root -p
# データベースをダンプ
dump:
docker exec -it $(CONTAINER_NAME) mysqldump $(DB_NAME) > backup.sql
# データベースをリストア
restore:
docker exec -i $(CONTAINER_NAME) mysql $(DB_NAME) < backup.sql
Makefileを作ったあとは、もう簡単です。
# mysqlのログイン情報を設定
$ make set
# mysqldumpのログイン情報を設定
$ make setdump
# ダンプ
$ make dump
# リストア
$ make restore
このMakefileファイルを使い回せばかなり楽になります。