ダウンタイムを短縮して Amazon RDS MariaDB または MySQL データベースにデータをインポートする - Amazon Relational Database Service

ダウンタイムを短縮して Amazon RDS MariaDB または MySQL データベースにデータをインポートする

場合によっては、ライブアプリケーションをサポートする外部の MariaDB または MySQL データベースから MariaDB DB インスタンス、MySQL DB インスタンス、または MySQL マルチ AZ DB クラスターにデータをインポートする必要があります。次の手順を使用して、アプリケーションの可用性への影響を最小限に抑えることができます。この手順は、巨大なデータベースを使用する場合にも役立ちます。この手順を使用すると、ネットワーク経由で AWS に渡されるデータ量を削減することで、インポートのコストを削減できます。

この手順では、データベースデータのコピーを Amazon EC2 インスタンスに送信し、そのデータを新しい Amazon RDS データベースにインポートします。次に、レプリケーションを使用して、Amazon RDS データベースをライブ外部インスタンスで最新の状態にした後、アプリケーションを Amazon RDS データベースにリダイレクトします。外部のインスタンスが MariaDB 10.0.24 以降であり、ターゲットインスタンスが RDS for MariaDB である場合は、グローバルトランザクション識別子 (GTID) に基づいて MariaDB のレプリケーションを設定します。それ以外の場合は、バイナリログの調整に基づいてレプリケーションを設定します。外部データベースがサポートしている場合は、GTID ベースのレプリケーションが推奨されます。GTID ベースのレプリケーションは信頼性の高い方法だからです。詳細については、MariaDB ドキュメントの「グローバルトランザクション ID」を参照してください。

注記

MySQL DB インスタンスにデータをインポートする際、シナリオでサポートされている場合は、バックアップファイルと Amazon S3 を使用して、Amazon RDS との間でデータを移動することをお勧めします。詳細については、「MySQL DB インスタンスへのバックアップの復元」を参照してください。


                    外部 MySQL データベースを RDS 上の MySQL データベースにインポートする
注記

潜在的なレプリケーションの問題のため、バージョン 5.5 より前のバージョンの MySQL を使用するソース MySQL データベースでは、この手順を使用しないことをお勧めします。詳細については、MySQL ドキュメントの「MySQL のバージョン間のレプリケーションの互換性」を参照してください。

既存のデータベースのコピーを作成する

最小限のダウンタイムで RDS for MariaDB または RDS for MySQL データベースに大量のデータを移行するプロセスでは、最初のステップとしてソースデータのコピーを作成します。


                        MySQL データベースのバックアップの作成

SQL 形式または区切り文字付きテキスト形式でデータベースのバックアップを作成するには、mysqldump ユーティリティを使用できます。非運用環境で各形式のテスト実行を行って、どちらの方法が mysqldump の実行時間が短いか確認することをお勧めします。

また、ロードに区切り文字付きテキスト形式を使用することでもたらされるメリットに対して、mysqldump のパフォーマンスの重み付けをすることをお勧めします。区切り文字付きテキスト形式を使用したバックアップでは、ダンプされる各テーブルについてタブ区切りテキストファイルを作成されます。データベースのインポートに必要な時間を短縮するため、LOAD DATA LOCAL INFILE コマンドを使用してこれらのファイルを同時にロードできます。mysqldump 形式を選択してデータをロードする方法の詳細については、「MySQL ドキュメント」の「Using mysqldump for backups」を参照してください。

バックアップ操作をスタートする前に、Amazon RDS にコピーする MariaDB または MySQL データベースでレプリケーションのオプションを設定してください。レプリケーションのオプションには、バイナリログ記録の有効化や一意のサーバー ID の設定が含まれます。これらのオプションを設定すると、サーバーはデータベーストランザクションのログ作成をスタートし、このプロセスの後でこのサーバーをソースレプリケーションインスタンスにするために準備します。

注記

--single-transaction オプションでは、データベースの一貫した状態をダンプするため、mysqldump とともに使用します。有効なダンプファイルを確保するため、mysqldump の実行中はデータ定義言語 (DDL) ステートメントを実行しないでください。これらのオペレーションに対してメンテナンスウィンドウをスケジュールできます。

ダンプファイルから次のスキーマを除外します: sysperformance_schemainformation_schemamysqldump ユーティリティは、デフォルトでこれらのスキーマを除外します。

ユーザーや権限を移行するには、pt-show-grants ユーティリティなどの再作成のためのデータ制御言語 (DCL) を生成するツールの使用を検討します。

レプリケーションオプションを設定するには

  1. my.cnf ファイルを編集します (このファイルは通常 /etc にあります)。

    sudo vi /etc/my.cnf

    log_bin オプションと server_id オプションを [mysqld] に追加します。log_bin オプションは、バイナリログファイルのファイル名識別子を提供します。server_id オプションは、ソースとレプリカの関係のサーバーに一意の識別子を提供します。

    次の例は、my.cnf ファイルの更新された [mysqld] セクションを示しています。

    [mysqld] log-bin=mysql-bin server-id=1

    詳細については、MySQL ドキュメントを参照してください。

  2. マルチ AZ DB クラスターでのレプリケーションでは、ENFORCE_GTID_CONSISTENCY および GTID_MODE パラメータを ON に設定します。

    mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
    mysql> SET @@GLOBAL.GTID_MODE = ON;

    これらの設定は、DB インスタンスでのレプリケーションには必要ありません。

  3. mysql サービスを再起動します。

    sudo service mysqld restart

既存のデータベースのバックアップコピーを作成するには

  1. mysqldump ユーティリティを使用し、SQL 形式または区切り文字付きテキスト形式を指定して、データのバックアップを作成します。

    --master-data=2 を指定して、サーバー間のレプリケーションを開始するために使用できるバックアップファイルを作成します。詳細については、mysqldump のドキュメントを参照してください。

    パフォーマンスを向上させ、データの整合性を確保するためには、mysqldump の --order-by-primary および --single-transaction オプションを使用します。

    MySQL システムデータベースをバックアップに含めないようにするには、mysqldump で --all-databases オプションを使用しないでください。詳細については、MySQL ドキュメントの「mysqldump を使用したデータスナップショットの作成」を参照してください。

    バックアップファイルが作成されるディレクトリを書き込み可能にするために、必要に応じて chmod を使用します。

    重要

    Windows で、管理者としてコマンドウィンドウを実行します。

    • SQL 出力を作成するには、次のコマンドを使用します。

      Linux、macOS、Unix の場合:

      sudo mysqldump \ --databases database_name \ --master-data=2 \ --single-transaction \ --order-by-primary \ -r backup.sql \ -u local_user \ -p password
      注記

      セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

      Windows の場合:

      mysqldump ^ --databases database_name ^ --master-data=2 ^ --single-transaction ^ --order-by-primary ^ -r backup.sql ^ -u local_user ^ -p password
      注記

      セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

    • 区切り文字付きテキスト出力を作成するには、次のコマンドを使用します。

      Linux、macOS、Unix の場合:

      sudo mysqldump \ --tab=target_directory \ --fields-terminated-by ',' \ --fields-enclosed-by '"' \ --lines-terminated-by 0x0d0a \ database_name \ --master-data=2 \ --single-transaction \ --order-by-primary \ -p password

      Windows の場合:

      mysqldump ^ --tab=target_directory ^ --fields-terminated-by "," ^ --fields-enclosed-by """ ^ --lines-terminated-by 0x0d0a ^ database_name ^ --master-data=2 ^ --single-transaction ^ --order-by-primary ^ -p password
      注記

      セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

      Amazon RDS データベースで、ストアドプロシージャ、トリガー、関数、イベントを必ず手動で作成してください。コピーするデータベースにこれらのオブジェクトのいずれかが含まれる場合は、mysqldump の実行時に除外します。これを行うには、mysqldump コマンドで引数 --routines=0 --triggers=0 --events=0 を含めます。

      区切り文字付きテキスト形式を使用する場合、mysqldump の実行時に CHANGE MASTER TO コメントが返されます。このコメントには、マスターログのファイル名と場所が含まれます。外部インスタンスが MariaDB バージョン 10.0.24 以降でない場合は、MASTER_LOG_FILE および MASTER_LOG_POS の値を書き留めてください。これらの値は、レプリケーションを設定するときに必要です。

      -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;

      SQL 形式を使用する場合は、バックアップファイルの CHANGE MASTER TO コメントでマスターログのファイル名と場所を取得できます。外部インスタンスが MariaDB バージョン 10.0.24 以降の場合は、次のステップで GTID を取得できます。

  2. 使用している外部インスタンスが MariaDB バージョン 10.0.24 以降である場合は、GTID ベースのレプリケーションを使用します。外部 MariaDB インスタンスで SHOW MASTER STATUS を実行してバイナリログファイル名と場所を取得し、また、外部 MariaDB インスタンス上でも BINLOG_GTID_POS を実行してそれらを GTID に変換します。

    SELECT BINLOG_GTID_POS('binary log file name', binary log file position);

    返された GTID を書き留めます。これはレプリケーションを設定する際に必要となります。

  3. Amazon RDS データベースにデータをコピーするために必要なネットワークリソースの量を減らすために、コピーされたデータを圧縮します。バックアップファイルのサイズをメモします。この情報は、作成する Amazon EC2 インスタンスの大きさを決定するときに必要です。作業が終了したら、GZIP または任意の圧縮ユーティリティを使用してバックアップファイルを圧縮します。

    • SQL 出力を圧縮するには、次のコマンドを使用します。

      gzip backup.sql
    • 区切り文字付きテキスト出力を圧縮するには、次のコマンドを使用します。

      tar -zcvf backup.tar.gz target_directory

Amazon EC2 インスタンスを作成し、圧縮したデータベースをコピーする

圧縮したデータベースのバックアップファイルを Amazon EC2 インスタンスにコピーする場合、データベースインスタンス間で非圧縮データを直接コピーするよりも必要なネットワークリソースは少なくなります。データを Amazon EC2 にコピーしたら、そこから MariaDB または MySQL データベースに直接コピーできます。ネットワークリソースのコストを節約するには、Amazon EC2 インスタンスが Amazon RDS DB インスタンスと同じ AWS リージョンに存在している必要があります。Amazon EC2 インスタンスを Amazon RDS データベースと同じ AWS リージョンに配置することで、インポート時のネットワークレイテンシーも低減されます。


                        データベースバックアップの EC2 インスタンスへのコピー

Amazon EC2 インスタンスを作成し、データをコピーするには

  1. RDS データベースを作成する予定の AWS リージョン に、仮想プライベートクラウド (VPC)、VPC セキュリティグループ、および VPC サブネットを作成します。VPC セキュリティグループのインバウンドルールで、アプリケーションが AWS に接続するために必要な IP アドレスを許可していることを確認します。これには、IP アドレスの範囲 (203.0.113.0/24 など) や別の VPC セキュリティグループを指定できます。Amazon VPC マネジメントコンソールを使用して、VPC、サブネット、セキュリティグループを作成および管理できます。詳細については、Amazon Virtual Private Cloud 入門ガイドの「Amazon VPC のスタート方法」を参照してください。

  2. Amazon EC2 管理コンソールを開き、Amazon EC2 インスタンスと Amazon RDS データベースの両方が含まれる AWS リージョンを選択します。ステップ 1 で作成した VPC、サブネット、セキュリティグループを使用して Amazon EC2 インスタンスを起動します。非圧縮の場合のデータベースバックアップファイルに十分なストレージを備えたインスタンスタイプを選択していることを確認します。Amazon EC2 インスタンスの詳細については、Linux 用 Amazon Elastic Compute Cloud ユーザーガイドの「Amazon EC2 Linux インスタンスのスタート方法」を参照してください。

  3. Amazon EC2 インスタンスから Amazon RDS データベースに接続するには、VPC セキュリティグループを編集します。EC2 インスタンスのプライベート IP アドレスを指定するインバウンドルールを追加します。このプライベート IP アドレスは、EC2 コンソールウィンドウの [Instance] ペインの [Details] タブで確認できます。VPC セキュリティグループを編集してインバウンドルールを追加するには、EC2 コンソールのナビゲーションペインの [Security Groups] (セキュリティグループ) でセキュリティグループを選択してから、EC2 インスタンスのプライベート IP アドレスを指定して MySQL または Aurora のインバウンドルールを追加します。VPC セキュリティグループにインバウンドルールを追加する方法については、「Amazon VPC ユーザーガイド」の「ルールを追加または削除する」を参照してください。

  4. ローカルシステムから Amazon EC2 インスタンスに、圧縮されたデータベースバックアップファイルをコピーします。必要に応じて chmod を使用して、Amazon EC2 インスタンスのターゲットディレクトリに対する書き込みアクセス許可があることを確認します。scp または Secure Shell (SSH) クライアントを使用してファイルをコピーできます。次に例を示します。

    $ scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
    重要

    機密データは、安全なネットワーク転送プロトコルを使用してコピーしてください。

  5. Amazon EC2 インスタンスに接続し、次のコマンドを使用して最新のアップデートと MySQL クライアントツールをインストールします。

    sudo yum update -y sudo yum install mysql -y

    詳細については、Linux 用 Amazon Elastic Compute Cloud ユーザーガイドの「インスタンスへの接続」を参照してください。

    重要

    この例では、MySQL クライアントを Amazon Linux ディストリビューションの Amazon マシンイメージ (AMI) にインストールします。Ubuntu や RedHat Enterprise Linux など、別のディストリビューションに MySQL クライアントをインストールする場合、この例は機能しません。MySQL のインストールの詳細については、MySQL ドキュメントの Installing and Upgrading MySQL を参照してください。

  6. Amazon EC2 インスタンスに接続されている間に、データベースバックアップファイルを解凍します。以下は例です。

    • SQL 出力を解凍するには、次のコマンドを使用します。

      gzip backup.sql.gz -d
    • 区切り文字付きテキスト出力を解凍するには、次のコマンドを使用します。

      tar xzvf backup.tar.gz

MySQL または MariaDB データベースを作成し、Amazon EC2 インスタンスからデータをインポートする

Amazon EC2 インスタンスと同じ AWS リージョンに MariaDB DB インスタンス、MySQL DB インスタンス、または MySQL マルチ AZ DB クラスターを作成することにより、EC2 からのデータベースのバックアップファイルをインターネット経由よりも速くインポートできます。


                        EC2 インスタンスから MySQL データベースにバックアップをインポートする

MariaDB または MySQL データベースを作成し、データをインポートするには

  1. この Amazon RDS データベースについて予想されるワークロードをサポートするのに必要な DB インスタンスクラスとストレージ領域の容量を決定します。このプロセスの一環として、データロードの手順に十分な領域と処理能力を決定します。また、本番ワークロードの処理に必要なものも決定します。これは、ソースの MySQL または MariaDB データベースのサイズおよびリソースに基づいて見積もることができます。詳細については、「 DB インスタンスクラス」を参照してください。

  2. Amazon EC2 インスタンスを含む AWS リージョンに、DB インスタンスまたはマルチ AZ DB クラスターを作成します。

    MySQL マルチ AZ DB クラスターを作成するには、「マルチ AZ DB クラスターの作成」の手順に従います。

    MariaDB または MySQL DB インスタンスを作成するには、「Amazon RDS DB インスタンスの作成」の手順に従い、以下のガイドラインに従ってください。

    • 次のように、ソース DB インスタンスと互換性のある DB エンジンのバージョンを指定します。

      • ソースインスタンスが MySQL 5.5.x の場合、Amazon RDS DB インスタンスは MySQL である必要があります。

      • ソースインスタンスが MySQL 5.6.x または 5.7.x の場合、Amazon RDS DB インスタンスは MySQL または MariaDB である必要があります。

      • ソースインスタンスが MySQL 8.0.x の場合、Amazon RDS DB インスタンスは MySQL 8.0.x である必要があります。

      • ソースインスタンスが MariaDB 5.5 以降の場合、Amazon RDS DB インスタンスは MariaDB である必要があります。

    • Amazon EC2 インスタンスと同じ仮想プライベートクラウド (VPC) と VPC セキュリティグループを指定します。これにより、Amazon EC2 インスタンスと Amazon RDS インスタンスはネットワーク上で相互に表示されることが確認できます。DB インスタンスがパブリックにアクセスできることを確認してください。後述するようにソースデータベースでレプリケーションをセットアップするには、DB インスタンスにパブリックアクセス可能である必要があります。

    • データベースのバックアップのインポートが完了するまで、複数のアベイラビリティーゾーン、バックアップ保持、リードレプリカを設定しないでください。インポートが完了したら、本稼働インスタンスについて、マルチ AZ とバックアップ保持を設定できます。

  3. Amazon RDS データベースのデフォルトの設定オプションを確認します。データベースのデフォルトパラメータグループに必要な設定オプションがない場合は、別のパラメータグループを検索するか、新しいパラメータグループを作成します。パラメータグループの作成の詳細については、「「パラメータグループを使用する」 」を参照してください。

  4. マスターユーザーとして、新しい Amazon RDS データベースに接続します。インスタンスにアクセスする必要がある管理者、アプリケーション、およびサービスのサポートに必要なユーザーを作成します。Amazon RDS データベースのホスト名は、このインスタンスの [Endpoint] (エンドポイント) の値からポート番号を除いた値です。例は mysampledb.123456789012.us-west-2.rds.amazonaws.com です。エンドポイントの値は、Amazon RDS 管理コンソールのデータベースの詳細で確認できます。

  5. Amazon EC2 インスタンスに接続します。詳細については、Linux 用 Amazon Elastic Compute Cloud ユーザーガイドの「インスタンスへの接続」を参照してください。

  6. mysql コマンドを使用して、Amazon EC2 インスタンスからリモートホストとして Amazon RDS データベースに接続します。次に例を示します。

    mysql -h host_name -P 3306 -u db_master_user -p

    ホスト名は、Amazon RDS データベースのエンドポイントです。

  7. mysql プロンプトで、source コマンドを実行し、データベースダンプファイルの名前を渡して、Amazon RDS DB インスタンスにデータをロードします。

    • SQL 形式の場合は、次のコマンドを使用します。

      mysql> source backup.sql;
    • 区切り文字付きテキスト形式の場合は、Amazon RDS データベースをセットアップしたときに作成したデフォルトのデータベースではない場合、まず、データベースを作成します。

      mysql> create database database_name; $ mysql> use database_name;

      次にテーブルを作成します。

      mysql> source table1.sql $ mysql> source table2.sql etc...

      次にデータをインポートします。

      mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a'; $ mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a'; etc...

      パフォーマンスを向上させるために、複数の接続からこれらのオペレーションをパラレル実行して、すべてのテーブルを同時に作成およびロードすることができます。

      注記

      最初にテーブルをダンプしたときに mysqldump でデータ形式オプションを使用した場合は、データファイルの内容が適切に解釈されるよう mysqlimport または LOAD DATA LOCAL INFILE で同じオプションを使用してください。

  8. インポートしたデータベースに含まれるテーブルの 1 つまたは 2 つに対してシンプルな SELECT クエリを実行して、インポートが正常に完了したことを確認します。

この手順で使用された Amazon EC2 インスタンスが今後不要な場合は、EC2 インスタンスを終了して、AWS リソース使用率を減らします。EC2 インスタンスの終了についての詳細は、「Amazon EC2 ユーザーガイド」の「インスタンスの終了」を参照してください。

外部データベースと新しい Amazon RDS データベース間のレプリケーション

ソースデータベースは、データをコピーして MariaDB または MySQL データベースに転送するまでに更新された可能性があります。その場合は、レプリケーションを使用して、コピーしたデータベースをソースデータベースで最新のものにすることができます。


                        外部 MySQL データベースから RDS 上のデータベースにデータをレプリケートする

Amazon RDS データベースでレプリケーションを開始するために必要なアクセス許可は限定されており、Amazon RDS マスターユーザーは利用できません。そのため、Amazon RDS の mysql.rds_set_external_master コマンドまたは mysql.rds_set_external_master_gtid コマンドのいずれかを使用してレプリケーションを設定し、mysql.rds_start_replication コマンドを使用してライブデータベースと Amazon RDS データベース間でレプリケーションを開始してください。

レプリケーションをスタートするには

以前に、バイナリログ記録を有効にし、ソースデータベースの一意のサーバー ID を設定しました。これで、ライブデータベースをソースレプリケーションインスタンスとして、Amazon RDS データベースをレプリカとしてセットアップできます。

  1. Amazon RDS 管理コンソールで、ソースデータベースをホストするサーバーの IP アドレスを Amazon RDS データベースの VPC セキュリティグループに追加します。VPC セキュリティグループの変更方法の詳細については、Amazon Virtual Private Cloudユーザーガイドの「VPC のセキュリティグループ」を参照してください。

    ソースインスタンスと通信できるようにするために、Amazon RDS データベースの IP アドレスからの接続を許可するようにローカルネットワークを設定することも必要になる場合があります。Amazon RDS データベースの IP アドレスを確認するには、host コマンドを使用します。

    host rds_db_endpoint

    ホスト名は、Amazon RDS データベースのエンドポイントの DNS 名 (例: myinstance.123456789012.us-east-1.rds.amazonaws.com) です。エンドポイントの値は、Amazon RDS マネジメントコンソールのインスタンスの詳細で確認できます。

  2. 選択したクライアントを使用して、ソースインスタンスに接続し、レプリケーションに使用するユーザーを作成します。このアカウントはレプリケーション専用に使用され、セキュリティを強化するためにドメインに制限する必要があります。次に例を示します。

    MySQL 5.5、5.6、および 5.7

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY 'password';
    注記

    セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

  3. ソースインスタンスについて、REPLICATION CLIENTREPLICATION SLAVE の特権をレプリケーションユーザーに付与します。例えば、すべてのデータベースに対する REPLICATION CLIENT および REPLICATION SLAVE 権限を "repl_user" ユーザーに付与するには、以下のコマンドを実行します。

    MySQL 5.5、5.6、および 5.7

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';

    MySQL 8.0

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
    注記

    セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

  4. SQL 形式を使用してバックアップファイルを作成しており、外部インスタンスが MariaDB 10.0.24 以降でない場合は、ファイルのコンテンツを表示します。

    cat backup.sql

    このファイルに、マスターログファイルの名前と場所を示す CHANGE MASTER TO コメントが含まれています。mysqldump で --master-data オプションを使用した場合、バックアップファイルにこのコメントが含まれます。MASTER_LOG_FILEMASTER_LOG_POS の値に注意してください。

    -- -- Position to start replication or point-in-time recovery from -- -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;

    バックアップファイルの作成に区切りテキスト形式を使用しており、外部のインスタンスが MariaDB 10.0.24 以降でない場合は、このトピックの「既存のデータベースのバックアップコピーを作成するには」に記載されている手順のステップ 1 で、既にバイナリログの調整を行っているはずです。

    外部のインスタンスが MariaDB 10.0.24 以降の場合は、このトピックの「既存のデータベースのバックアップコピーを作成するには」の手順のステップ 2 で、レプリケーションを開始するための GTID を既に取得しているはずです。

  5. Amazon RDS データベースをレプリカにします。外部のインスタンスが MariaDB 10.0.24 以降でない場合、マスターユーザーとして Amazon RDS データベースに接続し、mysql.rds_set_external_master コマンドを使用して、ソースのレプリケーションインスタンスとしてソースデータベースを特定します。SQL 形式のバックアップファイルがある場合は、前のステップで決定したマスターログのファイル名とマスターログの位置を使用します。また、区切り文字テキスト形式を使用した場合は、バックアップファイルの作成時に決定した名前と場所を使用します。次に例を示します。

    CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
    注記

    セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

    外部インスタンスが MariaDB 10.0.24 以降の場合は、マスターユーザーとして Amazon RDS データベースに接続し、mysql.rds_set_external_master_gtid コマンドを使用して、ソースレプリケーションインスタンスとしてデータベースソースを特定します。このトピックの「既存のデータベースのバックアップコピーを作成するには」の手順のステップ 2 で決定した GTID を使用します。次に例を示します。

    CALL mysql.rds_set_external_master_gtid ('source_server_ip_address', 3306, 'ReplicationUser', 'password', 'GTID', 0);

    source_server_ip_address は、ソースレプリケーションインスタンスの IP アドレスです。EC2 プライベート DNS アドレスは現在サポートされていません。

    注記

    セキュリティのベストプラクティスとして、ここに表示されているプロンプト以外の認証情報を指定してください。

  6. Amazon RDS データベースで、mysql.rds_start_replication コマンドを実行してレプリケーションを開始します。

    CALL mysql.rds_start_replication;
  7. Amazon RDS データベースで、SHOW REPLICA STATUS コマンドを実行して、レプリカがいつソースレプリケーションインスタンスの最新の状態に更新されるかを特定します。SHOW REPLICA STATUS コマンドの結果には、Seconds_Behind_Master フィールドが含まれます。Seconds_Behind_Master フィールドが 0 を返す場合、レプリカはソースレプリケーションインスタンスで最新の状態になります。

    注記

    MySQL の旧バージョンは、SHOW SLAVE STATUS ではなく SHOW REPLICA STATUS を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。

    MariaDB 10.5、10.6、または 10.11 DB インスタンスの場合は、MySQL コマンドの代わりに mysql.rds_replica_status の手順を実行します。

  8. Amazon RDS データベースが最新の状態になったら、必要に応じてデータベースを復元できるように、自動バックアップを有効にします。Amazon RDS 管理コンソールを使用して、Amazon RDS データベースの自動バックアップを有効化または変更できます。詳細については、「バックアップの概要」を参照してください。

ライブアプリケーションを Amazon RDS インスタンスにリダイレクトする

MariaDB または MySQL データベースがソースレプリケーションインスタンスで最新の状態になったら、ライブアプリケーションを更新して、Amazon RDS インスタンスを使用できます。


                        レプリケーションを停止し、ライブアプリケーションを RDS 上のデータベースに転送する

ライブアプリケーションを MariaDB または MySQL データベースにリダイレクトしてレプリケーションを停止するには

  1. Amazon RDS データベースの VPC セキュリティグループを追加するには、アプリケーションをホストするサーバーの IP アドレスを追加します。VPC セキュリティグループの変更方法の詳細については、Amazon Virtual Private Cloudユーザーガイドの「VPC のセキュリティグループ」を参照してください。

  2. SHOW REPLICA STATUS コマンドの結果の Seconds_Behind_Master フィールドが 0 であることを確認します。この値は、レプリカがソースレプリケーションインスタンスの最新の状態であることを示します。

    SHOW REPLICA STATUS;
    注記

    MySQL の旧バージョンは、SHOW SLAVE STATUS ではなく SHOW REPLICA STATUS を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。

    MariaDB 10.5、10.6、または 10.11 DB インスタンスの場合は、MySQL コマンドの代わりに mysql.rds_replica_status の手順を実行します。

  3. トランザクションが終了したら、ソースへのすべての接続を閉じます。

  4. Amazon RDS データベースを使用するようにアプリケーションを更新します。この更新には、一般に、Amazon RDS データベースのホスト名とポート、接続に使用するユーザーアカウントとパスワード、および使用するデータベースを識別する接続設定の変更が含まれます。

  5. DB インスタンスに接続します。

    マルチ AZ DB クラスターの場合は、ライター DB インスタンスに接続します。

  6. mysql.rds_stop_replication コマンドを使用して Amazon RDS インスタンスのレプリケーションを停止します。

    CALL mysql.rds_stop_replication;
  7. Amazon RDS データベースで mysql.rds_reset_external_master コマンドを実行して、レプリケーション設定をリセットします。これにより、このインスタンスはレプリカとして識別されなくなります。

    CALL mysql.rds_reset_external_master;
  8. マルチ AZ のサポートやリードレプリカなど、Amazon RDS のその他の機能を有効にします。詳細については、「マルチ AZ 配置の設定と管理」および「DB インスタンスのリードレプリカの操作」を参照してください。