建立唯讀備用資源

本頁面說明如何為 Cloud SQL 執行個體建立唯讀副本。

唯讀副本是主要執行個體的副本,在正常情況下,會近乎即時地反映主要執行個體的變更。您可以使用唯讀副本,從主要執行個體卸載讀取要求或數據分析流量。

此外,您也可以執行區域遷移,以便進行災難復原。如果副本是跨區域副本,您可以容錯移轉至其他區域,具體來說,就是將副本升級為獨立執行個體 (在這種情況下,現有副本不會將該執行個體視為主要執行個體)。

如要進一步瞭解複製功能的運作方式,請參閱「Cloud SQL 中的複製功能」。

事前準備

如果您要為這個執行個體建立第一個副本,請確認該執行個體符合主要執行個體的需求條件。瞭解詳情。

建立唯讀副本

建立唯讀副本的步驟如下。

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 找出要建立副本的執行個體,然後開啟清單旁的 more actions 選單。
  3. 選取「建立唯讀副本」。

    如果沒有看到這個選項,表示該執行個體是副本,您無法為副本建立副本。

  4. 如果執行個體已啟用備份和二進位記錄功能,請繼續執行下一個步驟。否則,請選取「Automate backups」(自動備份) 和「Enable binary logging」(啟用二進位記錄),然後依序點選「Continue」(繼續) 和「Save and restart」(儲存並重新啟動),重新啟動執行個體。

    啟用二進位記錄會導致執行個體重新啟動。

  5. 在頁面的「Customize your instance」(自訂執行個體) 部分,更新副本設定。首先,請按一下「Show configuration options」(顯示設定選項),顯示設定群組。接著,展開所需群組,查看及自訂設定。右側會顯示所選選項的摘要。您可以視需要自訂這些設定。在未進行任何自訂的情況下,系統會指派預設值。

    如要進一步瞭解各項設定,請參閱「關於執行個體設定」頁面。

    舉例來說,如要允許其他 Cloud de Confiance by S3NS 服務 (例如 BigQuery) 存取 Cloud SQL 中的資料,並透過內部連線對這些資料執行查詢,請展開「Connections」(連線) 群組,然後取消選取「Public IP」(公開 IP) 核取方塊。

  6. 按一下「Create replica」(建立副本)。

    Cloud SQL 會視需要建立備份,並建立副本。您會回到主要執行個體的頁面。

gcloud

  1. 查看主要執行個體的狀態:
    gcloud sql instances describe PRIMARY_INSTANCE_NAME
          

    如果 databaseReplicationEnabled 屬性為 true,則執行個體為副本,您無法建立副本的副本。

  2. 如果 backupConfiguration 下方的 enabled 屬性為 false,請立即啟用主要執行個體的備份功能:
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --backup-start-time=>HH:MM
          
    backup-start-time 參數是以 24 小時制指定,時區為 UTC±00,並指定 4 小時備份時間範圍的開始時間。備份作業可在備份期間隨時啟動。
  3. 如果 binaryLogEnabled 屬性為 false,請在主要執行個體上啟用二進位記錄:
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --enable-bin-log
    啟用二進位記錄會導致執行個體重新啟動。
  4. 建立副本:
    gcloud sql instances create REPLICA_NAME \
    --master-instance-name=PRIMARY_INSTANCE_NAME

    如有需要,您可以使用 --tier 參數指定不同的級別大小。如果您是從 MySQL 8.4 以上版本的主要執行個體建立副本,且執行個體的 Cloud SQL 版本為 Enterprise 或 Enterprise Plus,則不必指定這個參數的值。副本會沿用主要執行個體的機型。

    您可以使用 --region 參數指定其他區域。

    您可以為其他執行個體設定新增更多參數。詳情請參閱「gcloud sql instances create」。

    如果主要執行個體只有內部 IP 位址,而您想允許其他 Cloud de Confiance by S3NS 服務 (例如 BigQuery) 透過內部連線存取 Cloud SQL 中的資料,並對這些資料執行查詢,請在指令中加入 --enable-google-private-path 參數。

    您必須在主要執行個體所在的虛擬私有雲網路中建立副本。您也可以在該虛擬私有雲網路中指定 allocated-ip-range-name。如未指定範圍,系統會在隨機範圍內建立副本。

  • 唯讀副本執行個體支援二進位記錄 (僅限 MySQL 5.7 以上版本。不支援舊版高可用性容錯移轉副本)。使用相同的 gcloud CLI 指令,在副本上啟用二進位記錄功能,並使用副本的執行個體名稱,而非主要執行個體的名稱。
    gcloud sql instances patch REPLICA_INSTANCE_NAME \
    --enable-bin-log \
    --enforce-new-sql-network-architecture
        

    您可以使用 sync_binlog 旗標,設定副本 (而非主要) 執行個體的二進位記錄耐用性,控制 MySQL 伺服器將二進位記錄同步至磁碟的頻率。

    副本執行個體無法啟用備份功能,但即使停用備份功能,副本仍可啟用二進位記錄,這與主要執行個體不同。

    副本執行個體的二進位檔記錄保留期限會自動設為一天,主要執行個體則為七天。

  • 使用 enforce-new-network-architecture 旗標,強制在建立執行個體時使用新的網路架構,即使專案尚未完全升級也一樣。如要進一步瞭解新版網路架構及其影響,請參閱「將執行個體升級為新版網路架構」和「分配 IP 位址範圍」。

Terraform

如要建立唯讀副本,請使用 Terraform 資源。

resource "google_sql_database_instance" "read_replica" {
  name                 = "mysql-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "MYSQL_8_0"

  replica_configuration {
    failover_target = false
  }

  settings {
    tier              = "db-n1-standard-2"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 Cloud de Confiance 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell。
  2. 設定要套用 Terraform 設定的預設 Cloud de Confiance 專案。

    這項指令在每個專案中只需執行一次,且可在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為「根模組」)。

  1. 在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須有 .tf 副檔名,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在按照教學課程操作,可以複製每個章節或步驟中的程式碼範例。

    將程式碼範例複製到新建立的 main.tf。

    您也可以從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 請查看並修改範例參數,以便套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 查看設定,確認 Terraform 要建立或更新的資源符合預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Cloud de Confiance 專案即可查看結果。在 Cloud de Confiance 控制台的 UI 中前往資源,確認 Terraform 已建立或更新資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false。
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,套用更新後的 Terraform 設定:
    terraform apply
  1. 執行下列指令,並在提示中輸入 yes,移除先前使用 Terraform 設定套用的資源:

    terraform destroy

REST v1

  1. 取得目前的備份設定

    使用執行個體資源的 get 方法,傳回資料庫版本和主要執行個體的目前備份設定。

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • primary-instance-name:主要執行個體的名稱

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/primary-instance-name

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

  2. 確認已設定複製欄位

    如果 enabled 或 pointInTimeEnabled 為 false,請使用執行個體資源的 patch 方法,同時啟用這兩項功能。在要求中,指定要變更的備份設定屬性。

    如要啟用備份功能,請將 enabled 設為 true,並將 startTime 設為一天中的某個時間,格式為 HH:MM。startTime 參數是以 24 小時制指定,時區為 UTC±00,並指定 4 小時備份時間範圍的開始時間。備份作業可在備份時段內隨時開始。

    如要啟用時間點復原功能,請將 pointInTimeEnabled 設為 true。

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID: Cloud de Confiance 專案的 ID 或專案編號,該專案包含執行個體
    • INSTANCE_NAME:要設定高可用性的主要或唯讀副本執行個體名稱
    • START_TIME:時間 (小時和分鐘)

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 要求主體:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "START_TIME",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

  3. 建立唯讀副本

    使用執行個體資源的 insert 方法建立唯讀副本。databaseVersion 屬性必須與主要屬性相同。如果主要執行個體使用內部 IP 位址,您可以按照建立主要執行個體時的方式指定 allocatedIpRange。如未指定範圍,系統會在隨機範圍內建立副本。 如要建立跨區域唯讀副本,請指定主要執行個體所在區域以外的區域。

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • database-version:列舉版本字串 (例如 MYSQL_8_0)
    • primary-instance-name:主要執行個體的名稱
    • primary-instance-region:主要執行個體的區域
    • replica-region:副本執行個體的區域
    • replica-name:副本執行個體的名稱
    • machine-type:機器類型的列舉字串。例如:「db-custom-1-3840」
    • private-network:您要新增或選取來建立私人連線的授權網路。

    您可以使用 sqlNetworkArchitecture 欄位,強制執行個體在建立時使用新的網路架構,即使專案尚未完全升級也沒問題。如要進一步瞭解新版網路架構及其影響,請參閱「將執行個體升級至新版網路架構」和「分配 IP 位址範圍」。

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

    JSON 要求主體:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "databaseVersion": "database-version",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
        "ipConfiguration": {
        object (IpConfiguration)
      },
      {
      "ipv4Enabled": false,
      "privateNetwork": private-network,
      "requireSsl": boolean,
      "authorizedNetworks": [
        {
          object (AclEntry)
        }
      ],
      "allocatedIpRange": string
        }
      },
      "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

REST v1beta4

  1. 取得目前的備份設定

    使用執行個體資源的 get 方法,傳回主要執行個體的資料庫版本和目前的備份設定。

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • primary-instance-name:主要執行個體的名稱

    HTTP 方法和網址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/primary-instance-name

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

  2. 確認已設定複製欄位

    如果主要執行個體上的 enabled 或 binaryLogEnabled 為 false,請使用執行個體資源的 patch 方法,同時啟用這兩項功能。在要求中,指定要變更的備份設定屬性。

    如要啟用備份功能,請將 enabled 設為 true,並將 startTime 設為一天中的某個時間,格式為 HH:MM。startTime 參數是以 24 小時制指定,時區為 UTC±00,並指定 4 小時備份時間範圍的開始時間。備份作業可在備份時段內隨時開始。

    如要啟用時間點復原功能,請將主要執行個體的 binaryLogEnabled 設為 true。

    唯讀副本執行個體支援二進位記錄 (僅限 MySQL 5.7 以上版本)。使用相同的 API,在副本上啟用二進位記錄,並使用副本的執行個體 ID,而非主要執行個體的 ID。

    您可以使用 sync_binlog 旗標,設定副本 (而非主要) 執行個體的二進位記錄耐用性,控制 MySQL 伺服器將二進位記錄同步至磁碟的頻率。

    副本執行個體無法啟用備份功能,但即使停用備份功能,副本仍可啟用二進位記錄功能,這與主要執行個體不同。

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID: Cloud de Confiance 專案的 ID 或專案編號,該專案包含執行個體
    • INSTANCE_NAME:要設定高可用性的主要或唯讀副本執行個體名稱
    • START_TIME:時間 (小時和分鐘)

    HTTP 方法和網址:

    PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 要求主體:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "START_TIME",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

  3. 建立唯讀副本

    使用執行個體資源的 insert 方法建立唯讀副本。databaseVersion 屬性必須與主要屬性相同。如果主要執行個體使用內部 IP 位址,您可以按照建立主要執行個體時的方式指定 allocatedIpRange。如要建立跨區域唯讀副本,請指定主要執行個體所在區域以外的區域。

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • database-version:列舉版本字串 (例如 MYSQL_8_0)
    • primary-instance-name:主要執行個體的名稱
    • primary-instance-region:主要執行個體的區域
    • replica-region:副本執行個體的區域
    • replica-name:副本執行個體的名稱
    • machine-type:機器類型的列舉字串。例如:「db-custom-1-3840」
    • private-network:您要新增或選取來建立私人連線的授權網路。

    您可以使用 sqlNetworkArchitecture 欄位,強制執行個體在建立時使用新的網路架構,即使專案尚未完全升級也沒問題。如要進一步瞭解新版網路架構及其影響,請參閱「將執行個體升級至新版網路架構」和「分配 IP 位址範圍」。

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

    JSON 要求主體:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "databaseVersion": "database-version",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
        
        "ipConfiguration": {
        object (IpConfiguration)
      },
      {
      "ipv4Enabled": false,
      "privateNetwork": private-network,
      "requireSsl": boolean,
      "authorizedNetworks": [
        {
          object (AclEntry)
        }
      ],
      "allocatedIpRange": string
        }
        
      },
      "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

為已啟用 Private Service Connect 的執行個體建立唯讀副本

如要為已啟用 Private Service Connect 的執行個體建立唯讀副本,請使用 gcloud CLI 或 API。您可以在與主要執行個體相同的區域或不同區域 (跨區域唯讀副本) 建立這個副本。

唯讀副本無法從連線類型不同的執行個體複製。舉例來說,啟用 Private Service Connect 的執行個體只能從另一個 Private Service Connect 執行個體複製資料。此外,也無法從支援外部 IP 連線的執行個體,或設定私人服務存取權的執行個體複製資料。

gcloud

如要建立執行個體的唯讀副本,請使用 gcloud sql instances create 指令:

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip \
--tier=TIER \
--edition=EDITION

請依指示取代下列項目:

  • REPLICA_INSTANCE_NAME:副本執行個體的名稱。
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • PROJECT_ID:執行個體所在 Cloud de Confiance 專案的 ID 或專案編號。
  • REGION_NAME:副本執行個體的區域名稱。
  • ALLOWED_PROJECTS:允許的專案 ID 或編號清單,以半形逗號分隔。如果專案不在這份清單中,就無法用來建立執行個體,並為執行個體啟用 Private Service Connect。

    Cloud SQL 不會將主要執行個體的允許專案複製到副本。您必須為每個副本建立 Private Service Connect 端點。如果您使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器,請為副本建立 DNS 區域和 DNS 記錄。

  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這項參數指定下列其中一個值:
    • REGIONAL:啟用高可用性,建議用於正式版執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • TIER:副本執行個體的機器類型,例如 db-perf-optimized-N-4 或 db-custom-2-7680。如果主要執行個體是 Cloud SQL Enterprise Plus 版執行個體,且使用 PostgreSQL 15 以下版本、MySQL 8.0 以下版本或 SQL Server,則必須提供這項參數。如果是其他執行個體,這個參數為選用,副本會沿用主要執行個體的機器層級。
  • EDITION:副本執行個體的 Cloud SQL 版本 (ENTERPRISE 或 ENTERPRISE_PLUS)。如果主要執行個體是 Cloud SQL Enterprise Plus 版本執行個體,且使用 PostgreSQL 15 以下版本、MySQL 8.0 以下版本或 SQL Server,則必須提供這項參數。如果是其他執行個體,這個參數為選用,副本會沿用主要執行個體的版本。

REST v1

使用任何要求資料之前,請先修改下列項目的值:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • PROJECT_ID:執行個體所在 Cloud de Confiance 專案的 ID 或專案編號。
  • REPLICA_INSTANCE_NAME:副本執行個體的名稱。
  • REGION_NAME:副本執行個體的區域名稱。
  • MACHINE_TYPE:執行個體的機型。
  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這項參數指定下列其中一個值:
    • REGIONAL:啟用高可用性,建議用於正式版執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • ALLOWED_PROJECTS:允許的專案 ID 或編號清單,以半形逗號分隔。如果專案不在這份清單中,就無法用來建立執行個體,並為執行個體啟用 Private Service Connect。

    Cloud SQL 不會將主要執行個體的允許專案複製到副本。您必須為每個副本建立 Private Service Connect 端點。如果您使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器,則必須為副本建立 DNS 區域和 DNS 記錄。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

JSON 要求主體:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "MYSQL_8_0",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

使用任何要求資料之前,請先修改下列項目的值:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • PROJECT_ID:執行個體所在 Cloud de Confiance 專案的 ID 或專案編號。
  • REPLICA_INSTANCE_NAME:副本執行個體的名稱。
  • REGION_NAME:副本執行個體的區域名稱。
  • MACHINE_TYPE:執行個體的機型。
  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這項參數指定下列其中一個值:
    • REGIONAL:啟用高可用性,建議用於正式版執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • ALLOWED_PROJECTS:允許的專案 ID 或編號清單,以半形逗號分隔。如果專案不在這份清單中,就無法用來建立執行個體,並為執行個體啟用 Private Service Connect。

    Cloud SQL 不會將主要執行個體的允許專案複製到副本。您必須為每個副本建立 Private Service Connect 端點。如果您使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器,則必須為副本建立 DNS 區域和 DNS 記錄。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

JSON 要求主體:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "MYSQL_8_0",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

設定唯讀副本的 IAM 資料庫驗證機制

在主要執行個體上啟用 cloudsql_iam_authentication 旗標時,唯讀副本不會自動啟用該旗標。

如要為唯讀副本設定 IAM 資料庫驗證機制,請按照下列步驟操作:

  1. 前往 Cloud de Confiance 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 在「Configuration」(設定) 磁貼中,找出 cloudsql_iam_authentication 旗標。如果清單中沒有該旗標,就不需要在唯讀副本中啟用。如果旗標在清單中,您必須在唯讀副本上啟用旗標。如要在唯讀副本上啟用旗標,請繼續下一個步驟。
  4. 在 SQL 導覽選單中,選取「副本」。
  5. 按一下要編輯的副本名稱。
  6. 按一下 [編輯]。
  7. 在「Configuration options」(設定選項) 部分,展開「Flags」(旗標)。
  8. 選取「+ 新增」項目。
  9. 輸入 cloudsql_iam_authentication 做為旗標名稱。請確認這個旗標已選取「On」。
  10. 按一下「儲存」。

建立串聯式副本

本節說明如何建立及管理串接副本。

如要瞭解串聯式副本的運作方式,請參閱「串聯式副本」。

建立串聯式副本的步驟

控制台

  1. 前往 Cloud de Confiance 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 如果是 MySQL 5.7 以上版本,請啟用複製功能。
  3. 找出要建立的副本,然後按一下該副本上層副本的「副本」分頁標籤。
  4. 按一下「建立副本」。
  5. 在「Create read replica」(建立唯讀副本) 頁面中,更新執行個體 ID 和任何其他設定選項,包括名稱、區域和可用區。
  6. 點選「建立」。

    Cloud SQL 會建立副本。您會回到上層副本的執行個體頁面。

  7. 針對要建立的每個新串接副本,重複執行步驟 4 到 6。

gcloud

  1. 如果您使用的是 MySQL 5.7 以上版本,請為新副本的主要執行個體啟用二進位記錄:
    gcloud sql instances patch --enable-bin-log PARENT_REPLICA_NAME
    將 PARENT_REPLICA_NAME 替換為父項副本的名稱。
  2. 使用 --master-instance-name 旗標,將主要副本指定為主要執行個體,建立新的副本:
  3. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    更改下列內容:
    • REPLICA_NAME:您要建立的副本專屬 ID
    • PARENT_REPLICA_NAME:父項副本的名稱
  4. 建立串聯式副本後,您會發現對主要執行個體所做的變更,會複製到串聯式副本鏈中的所有副本。

curl

  1. 如果您使用的是 MySQL 5.7 以上版本,請啟用二進位記錄:

    如要啟用二進位記錄,請將下列 JSON 儲存至名為 request.JSON 的檔案,然後叫用 curl 指令來啟用二進位記錄。
    {
      "settings":
      {
        "backupConfiguration":
        {
          "enabled": false,
          "binaryLogEnabled": true
        }
      }
    }
  2. 如要在父項副本下建立副本,請編輯下列 JSON 程式碼範例,並儲存至名為 request.json 的檔案:
    {
      "masterInstanceName": "PARENT_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"

疑難排解

問題 疑難排解
唯讀副本建立後未開始複製。 記錄檔中可能會有更具體的錯誤。 在 Cloud Logging 中檢查記錄,找出實際錯誤。
無法建立唯讀副本 - invalidFlagValue 錯誤。 要求中的其中一個標記無效。這可能是您明確提供的旗標,也可能是設為預設值的旗標。

首先,請確認 max_connections 旗標的值大於或等於主要執行個體的值。

如果 max_connections 旗標設定正確,請檢查 Cloud Logging 中的記錄,找出實際錯誤。

無法建立唯讀副本,發生不明錯誤。 記錄檔中可能會有更具體的錯誤。 在 Cloud Logging 中檢查記錄,找出實際錯誤。

如果錯誤為 set Service Networking service account as servicenetworking.serviceAgent role on consumer project,請按照「建立服務代理並授予角色」中的操作說明,手動建立必要的服務帳戶。

磁碟已滿。 建立副本時,主要執行個體磁碟空間可能會用盡。編輯主要執行個體,升級至較大的磁碟。
副本執行個體耗用過多記憶體。 副本會使用暫存記憶體快取經常要求的讀取作業,因此可能比主要執行個體耗用更多記憶體。

重新啟動副本執行個體,回收暫存記憶體空間。

已停止複製。 已達儲存空間上限,且未啟用儲存空間自動增加功能。

編輯執行個體,啟用 automatic storage increase。

複製作業延遲時間持續偏高。 寫入負載過高,副本無法處理。如果副本上的 SQL 執行緒無法跟上 IO 執行緒,就會發生複製作業延遲。某些類型的查詢或工作負載可能會導致特定結構定義暫時或永久出現高複製延遲。複製延遲的常見原因包括:
  • 副本上的慢速查詢。找出並修正問題。
  • 所有資料表都必須有不重複/主鍵。如果這類資料表沒有不重複/主鍵,每次更新都會在副本上完整掃描資料表。
  • DELETE ... WHERE field < 50000000 這類查詢會導致資料列式複製作業發生複製延遲,因為副本上會累積大量更新。

可能的解決方案包括:

複製延遲時間突然飆升。 這是因為交易執行時間過長。當交易 (單一陳述式或多個陳述式) 在來源執行個體上提交時,交易的開始時間會記錄在二進位記錄中。副本收到這個二進位記錄檔事件時,會將該時間戳記與目前的時間戳記進行比較,藉此計算複製延遲時間。因此,來源上長時間執行的交易會導致副本上立即出現大量複製延遲。如果交易中的資料列變更數量很大,副本也需要很長時間才能執行。在此期間,複製延遲時間會增加。副本完成這項交易後,追趕期間會取決於來源的寫入工作負載和副本的處理速度。

如要避免交易時間過長,可以嘗試以下解決方案:

  • 將交易拆分為多筆小額交易
  • 將單一大型寫入查詢拆分為較小的批次
  • 嘗試將長時間執行的 SELECT 查詢,從混合 DML 的交易中分離出來
變更平行複製作業旗標會導致錯誤。 一或多個旗標的值設定不正確。

在顯示錯誤訊息的主要執行個體上,設定平行複製旗標:

  1. 修改 binlog_transaction_dependency_tracking 和 transaction_write_set_extraction 旗標:
    • binlog_transaction_dependency_tracking=COMMIT_ORDER
    • transaction_write_set_extraction=OFF
  2. 新增 slave_pending_jobs_size_max 旗標:

    slave_pending_jobs_size_max=33554432

  3. 修改 transaction_write_set_extraction 旗標:

    transaction_write_set_extraction=XXHASH64

  4. 修改 binlog_transaction_dependency_tracking 旗標:

    binlog_transaction_dependency_tracking=WRITESET

副本建立作業逾時失敗。 如果主要執行個體上有長時間執行的未提交交易,可能會導致唯讀副本建立失敗。

請先停止所有執行中的查詢,再重新建立副本。

後續步驟