RDSのMySQLをエクスポート
今回はデータベース全体をエクスポートします。
またEC2をエクスポート専用に立てて接続を行う形で進めます。
EC2を立ち上げる
新規で専用のEC2を使うことで既存の環境をそのまま汚すことなく実行できます。
このプロセスはポイントのみ解説します。詳細は公式ドキュメントをご覧ください。
OSはAmazon Linux 2023で進めます。
RDSエクスポートでの注意点としては
・RDSと同じVPCにEC2を立ち上げる
∟自分は経験ないですが違うVPCだと繋げるのが大変だと思います。
・EC2起動時にキーペアを何かしら当てる
∟最後自分のPCにダウンロードする際はssh接続が必要になるのであったほうが便利です。
EC2にログイン
以下参考ページの「Amazon EC2コンソールを使用した接続」の手順でログインします。
EC2 Instance connectとSSHの違い
SSH接続は自分のPCからEC2に接続する形になります。
Instance connectはAWSの中からEC2に接続している形になります。Instance connectというWebサービスがAWS上で動いていてそれを借りて接続しているイメージです。
これによりEC2側のセキュリティグループの設定も変わってきます。どこに対して22番ポートを解放するのかの設定ですね。
SSH接続は以下のドキュメントをご参照ください。
Instance connectへの接続方法は以下の記事をご参照ください。
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の設置が済んでいることが条件なのでそちらが未設定の方は以下のページを参考に設定してみてください。
$ scp -i /path/to/your/key.pem username@ec2-public-ip:/path/to/file /local/path
これでRDSからSQLデータをダウンロードすることができました。
dockerにインポートしてみる
dockerにインポートする際は以下の記事を参考にしてみてください。
ハマりポイント
以下予想ですがハマりポイントを挙げてみます。
サブネット設定がうまくいっていない
EC2がアタッチされているサブネットがプライベートになっているとそもそもローカルPCとEC2の通信ができない状態になっています。コマンドが通らない時この辺りも原因になるので確かめてみましょう。
セキュリティグループが間違っている
セキュリティグループの設定が正しくできていないとローカルPC→EC2、EC2→RDSの通信が通らなくなります。EC2にアタッチされているセキュリティグループのssh22番ポートが開いているか、RDSにアタッチされているセキュリティグループがEC2からの通信を許可しているかを確認しましょう。
EC2のLinuxユーザーはディストリビューションごとに違う
Linuxディストリビューションによってデフォルトのユーザー名が変わります。Linuxのユーザー名が違う場合、ssh,scpコマンドが失敗します。下記ページを参考に自分の環境に合わせて試してみましょう。
Discussion