テクノロジー

DockerのMySQLのデータベースをバックアップする

Tags: /
Written by Kishimoto

最近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ファイルを使い回せばかなり楽になります。

株式会社MIRAIでは、Webマーケティング・コンサルティングから
ホームページ制作・動画制作など、様々なご相談を承っております。

お仕事のご依頼・ご相談はこちら