外部レプリカの構成の詳細については、外部レプリケーションについてをご覧ください。
外部レプリカの構成を行う
始める前に
このタスクを開始する前に、外部レプリカの要件を満たす Cloud SQL インスタンスと外部 MySQL インスタンスを用意しておく必要があります。
プライマリ インスタンスを構成する
- Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- プライマリ インスタンスで外部レプリカの IP アドレスへのアクセスを有効にします。
IP アクセスの有効化の詳細については、IP 接続のためのアクセスを構成するをご覧ください。
- 後で使用できるように、プライマリ インスタンスのパブリック IP アドレスとパブリック送信 IP アドレスを記録します。これらの値はインスタンスの [概要] ページで確認できます。
- 右上隅の Cloud Shell アイコン()をクリックします。
- Cloud Shell プロンプトで、組み込み MySQL クライアントを使用してプライマリ インスタンスに接続します。
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=root
- root パスワードを入力します。mysql プロンプトが表示されます。
- レプリケーション用に特別なユーザーを作成し、レプリケーション権限を付与します。
CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
- 新しいデータベースで開始する場合は、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
CREATE DATABASE test; USE test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- プライマリ インスタンスにデータベースがすでに存在する場合は、レプリカでもデータベースを作成する必要があります。これを行うには、プライマリ インスタンスから Cloud Storage バケットにデータベースをエクスポートし、レプリカにインポートします。詳しくは、Cloud SQL から Cloud Storage の SQL ダンプファイルにデータをエクスポートするをご覧ください。
外部レプリカを構成する
警告: この手順を行うと、レプリカの MySQL データベースでホストされているすべてのデータ(ユーザーとパスワードを含む)がプライマリ インスタンスの設定とデータで上書きされます。-
レプリカをホストしているマシン上で、プライマリ インスタンスから作成したエクスポート ファイルとともに新しい外部 MySQL インスタンスをシードします。
たとえば、次のコマンドは、
mydump.sql
という名前のエクスポートされたファイルを読み込みます。mysql --user=root --password < mydump.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;
「マスターからのイベントの送信を待機しています」と表示された場合、レプリケーションは作動しています。
外部レプリカのプライマリ インスタンスを降格する
外部レプリカを使用する 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_DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT" } }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
Cloud SQL レプリカを配置するリージョンを使用します。
降格プロセスを開始します。
この API 呼び出しでは機密情報を提供する必要があるため、データをコマンドラインに入力するのではなく、JSON ファイルを使用してデータを cURL に渡す必要があります。
次のデータファイルを作成します。
{ "demoteMasterContext": { "replicaConfiguration": { "mysqlReplicaConfiguration": { "username": "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://sqladmin.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
に設定し、アプリケーションを更新してこのソース データベース サーバーを指すようにします。
トラブルシューティング
問題 | トラブルシューティング |
---|---|
エラー メッセージ: The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires |
プライマリ Cloud SQL インスタンスで自動バックアップ、バイナリログ、ポイントインタイム リカバリが有効になっているため、レプリカが追いつくまで必要なログが保持されていなければなりません。しかし、この場合、バイナリログは存在しますが、読み取りを開始する行がレプリカで認識されません。 正しいフラグを設定して新しいダンプファイルを作成し、そのファイルを使用して外部レプリカを構成します。
|
次のステップ
- レプリカの管理について学習します。
- 外部レプリカの構成の要件とベスト プラクティスについて学習します。
- MySQL のレプリケーションについて学習します。
- レプリケーションのオプションについて学習します。
- レプリケーションのステータスの確認について学習します。
- 外部サーバーからのレプリケーションについて学習します。