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 でも出来るけどよろしくないので省略。