Amazon Aurora を使用した MySQL データベースの読み取りスケーリング
MySQL DB インスタンスで Amazon Aurora を使用することで、Amazon Aurora の読み取りスケーリング機能を活用して MySQL DB インスタンスの読み取りワークロードを拡張できます。Aurora を使用して MySQL DB インスタンスの読み取りを拡張するには、Amazon Aurora MySQL DB クラスターを作成し、MySQL DB インスタンスのリードレプリカに指定します。これは、RDS for MySQL DB インスタンス、または Amazon RDS の外部で実行されている MySQL データベースに適用されます。
Amazon Aurora DB クラスターの作成については、「Amazon Aurora DB クラスターの作成」を参照してください。
MySQL DB インスタンスと Amazon Aurora DB クラスターの間でレプリケーションを設定するときは、以下のガイドラインに従ってください。
-
Amazon Aurora DB クラスターを参照するときは、Amazon Aurora MySQL DB クラスターのエンドポイントアドレスを使用します。フェイルオーバーが発生すると、Aurora MySQL DB クラスターのプライマリインスタンスに昇格された Aurora レプリカで、引き続きこの DB クラスターのエンドポイントアドレスが使用されます。
-
ライターインスタンスのバイナリログが Aurora レプリカに適用されたことを確認するまで、これらのバイナリログを保持します。このメンテナンスによって、障害発生時にライターインスタンスを復元できます。
重要
自己管理型レプリケーションを使用する場合、ユーザー自身で発生する可能性のあるすべてのレプリケーションの問題をモニタリングし、解決する必要があります。詳細については、「リードレプリカ間の遅延の診断と解決」を参照してください。
注記
Amazon Aurora MySQL DB クラスターでレプリケーションを開始するために必要なアクセス許可は制限されており、Amazon RDS マスターユーザーは使用できません。このため、Aurora MySQL DB クラスターと MySQL DB インスタンスの間でレプリケーションを設定するには、mysql.rds_set_external_master (Aurora MySQL バージョン 2) または mysql.rds_set_external_source (Aurora MySQL バージョン 3) と mysql.rds_start_replication プロシージャを使用する必要があります。
外部のソースインスタンスと Aurora MySQL DB クラスターの間でレプリケーションを開始する
-
出典 MySQL DB インスタンスを読み取り専用にします。
mysql>
FLUSH TABLES WITH READ LOCK;mysql>
SET GLOBAL read_only = ON; -
出典 MySQL DB インスタンスで
SHOW MASTER STATUS
コマンドを実行して、binlog の場所を特定します。以下の例のような出力を受け取ります。File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
-
mysqldump
を使用して、外部の MySQL DB インスタンスから Amazon Aurora MySQL DB クラスターにデータベースをコピーします。大規模なデータベースの場合、Amazon Relational Database Service ユーザーガイドの「ダウンタイムを短縮して MySQL または MariaDB DB インスタンスにデータをインポートする」の手順を使用することが必要になる場合があります。Linux、macOS、Unix の場合:
mysqldump \ --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u
local_user
\ -plocal_password
| mysql \ --host aurora_cluster_endpoint_address \ --port 3306 \ -uRDS_user_name
\ -pRDS_password
Windows の場合:
mysqldump ^ --databases <database_name> ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u
local_user
^ -plocal_password
| mysql ^ --host aurora_cluster_endpoint_address ^ --port 3306 ^ -uRDS_user_name
^ -pRDS_password
注記
-p
オプションと入力するパスワードの間にスペースがないことを確認します。--host
コマンドで、--user (-u)
、--port
、-p
、mysql
オプションを使用して、Aurora DB クラスターに接続するためのホスト名、ユーザー名、ポート、パスワードを指定します。このホスト名は、Amazon Aurora DB クラスターのエンドポイントの DNS 名 (例えばmydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com
) です。エンドポイントの値は、Amazon RDS マネジメントコンソールでクラスターの詳細を確認できます。 -
もう一度出典 MySQL DB インスタンスを書き込み可能にします。
mysql>
SET GLOBAL read_only = OFF;mysql>
UNLOCK TABLES;レプリケーションで使用するバックアップの作成の詳細については、MySQL ドキュメントの Backing up a source or replica by making it read only
を参照してください。 -
Amazon RDS マネジメントコンソールで、出典 MySQL データベースをホストするサーバーの IP アドレスを、Amazon Aurora DB クラスターの VPC セキュリティグループに追加します。VPC セキュリティグループの変更方法の詳細については、「Amazon Virtual Private Cloud ユーザーガイド」の「VPC のセキュリティグループ」を参照してください。
出典 MySQL インスタンスと通信できるようにするために、Amazon Aurora DB クラスターの IP アドレスからの接続を許可するようにローカルネットワークを設定することも必要になる場合があります。Amazon Aurora DB クラスターの IP アドレスを確認するには、
host
コマンドを使用します。host
aurora_endpoint_address
このホスト名は、Amazon Aurora DB クラスターのエンドポイントからの DNS 名です。
-
選択したクライアントを使用して、外部の MySQL インスタンスに接続し、レプリケーションに使用される MySQL ユーザーを作成します。このアカウントはレプリケーション専用に使用され、セキュリティを強化するためにドメインに制限する必要があります。次に例を示します。
CREATE USER '
repl_user
'@'example.com
' IDENTIFIED BY 'password
'; -
外部の MySQL インスタンスについて、
REPLICATION CLIENT
とREPLICATION SLAVE
の特権をレプリケーションユーザーに付与します。例えば、すべてのデータベースに対するREPLICATION CLIENT
およびREPLICATION SLAVE
権限を "repl_user
" ユーザーに付与するには、以下のコマンドを実行します。GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO '
repl_user
'@'example.com
' IDENTIFIED BY 'password
'; -
レプリケーションを設定する前に、Aurora MySQL DB クラスターの手動スナップショットをリードレプリカに指定します。DB クラスターをリードレプリカとしてレプリケーションを再構築する必要がある場合は、このスナップショットから Aurora MySQL DB クラスターを復元でき、MySQL DB インスタンスから新しい Aurora MySQL DB クラスターにデータをインポートする必要はありません。
-
Amazon Aurora DB クラスターをレプリカとして指定します。Amazon Aurora DB クラスターにマスターユーザーとして接続し、mysql.rds_set_external_master (Aurora MySQL バージョン 2) または mysql.rds_set_external_source (Aurora MySQL バージョン 3) と mysql.rds_start_replication プロシージャを使用して、ソース MySQL データベースをレプリケーションソースとして指定します。
ステップ 2 で特定したバイナリログファイル名と場所を使用します。次に例を示します。
For Aurora MySQL version 2: CALL mysql.rds_set_external_master ('mymasterserver.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0); For Aurora MySQL version 3: CALL mysql.rds_set_external_source ('mymasterserver.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
-
Amazon Aurora DB クラスターで、mysql.rds_start_replication プロシージャを呼び出してレプリケーションを開始します。
CALL mysql.rds_start_replication;
出典 MySQL DB インスタンスと Amazon Aurora DB クラスター間のレプリケーションが確立されると、Aurora レプリカを Amazon Aurora DB クラスターに追加できます。その後で、Aurora レプリカに接続してデータの読み取りを拡張できます。Aurora レプリカの作成については、「DB クラスターに Aurora レプリカを追加する」を参照してください。