ここでは、Cloud SQL 外部の 1 つ以上のレプリカに複製される Cloud SQL インスタンスを構成する方法を説明します。また、外部レプリカ構成に含まれるマスター インスタンスを降格して構成を元に戻す方法も説明します。
外部レプリカの構成の詳細については、レプリケーションを構成するための要件とヒントをご覧ください。
外部レプリカ構成を設定する
始める前に
この作業を開始する前に、外部レプリカの要件を満たす Cloud SQL インスタンスと外部 MySQL インスタンスを用意しておく必要があります。
マスター インスタンスの構成
Google Cloud Console の Cloud SQL インスタンス ページに移動します。
マスター インスタンスでの外部レプリカの IP アドレスへのアクセスを有効にします。
IP アクセスを有効にする方法について詳しくは、IP 接続のためのアクセスを構成するをご覧ください。
後で使用するために、マスター インスタンスの IP アドレスを記録します。
IP アドレスは、インスタンスの [概要] ページに表示されます。
右上隅の Cloud Shell アイコン(
)をクリックします。
Cloud Shell プロンプトで、組み込み
mysql
クライアントを使用してマスター インスタンスに接続します。gcloud sql connect [MASTER_INSTANCE_NAME] --user=root
root パスワードを入力します。
mysql
プロンプトが表示されます。レプリケーション用の特別なユーザーを作成します。
CREATE USER '[REPLICATION_USER]'@'%' IDENTIFIED BY '[REPLICATION_PASSWORD]';
レプリケーション用ユーザーにレプリケーション権限を付与します。
GRANT REPLICATION SLAVE ON *.* TO '[REPLICATION_USER]'@'%';
マスター インスタンスから Cloud Storage バケットにデータベースをエクスポートします。
SQL ダンプファイルを作成するで説明している外部レプリケーションの手順に従います。
レプリカをホストしているマシンから、Cloud Storage コンソール内のファイルをクリックして、バケットからレプリカへファイルをダウンロードします。
外部レプリカの構成
第 2 世代
-
レプリカをホストしているマシン上で、マスター インスタンスから作成したエクスポート ファイルとともに新しい外部 MySQL インスタンスをシードします。
たとえば、次のコマンドは、
mysqldump.sql
というエクスポート ファイルを読み込みます。mysql --user=root --password < mysqldump.sql
- このレプリカとマスターのペアのサーバー ID を特定します。
サーバー ID は数値(たとえば「3」)です。これは、外部レプリカの構成全体で一意でなければなりません(各レプリカは一意のサーバー ID を持つ必要があります)。
- レプリカの
my.cnf
オプション ファイルに次のオプションを追加します。[mysqld] server-id=[SERVER_ID] gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON replicate-ignore-db=mysql binlog-format=ROW log_bin=mysql-bin expire_logs_days=1 read_only=ON
MySQL のレプリケーション オプションの詳細については、レプリケーションとバイナリログのオプションをご覧ください
。 mysqld
プロセスを再起動して構成ファイルが読み取られるようにします。- レプリカの
mysql
クライアントで、次のコマンドを入力します。CHANGE MASTER TO MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]', MASTER_PASSWORD='[REPLICATION_PASSWORD]', MASTER_AUTO_POSITION=1;
- レプリカのレプリケーションを開始します。
START SLAVE;
レプリケーションのステータスを確認します。
SHOW SLAVE STATUS\G;
「マスターからのイベントの送信を待機しています」と表示された場合、レプリケーションは作動しています。
第 1 世代
-
レプリカをホストしているマシン上で、マスター インスタンスから作成したエクスポート ファイルとともに新しい外部 MySQL インスタンスをシードします。
たとえば、次のコマンドは、
mysqldump.sql
というエクスポート ファイルを読み込みます。mysql --user=root --password < mysqldump.sql
- このレプリカとマスターのペアのサーバー ID を特定します。
サーバー ID は数値(たとえば「3」)です。これは、外部レプリカの構成全体で一意でなければなりません(各レプリカは一意のサーバー ID を持つ必要があります)。
リードレプリカで、次のような行を
my.cnf
オプション ファイルに追加して、サーバー ID を設定します。[mysqld] server-id=[SERVER_ID]
MySQL のレプリケーション オプションの詳細については、レプリケーションとバイナリログのオプションをご覧ください
。mysqld
プロセスを再起動して構成ファイルが読み取られるようにします。- エクスポート ファイルを開き、
CHANGE MASTER TO MASTER_LOG_FILE
コマンドを見つけます。 -
そのコマンドの行をコピーし、行頭のダッシュ("--")を削除してから
mysql
クライアントに貼り付けます。まだ Enter キーは押さないでください。
最後のセミコロンの前に、
MASTER_HOST
、MASTER_USER
、MASTER_PASSWORD
の値を挿入します。ステートメントは以下の例のようになるはずです。
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107, MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]', MASTER_PASSWORD='[REPLICATION_PASSWORD]';
- Enter キーを押してステートメントを実行します。
レプリカのレプリケーションを開始します。
START SLAVE;
レプリケーションのステータスを確認します。
SHOW SLAVE STATUS\G;
「マスターからのイベントの送信を待機しています」と表示された場合、レプリケーションは作動しています。
外部レプリカのマスターの降格
外部レプリカを使用する Cloud SQL インスタンスがある場合、外部レプリカの構成を元に戻すことができます。構成を元に戻すと、次のように変更されます。
- 外部レプリカが新しいマスター インスタンスになります。
- Cloud SQL インスタンスがリードレプリカになり、前は外部レプリカだったサーバー(現在のソース データベース サーバー)からのレプリケーションを行います。
外部レプリカの構成を元に戻すには、次の手順に従います。
-
ソース表現インスタンスを作成します。
降格オペレーションが完了した後は、このインスタンスが Cloud SQL レプリカのソース データベース サーバーを表します。
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "name": "[SOURCE_REPRESENTATION_NAME]", "region": "[REGION]", "databaseVersion": "[EXTERNAL_SERVER_MYSQL_VERSION]", "onPremisesConfiguration": { "hostPort": "[EXTERNAL_SERVER_IP]:[EXTERNAL_SERVER_PORT]" } }' \ -X POST \ https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
Cloud SQL レプリカを配置するリージョンを使用します。
降格プロセスを開始します。
この API 呼び出しでは機密情報を使用する必要があるため、データをコマンドラインに入力するのではなく、JSON ファイルを使用してデータを cURL に渡します。
次のデータファイルを作成します。
{ "demoteMasterContext": { "replicaConfiguration": { "mysqlReplicaConfiguration": { "username": "[MYSQL_REPLICATION_USERNAME]", "password": "[PASSWORD]", "caCertificate": "[EXTERNAL_SERVER_CA]", "clientCertificate": "[CLIENT_CERT]", "clientKey": "[PRIVATE_KEY]" } }, "masterInstanceName": "[SOURCE_REPRESENTATION_NAME]", }, }
次に、API を呼び出します。
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @[PATH_TO_DATA_FILE] \ https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/demoteMaster
SSL/TLS のオプションについて詳しくは、SSL/TLS オプションをご覧ください。
replicaConfiguration
オブジェクトにより使用されるプロパティの詳細については、外部サーバーからのレプリケーションをご覧ください。-
外部レプリカがマスター インスタンスからの保留中トランザクションをすべて完了するまで待ちます。
レプリカに追いつくと、
SHOW SLAVE STATUS
コマンドで表示されるSeconds Behind Master
が 0 となり、外部レプリカと Cloud SQL マスター間でExecuted_Gtid_Set
の値が同じになります。 mysql
クライアントを使用して、外部レプリカに対するレプリケーションを停止します。STOP SLAVE RESET SLAVE ALL
Cloud SQL インスタンスが新しくソース データベース サーバーとなった外部サーバーからのレプリケーションを開始するまで待ちます。
Cloud SQL インスタンスで
SHOW SLAVE STATUS
コマンドを実行すると、レプリケーションのステータスが提供されます。-
Cloud SQL インスタンスがソース データベース サーバーから正常にレプリケートしている場合は、ソース データベース サーバーの
read_only
フラグをoff
に設定し、アプリケーションを更新してこのソース データベース サーバーを指すようにします。
次のステップ
- レプリカの管理方法を学習します。
- 外部レプリカの構成の要件とベスト プラクティスについて学習します。
- MySQL のレプリケーションについて学習します。
- レプリケーションのオプションについて学習します。
- レプリケーションのステータスの確認について学習します。
- 外部サーバーからのレプリケーションについて学習します。