

docker cpでMySQLダンプをコンテナに送ってリストアする
この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。
Dockerコンテナで動いてるMySQLにダンプファイルをリストアする時の手順。
コンテナ名を確認する
docker compose ps で対象のDBコンテナ名を確認する。
$ docker compose psNAME COMMAND SERVICE STATUS PORTSmyapp-app-1 "/usr/sbin/apachectl…" app running 0.0.0.0:8081->80/tcpmyapp-db-1 "docker-entrypoint.s…" db running 3306/tcpダンプファイルをコンテナにコピーする
$ docker cp app.dump.sql myapp-db-1:/tmp/コンテナ名は前項で確認したもの。
コンテナに入る
$ docker exec -it myapp-db-1 bashリストア実行
コンテナ内で:
# mysql -u root -p -D app < /tmp/app.dump.sql-D app は対象DBが事前に作成済みであることが前提。ダンプ内に CREATE DATABASE や USE 文が入ってない場合はDBが存在しないとここでコケる。逆にダンプ側に USE が入ってる場合は -D は実質無視されるので、そこは重複しても害はない。
コンテナに入らなくても済ませられる
docker exec -it でシェルに入らなくても、ホスト側のファイルをそのまま流し込む形なら1行で終わる。
$ docker exec -i myapp-db-1 mysql -u root -p app < app.dump.sqlこの場合 docker cp の手順自体が不要になる。コンテナ内に一旦ファイルを置きたくない時はこっちの方が早い。