Docker Compose で MySQL のデータ移行をしようと思ったのですが、chownエラーで悩まされたため、ちゃんとした移行方法を残すことにしました。
cp コマンドでマウントしてるディレクトリごとコピーはダメだね... (それはそう)
今回用いる構成
docker-compose.yml
version: '3.2'
services:
db:
container_name: 'db-container'
build: ./docker/db
tty: true
ports:
- '3306:3306'
environment:
TZ: 'Asia/Tokyo'
env_file:
- .env
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/conf.d:/etc/mysql/conf.d
フォルダ階層
.
└── docker
└── db
├── conf.d
└── data // ここにvolumesがマウントされています。
MySQLにログインし、バックアップを行う
$ docker compose exec db /bin/bash
# ここからコンテナ内のシェル
$ mysqldump --no-tablespaces -u <ユーザー名> -p -D <データベース名> > ./dump.sql
# パスワードを求められるので、打ちましょう
上記のコマンドを利用することで、dump.sql
が作成されました。
.
└── docker
└── db
└── data // このフォルダ内に dump.sql が存在しているはずです。
リストアを行う
リストア先は、先ほどと同じ構成のDockerコンテナとします。
$ docker compose exec db /bin/bash
# ここからコンテナ内のシェル
$ mysql -u <ユーザー名> -p -D <データベース名> < dump.sql
# dump.sqlが必要ない場合は削除しても大丈夫です。
# ここからコンテナ内シェル
$ rm dump.sql