レプリケーション用に Cloud SQL と外部サーバーを構成する

このページでは、Cloud SQL へのレプリケーション用に外部サーバーを構成する方法、Cloud SQL にソース表現インスタンスを作成する方法、データを Cloud SQL にレプリケートする方法について説明します。レプリケーションの手順に進む前に、このページで説明する手順をすべて完了する必要があります。

このページで説明する手順の代わりに、Database Migration Service を使用することもできます。このサービスを使用して、外部サーバーから Cloud SQL に継続的なレプリケーションを行うことも、1 回のデータベースの移行を行うこともできます。

始める前に

用語

  • 外部サーバー。Cloud SQL の外部にあり、データのレプリケーション元となる MySQL サーバー。ソース データベース、外部データベース サーバーとも呼ばれます。別の Cloud SQL インスタンスの場合も、オンプレミス、Amazon リレーショナル データベース サービス(RDS)などの他のデータベース サーバーの場合もあります。

  • ソース表現インスタンス。Cloud SQL レプリカに対する外部サーバーを表す Cloud SQL インスタンスのモック。これは Google Cloud コンソールに表示されます。通常の Cloud SQL インスタンスのように見えますが、データは含まれていません。構成やメンテナンスは必要ありません。また、課金にも影響しません。

  • Cloud SQL レプリカ。外部サーバーから複製する Cloud SQL インスタンス。外部プライマリ リードレプリカともいいます。

  • レプリケーション ユーザー アカウント。外部サーバーと Cloud SQL レプリカ間のレプリケーションを実行できる十分な権限がある、外部サーバー上の MySQL ユーザー アカウント。

  • マネージド インポート。外部サーバーから Cloud SQL レプリカにデータを直接インポートするプロセス。この場合、Cloud SQL はレプリケーション ユーザー アカウントを使用して外部サーバーに接続し、外部サーバーで直接データダンプを実行して Cloud SQL レプリカにデータをインポートします。

Google Cloud プロジェクトの設定

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Cloud SQL Admin API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Cloud SQL Admin API を有効にします。

    API を有効にする

  8. ユーザー アカウントに Cloud SQL 管理者、ストレージ管理者、Compute 閲覧者のロールがあることを確認します。

    IAM ページに移動

Google Cloud SDK のインストール

レプリケーションを構成するには、外部サーバーの Google Cloud SDK をインストールします。SDK を別の場所にすでにインストールしていない限り、外部サーバーに SDK をインストールすることをおすすめします。

レプリケーション用の外部サーバーを設定する

外部サーバーのチェックリスト

  • 外部サーバーに MySQL 5.5、5.6、5.7 または 8.0 がインストールされていることを確認します。MySQL Community Edition、Cloud SQL for MySQL、Amazon Aurora、Amazon RDS 上の MySQL がサポートされています。

    • 外部サーバーで動作している MySQL のバージョンと同じかそれ以上のメジャー バージョンの MySQL を、Cloud SQL レプリカで使用する必要があります。
    • 外部サーバーに MySQL 5.5 がインストールされている場合、GTID はサポートされません。
  • バイナリログが有効になっていることと、次のことを確認します。

  • 外部サーバーで GTID が有効になっているかどうか確認します。これにより、レプリケーションの設定に必要な手順が変わります。

  • 外部サーバーにグローバル読み取りロック権限があるかどうか確認します。これにより、レプリケーションの設定に必要な手順が変わります。

  • 送信プライベート IP アドレスが静的でないために Cloud SQL レプリカがプライベート IP アドレスで有効になっている場合は、Cloud SQL レプリカがプライベート ネットワークとして使用する VPC ネットワークのプライベート サービス アクセスに割り当てられた内部 IP 範囲を許可するように外部サーバーのファイアウォールを構成します。

    ソース データベース サーバーのファイアウォールは、Cloud SQL の宛先インスタンスが ipConfiguration 設定privateNetwork フィールドとして使用する VPC ネットワークのプライベート サービス接続に割り当てられた内部 IP 範囲全体を許可するように構成する必要があります。

    内部 IP 範囲を確認するには:

    1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

      [VPC ネットワーク] ページに移動

    2. 使用する VPC ネットワークを選択します。

    3. [プライベートサービス接続] タブをクリックします。

  • 外部サーバーに DEFINER 句(ビュー、イベント、トリガー、ストアド プロシージャ)が含まれている場合、これらのステートメントの実行順序によってはレプリケーションが失敗することがあります。Cloud SQL での DEFINER の使用方法と考えられる回避策の詳細をご確認ください。

  • InnoDB は、Cloud SQL でサポートされている唯一のストレージ エンジンです。MyISAM を使用して移行すると、データに不整合が生じる可能性があり、データの検証が必要になることがあります。詳細については、MySQL ドキュメントで MyISAM から InnoDB へのテーブルの変換をご覧ください。

バイナリログの保持期間の構成

バイナリログが少なくとも 24 時間保持するように外部サーバーを構成する必要があります。

MySQL コミュニティ

外部サーバーで MySQL Community Edition を使用している場合は、以下の MySQL コマンドを使用してバイナリログの保持設定を更新できます。

Cloud SQL for MySQL

外部サーバーで Cloud SQL for MySQL を使用している場合、デフォルトでは、バイナリログは 7 日間保持されています。この設定は変更できます。

Amazon RDS と Aurora

外部サーバーが Amazon RDS インスタンスの場合、次のコマンドを使用して、バイナリログ保持の設定を更新できます。

call mysql.rds_set_configuration('binlog retention ', HOURS);
プロパティ 説明
HOURS Amazon RDS インスタンスが保持するバイナリログの合計時間数。

詳細については、mysql.rds_set_configuration をご覧ください。

レプリケーション ユーザー アカウントの作成

外部サーバーに、Cloud SQL レプリカへのレプリケーションを管理する専用の MySQL ユーザー アカウントが存在する必要があります。このユーザー アカウントは、レプリケーションの管理にのみ使用します。使用する移行方法によっては、後でユーザーに権限を付与する必要があります。

レプリケーション ユーザー アカウントを追加するには、外部サーバーでターミナルを開き、次の MySQL コマンドを入力します。

MySQL

      CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
      GRANT SELECT, SHOW VIEW ON *.* TO 'USERNAME'@'HOST';
      FLUSH PRIVILEGES;

CREATE USER 'replicationUser'@'%' IDENTIFIED BY '8*&fwwd';
GRANT SELECT, SHOW VIEW ON *.* TO 'replicationUser'@'%';
FLUSH PRIVILEGES;
プロパティ 説明
USERNAME 外部サーバー上のレプリケーション ユーザー アカウント。
PASSWORD レプリケーション ユーザー アカウントのパスワード。
HOST 任意のホストからのすべての接続を受け入れるには、これを % に設定します。この後のステップで、Cloud SQL レプリカからの接続のみを受け入れるように変更されます。

ソース表現インスタンスの設定

ソース表現インスタンスは外部サーバーを参照します。ここには、外部サーバーからのリクエスト データのみが含まれます。リクエスト データを作成して curl コマンドで使用し、Cloud SQL にソース表現インスタンスを作成します。

リクエスト データの作成

リクエスト データには、外部サーバーに関する基本情報が JSON 形式で含まれています。リクエスト データは、パブリック ネットワークまたはプライベート ネットワーク上の Cloud SQL レプリカ用に構成でき、この情報が含まれている必要があります。

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "hostPort": "SOURCE_HOST",
        "username": "USERNAME",
        "password": "PASSWORD",
        "caCertificate": "SOURCE_CERT",
        "clientCertificate": "CLIENT_CERT",
        "clientKey": "CLIENT_KEY"
      }
    }

マネージド インポートの例

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}

ダンプファイルの例

// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TSL

{
  "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",
    "caCertificate": "content of your certificate",
    "clientCertificate": "content of your certificate",
    "clientKey": "content of your client key"
  }
}

カスタム インポートの例

// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}
プロパティ 説明
SOURCE_NAME 作成するソース表現インスタンスの名前。
REGION ソース表現インスタンスを配置するリージョン
DATABASE_VERSION 外部サーバーで実行されているデータベースのバージョン。オプションは MYSQL_5_6MYSQL_5_7MYSQL_8_0 です。。
SOURCE HOST 外部サーバーの IPv4 アドレスとポート、または外部サーバーの DNS アドレス。DNS アドレスを使用する場合は、最大 60 文字を含めることができます。外部サーバーが Cloud SQL でホストされている場合、ポートは 3306 です。
USERNAME 外部サーバー上のレプリケーション ユーザー アカウント。
PASSWORD レプリケーション ユーザー アカウントのパスワード。
BUCKET ダンプファイルが含まれるバケットの名前。Cloud Storage バケットに存在するダンプファイルを使用してレプリケーションを設定する場合にのみ指定します。
DUMP_FILE 外部サーバーのデータが含まれるバケット内のファイル。
CLIENT_CA_CERT 外部サーバーの CA 証明書。外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
CLIENT_CERT 外部サーバー上のクライアント証明書。サーバー クライアント認証を使用する場合にのみ必要です。外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
CLIENT_KEY 外部サーバー上のクライアント証明書の秘密鍵ファイル。サーバー クライアント認証を使用する場合にのみ必要です。外部サーバーで SSL / TLS が使用されている場合にのみ指定します。

ソース表現インスタンスの作成

この手順を始める前に、ソース リクエスト データを含む JSON ファイルを作成します。

次に、Cloud SQL でソース表現インスタンスを作成するために、ターミナルを開いて次のコマンドを実行します。

curl

    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 POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
プロパティ 説明
PROJECT_ID Google Cloud のプロジェクトの ID。
JSON_PATH 外部サーバーのリクエスト データを含む JSON ファイルのパス。

ソース表現インスタンスの更新

外部サーバーからリクエスト データを更新する場合は、変更した値を使用するように既存のソース表現インスタンスを更新します。

リクエスト データの変更

リクエスト データを更新して、変更されたフィールドを含めます。これには、hostPortusernamepasswordcaCertificateclientCertificateclientKey の各フィールドが含まれます。リクエスト データを更新した後は、そのデータを curl コマンドで使用して、Cloud SQL のインスタンスを更新します。

次の例では、username フィールドと password フィールドを異なるユーザー名とパスワードで更新しています。

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "username": "NEW_USERNAME",
        "password": "NEW_PASSWORD"
      }
    }

マネージド インポートの例

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}

ダンプファイルの例

// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "username": "newReplicationUser",
    "password": "486#@%*@"
  }
}

カスタム インポートの例

// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "username": "newReplicationUser",
    "password": "486#@%*@"
  }
}
プロパティ 説明
SOURCE_NAME ソース表現インスタンスの名前。
REGION ソース表現インスタンスが存在するリージョン
DATABASE_VERSION 外部サーバーで実行されているデータベースのバージョン。オプションは MYSQL_5_6MYSQL_5_7MYSQL_8_0 です。.
NEW_USERNAME 外部サーバー上の新しいレプリケーション ユーザー アカウント。
NEW_PASSWORD 新しいアカウントのパスワード。

ソース表現インスタンスの変更

この手順を始める前に、変更されたリクエスト データを含む JSON ファイルを作成します。

次に、Cloud SQL でソース表現インスタンスを変更するために、ターミナルを開いて次のコマンドを実行します。

curl

    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_NAME

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
プロパティ 説明
PROJECT_ID Google Cloud のプロジェクトの ID。
JSON_PATH 外部サーバーのリクエスト データを含む JSON ファイルのパス。
SOURCE_NAME ソース表現インスタンスの名前。

Cloud SQL レプリカの設定

Cloud SQL レプリカには、最終的に外部サーバーからのデータが含まれます。このステップでは、リクエスト データを作成し、そのデータを curl コマンドで使用して、Cloud SQL に Cloud SQL レプリカを作成します。

リクエスト データの作成

リクエスト データには、外部サーバーと Cloud SQL レプリカに関する基本情報が JSON 形式で含まれています。リクエスト データは、パブリック ネットワークまたはプライベート ネットワーク上の Cloud SQL レプリカ用に構成でき、この情報が含まれている必要があります。

replica.json

    {
        "settings": {
            "tier": "TIER",
            "dataDiskSizeGb": "DISK_SIZE",
            "ipConfiguration": {
                "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME"
             },
             "availabilityType": "AVAILABILITY_TYPE"
        },
        "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
        "region": "SOURCE_REGION",
        "databaseVersion": "DATABASE_VERSION",
        "name": "REPLICA_NAME"
    }

    {
        "settings": {
            "tier": "db-custom-4-15360",
            "dataDiskSizeGb": "100"
        },
        "masterInstanceName": "source-instance",
        "region": "us-central1",
        "databaseVersion": "MYSQL_5_7",
        "name": "replica-instance"
    }
プロパティ 説明
TIER レプリカ インスタンスをホストするマシンタイプ。どのマシンタイプを使用するかわからない場合は、db-custom-2-7680 から始めます。後で必要に応じてサイズとサポートされている他の値を変更できます。
DISK_SIZE Cloud SQL レプリカのストレージ サイズ(GB)。
PROJECT_ID Google Cloud のプロジェクトの ID。ipConfiguration は、Cloud SQL レプリカがプライベート ネットワーク上にある場合にのみ指定します。
NETWORK_NAME Cloud SQL レプリカで使用するプライベート ネットワークの名前。
AVAILABILITY_TYPE Cloud SQL レプリカの可用性タイプ。デフォルトでは、値は ZONAL です。レプリカを HA にするには、値を REGIONAL に設定します。使用可能な値については、SqlAvailabilityType をご覧ください。
外部サーバーの HA レプリカを作成した後で、それを非 HA レプリカに変更することはできません。その逆も同様です。外部サーバーの非 HA レプリカを HA レプリカに変更することはできません。
インスタンスが最初のデータをまだ読み込んでいるときに手動フェイルオーバーを行うと、回復不能な移行が発生する可能性があります。また、インスタンスが移行元からのレプリケートを開始している場合に手動フェイルオーバーを行うと、一時的なダウンタイムが発生する可能性があります。レプリケーションのステータスを確認します。
SOURCE_REPRESENTATION_INSTANCE_NAME ソース表現インスタンスの名前。
SOURCE_REGION ソース表現インスタンスに割り当てられているリージョン。
DATABASE_VERSION Cloud SQL レプリカで使用するデータベースのバージョン。選択肢は、MYSQL_5_6MYSQL_5_7、または MYSQL_8_0 です。外部サーバーで実行されているデータベースと同じバージョンだけでなく、それよりも 1 つ大きいバージョンを使用することもできます。
REPLICA_NAME 作成する Cloud SQL レプリカの名前。

Cloud SQL レプリカの作成

この手順を始める前に、レプリカ リクエスト データを含む JSON ファイルを作成します。次に、Cloud SQL レプリカを作成するため、Cloud Shell ターミナルを開いて次のコマンドを実行します。

curl

    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 POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./replica.json \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
プロパティ 説明
PROJECT_ID Google Cloud のプロジェクトの ID。これはソース インスタンスの ID と同じにする必要があります。
JSON_PATH Cloud SQL レプリカのリクエスト データが含まれる JSON ファイルのパス。

設定を確認する

インスタンスが正しく設定されていることを確認するには、Cloud SQL インスタンス ページに移動します。

次のようなリストでソース表現インスタンスと Cloud SQL レプリカが表示されます。

インスタンス ID タイプ パブリック IP
(-) source-representation-instance データベース外部プライマリ 10.68.48.3:3306
replica-instance データベースのリードレプリカ 34.66.48.59

また、Cloud SQL レプリカに対する cloudsql.instances.migrate 権限を持っていることも確認します。この権限は、cloudsql.admin または cloudsql.editorIAM ロールに含まれています。

Cloud SQL レプリカへのユーザーの追加

外部サーバーからデータベース ユーザー アカウントをインポートすることはできませんが、このアカウントを Cloud SQL レプリカに作成することはできます。外部サーバーから複製する前に、このアカウントを作成してください。

Cloud SQL レプリカの送信 IP アドレスの取得

Cloud SQL レプリカの送信 IP アドレスを使用して、外部サーバーと Cloud SQL レプリカ間にセキュアな接続を作成できます。この IP アドレスに対しては課金されません。

コンソール

レプリカの送信 IP アドレスを取得するには、次の手順を行います。

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. Cloud SQL レプリカのパブリック IP アドレスの横にある [詳細] ツールチップにカーソルを合わせて、送信 IP アドレスを取得します。

    この送信 IP アドレスは、Google Cloud コンソールでレプリカのメインリストに表示される IP アドレスではありません。

gcloud

レプリカの送信 IP アドレスを取得するには、次のコマンドを実行します。

gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
プロパティ 説明
REPLICA_NAME 取得したい送信パブリック IP アドレスを持つ Cloud SQL レプリカの名前。

外部サーバーで受信接続を許可する

レプリケーションを成功させるには、Cloud SQL レプリカが外部サーバーに接続する必要があります。次の条件に当てはまる場合、Cloud SQL レプリカの送信 IP アドレスからの接続を受け入れるように外部サーバーのネットワーク ファイアウォールを構成する必要があります。

  • 外部サーバーがファイアウォールの背後にあるか、その他のネットワーク制限で保護されている。
  • Cloud SQL レプリカでパブリック IP を使用している。

Cloud SQL レプリカに接続するには、レプリカのプライマリ IP アドレスを使用します。この IP アドレスは、Google Cloud コンソールに表示されます。

Cloud SQL レプリカへのレプリケーションを許可するためにソース表現インスタンスを更新する

Cloud SQL レプリカのソース表現インスタンスを設定したら、ソース表現インスタンスの更新が必要になることがあります。たとえば、次のようなシナリオでは構成の更新が必要です。

  • 外部サーバーのホスト、ポート、または IP を変更する。
  • 別の MySQL レプリケーション ユーザーを使用する。
  • MySQL レプリケーション ユーザーのパスワードを変更する。
  • 外部サーバーとのセキュア接続に使用する SSL 証明書を変更する。

Cloud SQL レプリカをシードする

外部サーバーから Cloud SQL レプリカへのデータの初期読み込みを実施するには、次の 3 つの方法があります。

  • マネージド インポートは、外部サーバーからデータを抽出し、Cloud SQL インスタンスに直接インポートするサービスを使用します。Cloud SQL では、このオプションをおすすめします。外部サーバーがグローバル トランザクション識別子(GTID)レプリケーションを使用していない場合は、このオプションを使用する必要があります。詳細については、マネージド インポートを使用して外部データベースからのレプリケーションを設定するをご覧ください。
  • ダンプファイルを使用するには、外部サーバーのダンプファイルを作成し、それを Cloud Storage バケットに移動して、Cloud SQL にインポートする必要があります。このオプションは、外部サーバーが GTID レプリケーションを使用する場合にのみ使用できます。詳細については、ダンプファイルを使用して外部データベースからのレプリケーションを設定するをご覧ください。
  • カスタム インポートの場合は、Cloud SQL プライマリ インスタンスを作成して、任意のツールを使用してカスタムデータ インポートを実施し、それを Cloud SQL レプリカに降格してから、外部サーバー レプリケーションを設定する必要があります。マルチ TB のデータベース移行には、この方法が最適ですが、GTID レプリケーションを使用する必要があります。詳細については、カスタム インポートを使用して大規模な外部データベースからのレプリケーションを設定するをご覧ください。

最適なオプション

Cloud SQL ユーザーフロー図

レプリケーションをモニタリングする

Cloud SQL レプリカは、最初のデータ読み込みを完了すると、外部サーバーに接続し、エクスポート オペレーションの後に行われたすべての更新を適用します。レプリケーションのステータスを確認します

スタンドアロン インスタンスにレプリカを昇格する前に、レプリケーションのステータスを確認することが重要です。レプリケーション プロセスが正常に完了しなかった場合、昇格されたレプリカには、外部サーバーからの変更がすべて含まれるわけではありません。

レプリケーションの遅延が 0 に近づかない場合は、対応が必要です/postgresql/external_sync/initial_sync_completepostgresql/external_sync/max_replica_byte_lagdatabase/replication/state の各指標の確認が必要になることがあります。Cloud SQL 指標の一覧を表示します。

Cloud SQL レプリカが外部サーバーと同等になり、Cloud SQL レプリカにレプリケーションの遅延がなければ、データベースに接続します。適切なデータベース コマンドを実行し、外部サーバーと比較してコンテンツが想定どおりであることを確認します。必要な検証が完了するまで、外部サーバーを維持します。

カスケード レプリカを設定する

移行後は、Cloud SQL レプリカをプロモートする前に、Cloud SQL レプリカの下にカスケード リードレプリカを作成できます。

Cloud SQL インスタンスのカスケード レプリカは、GTID レプリケーションを使用している場合にのみ作成できます。

カスケード レプリカを作成するには、次のコマンドを実行します。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. MySQL 5.7 以降の場合は、レプリケーションを有効にします
  3. 作成するレプリカの親として機能するレプリカ用の [レプリカ] タブをクリックします。
  4. [レプリカを作成する] をクリックします。
  5. [リードレプリカを作成する] ページで、インスタンス ID とその他の構成オプション(名前、リージョン、ゾーンなど)を更新します。
  6. [CREATE] をクリックします。

    Cloud SQL がレプリカを作成します。親レプリカのインスタンス ページに戻ります。

  7. 作成する新しいカスケード レプリカごとに手順 4~6 を行います。

gcloud

  1. MySQL バージョン 5.7 以降を使用している場合は、新しいレプリカのプライマリでバイナリログを有効にします。
    gcloud sql instances patch --enable-bin-log
          --project=cascade-replica PARENT_REPLICA_NAME
    
    PARENT_REPLICA_NAME は、親レプリカの名前に置き換えます。
  2. --master-instance-name フラグを使用して Cloud SQL レプリカをプライマリ インスタンスとして指定し、新しいレプリカを作成します。

    gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    
    以下を置き換えます。
    • REPLICA_NAME: 作成するレプリカの一意の ID
    • PARENT_REPLICA_NAME: Cloud SQL レプリカの名前
  3. レプリカが作成されると、プライマリ インスタンスに対して行われた変更がカスケード レプリカ チェーン内のすべてのレプリカで複製されることがわかります。

curl

  1. MySQL バージョン 5.7 以降を使用している場合は、バイナリ ロギングを有効にします。

    バイナリ ロギングを有効にするには、request.JSON という名前のファイルに次の JSON を保存してから、curl コマンドを呼び出して、バイナリ ロギングを有効にします。
    {
      "settings":
      {
        "backupConfiguration":
        {
          "enabled": false,
          "binaryLogEnabled": true
        }
      }
    }
    

  2. 親レプリカの下にレプリカを作成するには、次の JSON コードサンプルを編集し、request.json というファイルに保存します。

    {
      "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
    
  3. 次のコマンドを実行します。
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
    

レプリカを昇格させる

次の手順でレプリカを昇格させます。

  1. レプリカをプライマリ インスタンスに昇格させます。昇格したレプリカで GTID ログとバイナリログがオンになり、スケジュールされたバックアップが有効になります。
  2. リードレプリカをインスタンスに追加します
  3. 省略可: 高可用性(HA)を確保するためにインスタンスを構成します。今後のダウンタイムを防ぐには、AVAILABILITY_TYPEREGIONAL に設定してレプリカの設定中に HA を有効にします。

次のステップ