dockerコンテナに入ってmysqlファイルをdumpする方法

dockerを使っている状況で、

「このsql手元でdumpして使って〜」

と言われた際に、どうやってやればいいのか分からなかったのでメモ。

  • dockerコンテナのなかにsqlファイルをcpする

プロジェクト内に一旦sqlファイルをおいておく。あるいは適当なフォルダのpathを記述して、copyする。copyする先は対象のdbコンテナのtmpディレクトリ内が良さげ。

$ docker cp test.sql container-name:/tmp
  • db名を調べておく
$ docker-compose exec db mysql -uroot -ppassword

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| hoge_dev_1         | <=これがdb名
| hoge_test_1        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
  • コンテナのなかに入ってshで作業する
$ docker exec -it container-name sh

$ # ls
bin  boot  dev  docker-entrypoint-initdb.d  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

$ ls tmp/
hoge.sql

$ cd tmp

$ mysql -u root -p hoge_dev_1 < hoge.sql