表題の通り手元の開発環境のdockerのdbにmysqlのdumpファイルをimportしようとしたところ、途中で固まってしまったので対応したときの備忘録です。
方法1. Dockerコンテナのリソースを増やす:
Docker Desktopの設定で、コンテナに割り当てるメモリとCPUの量を増やすことができます。これにより、大きなファイルのインポートがスムーズに行える可能性が高くなります。
とはいえこれには限界があります。
今回は次の方法で解決できました。
方法2. ファイルを分割する:
splitコマンドでダンプファイルを小さな部分に分割し、それぞれを個別にインポートします。
手順1. ダンプファイルを分割:
例えばsplitコマンドを使用してダンプファイルを100MBごとに分割する場合、コマンドラインで次のように打ちます:
$ split -b 100M dump-file.sql part_
このコマンドは、your-dump-file.sqlを100MBごとに分割し、part_aa, part_ab, part_acなどの名前でファイルを生成します。
手順2. 分割ファイルをインポート:
分割された各ファイルを順番にインポートするには、以下のようなスクリプトを使用します:
for file in part_*; do
cat $file | docker-compose exec -T your-container-name-for-data-base bash -c "mysql -u root -p'yourpassword' name-of-database"
done
このスクリプトは、part_で始まるすべてのファイルを順番に読み込み、MySQLコンテナにインポートします。
これで自分の場合は大きなdumpファイルをimportできました。
*なお、大きなdumpファイルの取り扱い時には細心の注意を払い、必ず最初にバックアップを行うことをおすすめします
*今回紹介したスクリプトではdbのパスワードを直接記述しているので手元の開発環境のみで使える手法になります