Closed4

VSCode DevContainerで構築されたCompose環境のDBコンテナにデカめのダンプをインポートしたい

shinoyushinoyu

VSCodeのDevContainerを使っているときのお話。
デカ目のDBダンプをDBコンテナに入ってインポートしようとしてましたよ、と。

ただVSCodeのDevContainer、新しいターミナルを開くときは、.devcontainer.jsonのserviceに設定されたコンテナで開かれてしまい、DBコンテナを開いてくれない。

設定ファイルの仕様を見ると、設定上1devcontainer.jsonに複数指定できないぽく、アクセスする手段がない状態になっている。これをなんとかしたい。
https://containers.dev/implementors/json_schema/

shinoyushinoyu

起動中のコンテナに入る方法はすごく単純で、docker ps して得たコンテナIDに対して、docker exec -it {containerID} /bin/shとすればいい。そうすれば指定したコマンドを起動した状態でコンテナ内にはいることができる。
これはDevContainerを経由して起動された場合も同様。

shinoyushinoyu

つまり、でかいDumpファイルをDevContainerで起動したDBコンテナに入れてインポートしたい場合は下記の手順で実現できる

  1. docker cp {ファイルパス} {containerId}:{ファイルパス} でコンテナ内にコピー
  2. docker exec -it {containerId} /bin/shでコンテナ内に入る
  3. mysql -u{user} -p {database名} < {ファイル名}
shinoyushinoyu

Dumpを出力したものが必ずしも外部キーの依存関係順になっていないことがある。
その場合

mysql -u{user} -p --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" {database} < {file}

と、外部キーのチェックを無効化する必要がある

このスクラップは2023/05/23にクローズされました