mattintosh note

どこかのエンジニアモドキの備忘録

Docker ComposeでMySQLコンテナのダンプとかリストアしたり

大抵の場合はホストにポートをバインドしているのでホストの MySQL クライアントから接続できると思うが、ポートをバインドしていなかったりホスト側に MySQL クライアントが無かったりする場合。

  • MySQL コンテナ名: db
  • ユーザー: admin
  • パスワード: password
  • データベース: wordpress

コンテナ内でサーバに接続

docker-compose exec db mysql -u admin -p

コンテナ内でデータベースに接続

docker-compose exec db mysql -u admin -p wordpress

コンテナ内でダンプしてホストで受け取る

MySQL コンテナ内では docker-compose.yml で設定している MYSQL_PASSWORD 環境変数が存在するのでシェルから呼び出す。ホストのシェルに変数が展開されないようにする必要がある。

docker-compose exec db sh -c 'MYSQL_PWD=$MYSQL_PASSWORD mysqldump -u admin wordpress' > wordpress.sql

ホストから標準出力してコンテナ内でリストア

docker-compose exec -T db sh -c 'MYSQL_PWD=$MYSQL_PASSWORD mysql -u admin wordpress' < wordpress.sql

-pPASSWORD でも出来るけどよろしくないので省略。