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

これで、テスト環境などからコピーする。