docker などで開発した時、gitで管理していると、DBが移行しない。
DBが小さい時は、myadminなどでコピーしてもいいけど、大きいとできなくなる。
その時のコピー方法。
① コンテナ名を取得 dump取得
docker psで、名前を取得
docker exec -i [コンテナの名前] mysqldump -u root -pPASSWORD DB名 | gzip > dump.sql.gz
② volume特定(重要)
docker volume ls
例)
sample_sail-mysql
③ volume中身確認
docker run –rm -v sample_sail-mysql:/volume busybox ls -lah /volume
>> ibdata1 など出ればOK
④ volumeをtarで固める (実際のデータを取得)
nohup docker run –rm -v infocart2_sail-mysql:/volume -v $(pwd):/backup busybox tar czf /backup/mysql-volume.tar.gz /volume > tar.log 2>&1 &
確認
ls -lh mysql-volume.tar.gz
ps aux | grep busybox
⑤ Macへ転送(pull推奨)
scp -P 22 ユーザー名@サーバーURL:/home/[Macのユーザー名]/[プロジェクト名]/mysql-volume.tar.gz .
ポイント Macから取りに行くのが正解
⑥ Macでvolume作成
docker volume create sample_restore
⑦ volume復元
docker run –rm -v sample_restore:/volume -v $(pwd):/backup busybox sh -c “cd /volume && tar xzf /backup/mysql-volume.tar.gz –strip 1”
⑧ docker-compose設定
sail-mysql:
external: true
name: infocart2_restore
⑨ 起動
sail up -d
⑩ 確認
sail mysql
これで、テスト環境などからコピーする。