このページでは、外部サーバーから作成したダンプファイルがある場合に、レプリケーションを設定するプロセスについて説明します。
このページで説明する手順はすべて完了する必要があります。完了したら、他の Cloud SQL インスタンスと同じ方法でソース表現インスタンスを管理し、監視できます。
始める前に
始める前に、外部サーバーの構成、ソース表現インスタンスの作成、Cloud SQL レプリカの設定を完了している必要があります。
レプリケーション ユーザーの権限の更新
外部サーバー上のレプリケーション ユーザーは、任意のホスト(%
)からの接続を受け入れるように構成されています。Cloud SQL レプリカでのみ使用されるように、このユーザー アカウントを更新する必要があります。外部サーバーでターミナルを開き、次のコマンドを入力します。
mysql クライアント
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE ON *.* TO 'GCP_USERNAME'@'HOST'; FLUSH PRIVILEGES;
例
UPDATE mysql.user SET Host='192.0.2.0' WHERE Host='%' AND User='replicationUser'; GRANT REPLICATION SLAVE, EXECUTE ON *.* TO 'gcp_user'@'gmail.com'; FLUSH PRIVILEGES;
プロパティ | 説明 |
---|---|
NEW_HOST | Cloud SQL レプリカの送信 IP を指定します。 |
OLD_HOST | 変更する Host に割り当てる現在の値。 |
USERNAME | 外部サーバー上のレプリケーション ユーザー アカウント。 |
GCP_USERNAME | Google Cloud Platform(GCP)ユーザー アカウントのユーザー名。 |
HOST | Google Cloud Platform(GCP)ユーザー アカウントのホスト名。 |
レプリケーションの設定を確認する
設定が完了したら、外部サーバーから Cloud SQL レプリカが複製できることを確認します。
まず、外部同期設定が正しいことを確認します。以下のコマンドを使用して、次のことを確認します。
- Cloud SQL レプリカと外部サーバーとの間の接続
- レプリケーション ユーザーの権限
- バージョンの互換性
- Cloud SQL レプリカはまだレプリケートされていない
- 外部サーバーでバイナリログが有効になっている
- グローバル トランザクション識別子(GTID)が有効になっている
ターミナルを開いて次のコマンドを入力して、外部同期設定が正しいことを確認します。
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings
例
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
プロパティ | 説明 |
---|---|
SYNC_MODE | レプリケーションの設定後に、verifyExternalSyncSettings は Cloud SQL レプリカと外部サーバーの同期が維持できることを確認します。同期モードには EXTERNAL_SYNC_MODE_UNSPECIFIED 、ONLINE 、OFFLINE があります。 |
SKIP_VERIFICATION | データを同期する前に、組み込みの検証ステップをスキップするかどうか。レプリケーションの設定を確認している場合にのみ使用することをおすすめします。 |
PROJECT_ID | Google Cloud のプロジェクトの ID。 |
REPLICA_INSTANCE | Cloud SQL レプリカの ID。 |
データベースを Cloud Storage バケットにエクスポートする
Cloud SQL レプリカには、Cloud Storage バケット内にある mysqldump
ファイルでデータを入力できます。次の条件があります。
- MySQL にバンドルされている
mysqldump
ユーティリティを使用する必要があります。 mysqldump
の実行中は、外部サーバーで DDL オペレーションを実行しないでください。実行すると、エクスポート ファイルに不整合が生じる可能性があります。
データベースを Cloud Storage バケットにエクスポートするには、次の手順に従います。
- Google Cloud で、Cloud Storage バケットを作成します。
- 外部データベース サーバーに接続するクライアントを使用してターミナルを開き、次のコマンドを実行します。
mysqldump
mysqldump \ --host=EXTERNAL_HOST \ --port=EXTERNAL_PORT \ --user=USERNAME\ --password=PASSWORD \ --databases=DATABASE_LIST \ --hex-blob \ SOURCE_DATA \ --no-autocommit \ --default-character-set=utf8mb4 \ --single-transaction \ --set-gtid-purged=on \ ADD_DROP_TABLE \ ROUTINES \ COMPRESS \ GZIP \ | gcloud storage cp - gs://BUCKET/DUMP_FILENAME
例
mysqldump \ --host=192.0.2.1 \ --port=3306 \ --user=replicationUser \ --password \ --databases guestbook journal \ --hex-blob \ --master-data=1 \ --no-autocommit \ --default-character-set=utf8mb4 \ --single-transaction \ --compress \ | gzip \ | gcloud storage cp - gs://replica-bucket/external-database.sql.gz
プロパティ | 説明 |
---|---|
EXTERNAL_HOST | 外部サーバーの IPv4 または DNS アドレス。 |
EXTERNAL_PORT | 外部サーバーのポート。外部サーバーが Cloud SQL でホストされている場合は 3306 になります。 |
USERNAME | データベース読み取り権限を持つ外部サーバー上のレプリケーション ユーザー アカウントまたはユーザー アカウントの名前。 |
PASSWORD | レプリケーション ユーザーのパスワード。 |
DATABASE_LIST | システム データベース(sys 、mysql 、performance_schema 、information_schema )を除く、外部サーバー上のすべてのデータベースのリスト(スペース区切りのリスト)。データベースを一覧表示するには、SHOW DATABASES MySQL コマンドを使用します。 |
SOURCE_DATA | 8.0.26 より前のバージョンの MySQL を使用している場合は、このパラメータの値として --master-data を使用します。8.0.26 以降のバージョンの MySQL の場合は、このパラメータの値を --source-data に設定します。 |
ADD_DROP_TABLE | 各 CREATE TABLE ステートメントの前に DROP TABLE ステートメントを追加する場合は、--add-drop-table を含めます。 |
ROUTINES | ダンプされたデータベースの出力に保存されているルーティン(プロシージャや関数など)を表示するには、--routines を含めます。 |
COMPRESS | Cloud SQL レプリカと外部サーバーの間で送信されたすべての情報を圧縮する場合は、--compress を使用します。 |
GZIP | ダンプファイルをさらに圧縮するには、| gzip を使用します。圧縮に適さないデータ(圧縮されないバイナリデータや JPG 画像など)がデータベースに含まれている場合は、これを使用しないでください。 |
BUCKET | 手順 1 で作成したバケットの名前にはダンプファイルが含まれています。 |
DUMP_FILENAME | この名前のファイルがバケット内に作成されます。このファイルには、外部サーバー上のデータベースのコンテンツが含まれています。 |
Cloud Storage バケットのファイルパスでソース表現インスタンスを更新する
ソース表現インスタンスとは、Cloud SQL レプリカに対するソース データベース サーバーを表す Cloud SQL インスタンスのことです。これは Google Cloud コンソールに表示され、通常の Cloud SQL インスタンスと同じように見えますが、データは含まれず、構成もメンテナンスも必要ありません。また、課金にも影響しません。
source.json
ファイルには、ソース表現インスタンスに関する情報が含まれています。
REST
{ "name": "PRIMARY_INSTANCE_NAME", "region": "REGION_NAME", "databaseVersion": "DB_NAME_AND_VERSION", "onPremisesConfiguration": { "hostPort": "IP_ADDRESS_AND_PORT", "username": "USERNAME", "password": "PASSWORD" }, "dumpFilePath" :"DUMP_FILE_PATH" }
例
{ "name": "cloudsql-source-instance", "region": "us-central1", "databaseVersion": "MYSQL_5_7", "onPremisesConfiguration": { "hostPort": "192.0.2.0:3306", "username": "replicationUser", "password": "486#@%*@" }, "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz" }
プロパティ | 説明 |
---|---|
PRIMARY_INSTANCE_NAME | ソース表現インスタンスに関連付けられている Cloud SQL インスタンスの名前。 |
REGION_NAME | ソース表現インスタンスに割り当てられるリージョンの名前。 |
DB_NAME_AND_VERSION | ソース表現インスタンスに関連付けられているデータベースの名前とバージョン番号。 |
IP_ADDRESS_AND_PORT | ソース表現インスタンス用に予約された IP アドレスとポート番号。 |
USERNAME | ソース表現インスタンスのユーザー名。 |
PASSWORD | ソース表現インスタンスのパスワード。 |
DUMP_FILE_PATH | 外部サーバー上のデータベースのコンテンツを含むダンプファイルのパス。 |
Cloud SQL レプリカを設定したら、ソース表現インスタンスを Cloud Storage バケットのファイルパスで更新する必要があります。
REST
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @JSON_PATH \ -X PATCH \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE
例
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @./source.json \ -X PATCH \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
プロパティ | 説明 |
---|---|
JSON_PATH | Cloud Storage バケットに保存されている JSON ファイルのパス。このファイルには、ソース表現インスタンスに関するデータが含まれています。 |
PROJECT_ID | Google Cloud のプロジェクトの ID。 |
SOURCE_REPRESENTATION_INSTANCE | ソース表現インスタンスの名前。 |
外部サーバーでレプリケーションを開始する
外部サーバーから複製できることを確認したら、レプリケーションを実行する準備は完了です。
最初のインポート プロセス中は、外部サーバーで DDL オペレーションを実行しないでください。インポートを行うと、インポート中に不整合が生じる可能性があります。インポート プロセスが完了すると、レプリカは外部サーバー上のバイナリログを使用して、外部サーバーの現在の状態に近くなります。
ターミナルを開いて、gcloud
を使用してログインし、curl
コマンドを入力して外部サーバーから複製します。
REST
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "syncMode": "SYNC_MODE", "skipVerification": "SKIP_VERIFICATION" }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync
例
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "syncMode": "online", "skipVerification": false }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
プロパティ | 説明 |
---|---|
SYNC_MODE | レプリケーションの設定後に、Cloud SQL レプリカと外部サーバーの同期が維持できることを確認します。 |
SKIP_VERIFICATION | データを同期する前に、組み込みの検証ステップをスキップするかどうか。レプリケーションの設定を確認している場合にのみ使用することをおすすめします。 |
PROJECT_ID | Google Cloud のプロジェクトの ID。 |
REPLICA_INSTANCE | Cloud SQL レプリカの ID。 |
ストレージをクリーンアップする
バケット内のファイルから複製した場合は、このファイルとバケットを削除できます。オブジェクトの削除とバケットの削除に関する Cloud Storage のドキュメントをご覧ください。
レプリケーションを続行する
外部サーバーからのレプリケーションを開始したら、レプリケーションをモニタリングし、移行を完了する必要があります。詳細については、レプリケーションのモニタリングをご覧ください。
トラブルシューティング
問題 | トラブルシューティング |
---|---|
Lost connection to MySQL server during query when dumping table . |
ソースが使用不能か、ダンプに含まれているパケットが大きすぎる可能性があります。 外部プライマリが接続できることを確認します。また、ソース インスタンスの net_read_timeout フラグと net_write_timeout フラグの値を変更して、エラーを防ぐこともできます。これらのフラグに使用可能な値の詳細については、データベース フラグを構成するをご覧ください。 マネージド インポート移行の |
最初のデータの移行は成功したが、データが複製されていない。 | 根本原因の一つとして、ソース データベースでレプリケーション フラグが定義されているため、データベースの一部またはすべての変更が複製されていない可能性があります。
プライマリ インスタンスで |
最初のデータ移行は成功したが、しばらくするとデータ レプリケーションが機能しなくなる。 | 次の方法をお試しください。
|
mysqld check failed: data disk is full . |
レプリカ インスタンスのデータディスクに空き容量がありません。 レプリカ インスタンスのディスクサイズを増やします。ディスクサイズを手動で増やすか、自動ストレージ増加を有効にします。 |
レプリケーション ログの確認
レプリケーションの設定を確認したときに、ログが生成されています。
これらのログは次の手順で確認できます。
Google Cloud コンソールでログビューアに移動します。
- [インスタンス] プルダウンから Cloud SQL レプリカを選択します。
replication-setup.log
ログファイルを選択します。
Cloud SQL レプリカが外部サーバーに接続できない場合は、次の点を確認してください。
- 外部サーバー上のすべてのファイアウォールが、Cloud SQL レプリカの送信 IP アドレスからの接続を受け入れるように構成されている。
- SSL / TLS 構成が正しく行われている。
- 正しいレプリケーション ユーザー、ホスト、パスワードを使用している。
次のステップ
- インスタンスの更新の詳細を確認する。
- レプリカの管理について学習する。
- インスタンスのモニタリングについて確認する。
- Cloud SQL レプリカを昇格し、レプリカをスタンドアロン インスタンスに昇格して、外部サーバーからのレプリケーションを停止する方法を学習する。