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

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

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

始める前に

用語

  • 外部サーバー。Cloud SQL の外部にあり、データのレプリケーション元となる MySQL サーバー。ソース データベース、外部データベース サーバーとも呼ばれます。

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

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

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

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

Google Cloud プロジェクトの設定

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

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

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

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

    API を有効にする

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

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

  6. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

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

    API を有効にする

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

    IAM ページに移動

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

    API を有効にする

Google Cloud SDK のインストール

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

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

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

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

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

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

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

  • Cloud SQL レプリカでプライベート IP を使用する場合は、Cloud SQL レプリカが ipConfiguration 設定privateNetwork フィールドとして使用する VPC ネットワークのプライベート サービス アクセスに割り当てられた内部 IP 範囲全体を許可するように、外部サーバーのファイアウォールを構成する必要があります。

    • Console で内部 IP 範囲を確認するには:
  • 外部サーバーに 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 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": "MYSQL_VERSION",
      "onPremisesConfiguration": {
        "hostPort": "SOURCE_HOST",
        "username": "USERNAME",
        "password": "PASSWORD",
        "dumpFilePath": "gs://BUCKET/DUMP_FILE",
        "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#@%*@"
  }
}
省略可能なフィールド
dumpFilePath Cloud SQL バケットに存在するダンプファイルを使用してレプリケーションを設定する場合にのみ指定します。
caCertificate 外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
clientCertificate 外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
clientKey 外部サーバーで SSL / TLS が使用されている場合にのみ指定します。
プロパティ 説明
SOURCE_NAME 作成するソース表現インスタンスの名前。
REGION ソース表現インスタンスを配置するリージョン
MYSQL_VERSION 外部サーバーで実行されている MySQL バージョン。MYSQL_5_5MYSQL_5_6MYSQL_5_7MYSQL_8_0 から選択します。
SOURCE HOST 外部サーバーの IPv4 アドレスとポート、または外部サーバーの DNS アドレス。DNS アドレスを使用する場合は、最大 60 文字を含めることができます。外部サーバーが Cloud SQL でホストされている場合、ポートは 3306 です。
USERNAME 外部サーバー上のレプリケーション ユーザー アカウント。
PASSWORD レプリケーション ユーザー アカウントのパスワード。
BUCKET ダンプファイルが含まれるバケットの名前。
DUMP_FILE 外部サーバーのデータが含まれるバケット内のファイル。
CLIENT_CA_CERT 外部サーバーの CA 証明書。
CLIENT_CERT 外部サーバー上のクライアント証明書。サーバー クライアント認証を使用する場合にのみ必要です。
CLIENT_KEY 外部サーバー上のクライアント証明書の秘密鍵ファイル。サーバー クライアント認証を使用する場合にのみ必要です。

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

この手順を行う前に、ソース リクエスト データが含まれる 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 ファイルのパス。

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"
             }
        },
        "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
        "region": "SOURCE_REGION",
        "databaseVersion": "MYSQL_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"
    }
省略可能なフィールド
ipConfiguration これは、Cloud SQL レプリカがプライベート ネットワーク上にある場合にのみ指定します。
プロパティ 説明
TIER レプリカ インスタンスをホストするマシンタイプ。どのマシンタイプを使用するかわからない場合は、db-custom-2-7680 から始めます。後で必要に応じてサイズとサポートされている他の値を変更できます。
DISK_SIZE Cloud SQL レプリカのストレージ サイズ(GB)。
PROJECT_ID Google Cloud のプロジェクトの ID。
NETWORK_NAME Cloud SQL レプリカで使用するプライベート ネットワークの名前。
SOURCE_REPRESENTATION_INSTANCE_NAME ソース表現インスタンスの名前。
SOURCE_REGION ソース表現インスタンスに割り当てられているリージョン。
MYSQL_VERSION Cloud SQL レプリカで使用する MySQL のバージョン。選択できる値は MYSQL_5_6MYSQL_5_7MYSQL_8_0 です。外部サーバーで実行されている MySQL と同じバージョンだけでなく、それよりも 1 つの大きいバージョンを使用することもできます。たとえば、外部サーバーで MySQL 5.5 を使用している場合は、Cloud SQL レプリカで MySQL 5.6 を使用できます。
REPLICA_NAME 作成する Cloud SQL レプリカの名前。

Cloud SQL レプリカの作成

この手順を行う前に、レプリカ リクエスト データが含まれる JSON ファイルを作成する必要があります。次に、Cloud Shell ターミナルを開き、次のコマンドを使用して Cloud SQL で 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 @./replica.json \
         -X POST \
プロパティ 説明
JSON_PATH Cloud SQL レプリカのリクエスト データが含まれる JSON ファイルのパス。
PROJECT_ID Google Cloud のプロジェクトの ID。これはソース インスタンスの ID と同じにする必要があります。

設定を確認する

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

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

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

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

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

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

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

レプリカの送信 IP アドレスを取得するには:

Console

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

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

  2. Cloud SQL レプリカのパブリック IP アドレスの横にある [詳細] ツールチップにカーソルを合わせて、送信 IP アドレスを取得します。この送信 IP アドレスは、Cloud Console でレプリカのメインリストに表示される IP アドレスではありません。

gcloud

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

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

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

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

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

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

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

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

Cloud SQL レプリカをシードするオプションを選択する

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

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

最適なオプションを選ぶ

Cloud SQL のユーザーフローの図

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

レプリケーションのステータスを確認する

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

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

レプリケーションの遅延が 0 に近づかない場合は、対応が必要です

移行を完了する

レプリカを昇格して高可用性とリードレプリカを追加する

このステップでは、本番環境用にインスタンスを準備します。

  1. レプリカをプライマリ インスタンスに昇格します。昇格したレプリカで GTID ログとバイナリログがオンになり、スケジュールされたバックアップが有効になります。
  2. リードレプリカをインスタンスに追加します
  3. インスタンスを高可用性向けに構成します

次のステップ