アヤオのレベリングキロク

日々のインプットをここでアウトプットします

EC2のdocker内のdbに、ローカル環境にあるsql_dumpデータをリストアする

きっかけ

ローカルにあるsqlのdumpデータを、EC2内に立てたdocker環境に入れ込みが必要でした。

でも思ったより色々調べたため、またこれをやるときに困らないようにメモしておきたいということでまとめてみます。

手順

  1. ローカルにあるdumpデータをEC2に保存

  2. リストアの準備

  3. mysqlコマンドで入れ込み

ローカルにあるdumpデータをEC2に保存

まずはローカルにあるデータをEC2に持っていくために、圧縮して、scpコマンドを使って転送します。

実行したコマンドとその結果はこんな感じ↓

xxno-my-macbook-air:~  $ scp -i ~/.ssh/keypair.cer ~/Downloads/20230420_dump.sql.gz ec2-user@ec2-00-00-00-00.ap-northeast-1.compute.amazonaws.com:/tmp/
20230420_dump.sql.gz       100%  635MB  26.1MB/s   00:24 

リストアの準備

EC2にsshし、/tmpに入っていることを確認

ec2-user@ip-00-00-00-00:~$ cd /tmp/
ec2-user@ip-00-00-00-00:tmp$ ls
20230420_dump.sql.gz

ec2-user@ip-00-00-00-00:tmp$ mv 20230420_dump.sql.gz ~/rails/test_app/.
ec2-user@ip-00-00-00-00:tmp$ cd
ec2-user@ip-00-00-00-00:~$ cd rails/test_app/.
ec2-user@ip-00-00-00-00:test_app [main]$ ls
20230420_dump.sql.gz  codecov.yml               Dockerfile        lib            runner
app                                      codedeploy                Dockerfile.arm64  log            spec
app.json                                 config                    Dockerfile.prod   node_modules   tmp
appspec.yml                              config.ru                 docs              package.json   webpack.config.js
bin                                      containers                front             Procfile       yarn.lock
db                        Gemfile           public                README.md

取り込みたいアプリケーションのDockerfileと同じレイヤーに移動させました。

mysqlコマンドで入れ込み

zipを解凍して、リストアさせます。

ec2-user@ip-00-00-00-00:test_app [main]$ gunzip 20230420_dump.sql.gz 
ec2-user@ip-00-00-00-00:test_app [main]$ ls
20230420_dump.sql  codecov.yml               Dockerfile        lib            runner
app                                   codedeploy                Dockerfile.arm64  log            spec
app.json                              config                    Dockerfile.prod   node_modules   tmp
appspec.yml                           config.ru                 docs              package.json   webpack.config.js
bin                                   containers                front             Procfile       yarn.lock
db                        Gemfile           public          Gemfile.lock      Rakefile        README.md

ec2-user@ip-00-00-00-00:test_app [main]$ pv 20230420_dump.sql  | docker compose exec -T db mysql -h localhost -P 0000 -uroot -ppass testdb
mysql: [Warning] Using a password on the command line interface can be insecure.
3.08GiB 0:11:20 [4.63MiB/s] [=======================================================================================>] 100%   

これで入りました。Railsを起動してデータにアクセスしてみると入ってます。

注意点

scpコマンドを使うときは -iオプションを忘れない

自分がやらかしたことですが、全然送れないな〜って思っていたら、 -i をつけ忘れていました。。

データが大きいほど転送費用と時間がかかる

今回送ったデータが圧縮しても1GB弱あったのですが、何度か送り直していたら課金されてました。。w (数ドル程度ですがw)

転送成功したら、そのデータは邪魔にならない限りはEC2内に保管しておくのがいいかも。

まとめ

そんなに難しくないと思いつつ、1時間ぐらいゴニョゴニョしてたので、今後のためにまとめてみました。