きっかけ
ローカルにあるsqlのdumpデータを、EC2内に立てたdocker環境に入れ込みが必要でした。
でも思ったより色々調べたため、またこれをやるときに困らないようにメモしておきたいということでまとめてみます。
手順
ローカルにあるdumpデータをEC2に保存
リストアの準備
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時間ぐらいゴニョゴニョしてたので、今後のためにまとめてみました。