カスタム開始時刻を使用して Amazon RDS for MySQL DB インスタンスを移行するにはどうすればよいですか?

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) for MySQL DB インスタンスを、カスタム開始時刻を使用して別の MySQL DB インスタンスに移行したいと考えています。これを行うにはどうすればよいですか?

簡単な説明

Amazon RDS for MySQL から別の MySQL DB インスタンスにデータを移行するには、次のいずれかの方法を使用できます。

  • バイナリログベースのレプリケーション
    注: バージョン MySQL バージョン 8.0.17 を使用している場合、エンジンはクラッシュリカバリ中に最後のバイナリログファイルの位置とファイル名を出力しない場合があります。その結果、バイナリログレプリケーションのアプローチを使用してデータを移行できなくなります。この既知の問題については、MySQL のウェブサイトをご覧ください。
  • AWS DMS

解決方法

バイナリログレプリケーション

前提条件:

  • バイナリログレプリケーションでは、ソースで生成されたバイナリログファイルを使用して、進行中の変更を記録します。binlog_format パラメータを任意のバイナリログ記録形式 (ROW、STATEMENT、または MIXED) に設定します。
  • バイナリログ保持時間パラメータを、現在の値よりも大きい値になるように増加させます。この方法では、まだ出荷されていないバイナリログは、ソース Amazon RDS for MySQL インスタンスに残ります。
  • Amazon RDS for MySQL インスタンスがターゲットホストから到達可能であることを確認します。

バイナリログレプリケーションを使用して Amazon RDS for MySQL から別の MySQL DB インスタンスにデータを移行するには、以下を実行します。

1.    カスタム開始時刻 (またはポイントインタイム値) を使用して、ソース Amazon RDS DB インスタンスからポイントインタイム復元を実行します。

2.    ポイントインタイム復元 RDS インスタンスのバックアップを作成します。

例えば、mysqldump を使用して次のタスクを実行できます。

mysqldump -h rdsendpoint -u username -p dbname > backupfile.sql

3.    ポイントインタイム復元 RDS インスタンスのエラーログファイルをチェックし、最後に適用されたバイナリログファイルおよび位置に関連するメッセージを記録します。 

ログファイルメッセージの例を次に示します。

[Note] InnoDB: Last MySQL binlog file position 0 456, file name mysql-bin-changelog.152707

注: レプリケーションを行うには、レコードのバイナリログファイルおよびそれ以降のバイナリログファイルにアクセスする必要があります。ソース RDS インスタンスからのレプリケーションは、これらのファイルを使用してのみ実行できます。RDS MySQL の設定可能な最長バイナリログ保持期間は 7 日間に限られており、デフォルト値は [NULL] です。(詳細については、mysql.rds_set_configuration を参照してください。) したがって、後のステップで完了するために、これらのバイナリログファイルをソースインスタンスに保持します。

4.    レプリケーションユーザーをセットアップし、ソース Amazon RDS for MySQL インスタンスで必要な権限をユーザーに付与します。

mysql> create user repl_user@'%' identified by 'repl_user';
mysql> grant replication slave, replication client on *.* to repl_user@'%';
mysql> show grants for repl_user@'%';

5.    MySQL-target にログインして、バックアップファイルをターゲットのオンプレミスサーバーに転送します。新しいデータベースを作成し、dumpfile を使用して新しい外部 DB インスタンスにデータベースを復元します。

$ mysql -h hostname -u username -p dbname < backupfile.sql

6.    ターゲット MySQL エンジンを停止します。

$ service mysqld stop

7.my.cnf ファイルパラメータを変更して、レプリケートしようとしている一意のサーバ ID とデータベースをポイントするようにします。

例:

server_id=2
replicate-do-db=testdb

複数のデータベースをレプリケートする場合は、replicate-do-db オプションを複数回使用して、これらのデータベースを次のように別々の行に指定できます。

replicate-do-db=<db_name_1>
replicate-do-db=<db_name_2>
replicate-do-db=<db_name_N>

データベース名を使用してレプリケーションフィルターを作成する方法の詳細については、MySQL のウェブサイトの replicate-do-db を参照してください。

8.    ファイルを保存し、ターゲット MySQL DB インスタンスで MySQL DB エンジンを再起動します。

例えば、Linux システムを使用している場合は、次の構文を使用できます。

service mysqld restart

9.    ソース RDS for MySQL DB インスタンスへの接続を確立します。

例:

mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.152707', master_log_pos= 456;

master_host: ソース Amazon RDS for MySQL インスタンスのエンドポイント。
master_user: レプリケーションユーザーの名前 (ステップ 4 で作成)。
master_password: レプリケーションユーザーのパスワード。
master_log_file: ステップ 3 で記録されたバイナリログファイルの名前。(ステップ 3 の出力例では、バイナリログファイル名として「mysql-bin-changelog.152707」と示されていました。)
master_log_pos: ステップ 3 で記録されたバイナリログの位置。(ステップ 3 の出力例では、バイナリログファイルの位置として「456」が示されていました。)

10.    ターゲット RDS for MySQL DB インスタンスにログインし、次のコマンドでレプリケーションを開始します。

mysql> start slave;

11.  レプリケーションがソース RDS for MySQL DB インスタンスとターゲット MySQL DB インスタンスの間で同期していることを確認します。

mysql> show slave status\G

AWS DMS

AWS Database Migration Service (AWS DMS) を利用してレプリケーションをセットアップする前に、次のリソースを確認してください。

  • ポイントインタイム復元インスタンスからバックアップを取得するには、バイナリログレプリケーションのセクションのステップ 1~5 を参照してください。カスタム開始時刻は、バックアップ保持期間内の任意の (過去) 時点にすることができるため、次の手順に従うのがベストプラクティスです。ターゲット DB インスタンスからバックアップを復元した後、DB 復旧プロセス中に生成されるチェックポイントログシーケンス番号 (LSN) を記録します。変更データキャプチャ (CDC) の開始時刻を設定するには、LSN を参照する必要があります。チェックポイント LSN を取得するには、ポイントインタイム復元オペレーションが完了した直後に、復元された RDS MySQL インスタンスのエラーログファイルを確認します。例:
[Note] InnoDB: Log scan progressed past the checkpoint lsn 44326835524

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ