LoginSignup
3
3

More than 1 year has passed since last update.

EC2踏み台サーバーを経由して、RDSのDBを別のRDSのDBに移す方法

Last updated at Posted at 2021-07-15

はじめに

タイトルどおり、EC2踏み台サーバーを経由して、RDSのDBを別のRDSのDBに移す方法について記載します。
スクリーンショット 2021-02-19 18.49.57.png

流れ

①EC2にSSH接続する

②EC2からRDSのmysqlにログインできるか確認

③RDSのDBをEC2にエクスポートする

④別のRDSのDBパラメータグループのパラメータを変更

⑤EC2から別のRDSにインポートする

環境

EC2:Amazonlinux2
RDS:Aurora/mysql

①EC2にSSH接続する

こちらの記事を参考にしてください。
SSH接続した状態で①〜⑤まで作業してください。

②EC2からRDSのmysqlにログインできるか確認

$ mysql -h RDSのエンドポイント -P 3306 -u ユーザー名  -p

Enter password: 

mysql> SHOW DATABASES;

old_DB

コピーしたいDB名をold_DBとします。

エラー対処①「Access denied」

ERROR 1045 (28000): Access denied for user

「Access denied」が表示され、mysqlにログインできない場合は、セキュリティグループに問題がある可能性があります。RDSのインバウンドルールを確認し、EC2からの接続が許可されているか確認してみてください。

また、RDSのエンドポイントユーザー名パスワードが間違っている可能性もありますので、確認方法が分からない方は、以下のサイトを参考に調べてください。
【AWS図解】RDSのユーザ名とパスワードを忘れた場合の確認方法

Aurora/mysqlであれば、リージョン別クラスターのライターインスタンスRDSのエンドポイントに指定しました。

エラー対処②「mysql: コマンドが見つかりません」

mysqlをインストールしましょう
mysql-communityリポジトリを使ってmysqlをyumでインストールします。

$ sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
$ sudo yum install -y mysql 
$ mysql --version
mysql  Ver 8.0.18 for Linux on x86_64 (MySQL Community Server - GPL)

他にもHomebrewでmysqlをインストールする方法もあります。

③RDSからEC2にエクスポートするコマンド

$ mysqldump --skip-column-statistics --quick --single-transaction -h RDSのエンドポイント -u 別のRDSのユーザー名 -p  DB名 | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' >  /var/tmp/dump.sql

DB名:new_DB
オプション:--skip-column-statistic --quick --single-transaction

なぜこのようなコマンドなのかはこちらを参考にしてください。
MySQLのDBからAWSのRDSへデータをインポートする

④別のRDSのDBパラメータグループのパラメータを変更

別のRDSのmysqlにログインし、下記のValueがOFFであればONにする必要があります。

mysql> SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF   |
+---------------------------------+-------+

OFFのままだと、⑤のEC2から別のRDSにインポートができません。
RDSのDBパラメータグループのパラメータを新しく作成し、log_bin_trust_function_creatorsを1に変更し、RDSにアタッチさせ、再起動します。すると、ValueがONになります。
RDSに元々ついているデフォルトのDBパラメータグループは、パラメータが変更できない仕様になっていますので、新しく作成する必要があります。

mysql> SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON    |
+---------------------------------+-------+

詳しい方法は下記を参照してください。
AWS RDS MySQL で create function できるようにする
https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-mysql-functions/

⑤EC2から別のRDSにインポートする

別のRDSに新しくDBを作成し、そのDBにインポートします。

mysql> CREATE DATABASE new_DB;
$ mysql -h RDSのエンドポイント -u 別のRDSのユーザー名 -p  DB名 < /var/tmp/dump.sql
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3