📝

RDSのMySQLをエクスポート

2023/07/28に公開

今回はデータベース全体をエクスポートします。
またEC2をエクスポート専用に立てて接続を行う形で進めます。

EC2を立ち上げる

新規で専用のEC2を使うことで既存の環境をそのまま汚すことなく実行できます。
このプロセスはポイントのみ解説します。詳細は公式ドキュメントをご覧ください。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/EC2_GetStarted.html

OSはAmazon Linux 2023で進めます。

RDSエクスポートでの注意点としては
・RDSと同じVPCにEC2を立ち上げる
  ∟自分は経験ないですが違うVPCだと繋げるのが大変だと思います。
・EC2起動時にキーペアを何かしら当てる
  ∟最後自分のPCにダウンロードする際はssh接続が必要になるのであったほうが便利です。

EC2にログイン

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

https://zenn.dev/isosa/articles/50cd307d5b1c3d

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

EC2 Instance connectとSSHの違い

SSH接続は自分のPCからEC2に接続する形になります。
Instance connectはAWSの中からEC2に接続している形になります。Instance connectというWebサービスがAWS上で動いていてそれを借りて接続しているイメージです。
これによりEC2側のセキュリティグループの設定も変わってきます。どこに対して22番ポートを解放するのかの設定ですね。

SSH接続は以下のドキュメントをご参照ください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html

Instance connectへの接続方法は以下の記事をご参照ください。
https://zenn.dev/isosa/articles/50cd307d5b1c3d

mysqldumpをインストールします。

Amazon Linux 2023にはmysqldumpが入っていないので以下のコマンドを実行します。

まずリポジトリパッケージをEC2にダウンロードします。


$ sudo dnf -y localinstall  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

パッケージをアップデートします。


$ sudo yum update

最初にダウンロードしたパッケージをインストールします。


$ sudo dnf -y install mysql mysql-community-client

これでmysqldumpコマンドが使えるようになったと思います。以下のコマンドでバージョンが表示されたら準備完了です。


$ mysqldump --version

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