📝

RDSのMySQLをエクスポート

2023/07/28に公開

今回はデータベース全体をエクスポートします。

EC2にログイン

以下参考ページの「Amazon EC2コンソールを使用した接続」の手順でログインします。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html

EC2 Instance connectとSSHの違い

セキュリティグループの指定方法が異なります。

EC2 Instance connectはセキュリティグループのインポート設定を0.0.0.0/0と全開放しなければならないのに対してSSHでの接続ではMy IPという指定をして現在自分が使っているグローバルIPからのみにアクセスを限定することができます。このIP開放範囲に関してはSSHのMy IPを使う方が範囲が狭くなりセキュリティリスクは低いと言えます。一方EC2 Instance connectは背後で複数サーバを経由して接続しているようです。先日色々触っていて違いがわかりましたので参考までにメモしておきます。

いずれにしてもセキュリティをもっと高めようとすればやりようはあると思いますが、現実的にどこまで「リスクが想定されるか」や「掛けられるコスト」に応じてセキュリティに関しては決めることが多い気がしますので適宜ご自身の状況に合わせて考えてみてください。

mysqldumpコマンドでエクスポート

以下のコマンドをEC2内で実行することでrdsからデータを取得できます。


$ mysqldump -h rdsendpoint.ap-northeast-1.rds.amazonaws.com -u username -p databasename > backup.sql

lsコマンドなどで確認するとbackup.sqlというファイルが落ちてきているのがわかると思います。

EC2からファイルをダウンロード

scpコマンドを使ってファイルをダウンロードします。前提としてkeyの設置が済んでいることが条件なのでそちらが未設定の方は以下のページを参考に設定してみてください。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/create-key-pairs.html


$ scp -i /path/to/your/key.pem username@ec2-public-ip:/path/to/file /local/path

これでRDSからSQLデータをダウンロードすることができました。

dockerにインポートしてみる

dockerにインポートする際は以下の記事を参考にしてみてください。

https://zenn.dev/isosa/articles/5d3fbb313b4086

ハマりポイント

以下予想ですがハマりポイントを挙げてみます。

サブネット設定がうまくいっていない

EC2がアタッチされているサブネットがプライベートになっているとそもそもローカルPCとEC2の通信ができない状態になっています。コマンドが通らない時この辺りも原因になるので確かめてみましょう。

セキュリティグループが間違っている

セキュリティグループの設定が正しくできていないとローカルPC→EC2、EC2→RDSの通信が通らなくなります。EC2にアタッチされているセキュリティグループのssh22番ポートが開いているか、RDSにアタッチされているセキュリティグループがEC2からの通信を許可しているかを確認しましょう。

EC2のLinuxユーザーはディストリビューションごとに違う

Linuxディストリビューションによってデフォルトのユーザー名が変わります。Linuxのユーザー名が違う場合、ssh,scpコマンドが失敗します。下記ページを参考に自分の環境に合わせて試してみましょう。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/managing-users.html

Discussion