建立唯讀備用資源

這個頁面說明如何為 Cloud SQL 執行個體建立唯讀備用資源。

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

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

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

事前準備

如果您要為這個執行個體建立第一個備援機制,請確認該執行個體符合主要執行個體的規定。瞭解詳情

建立唯讀備用資源

請參閱下方建立唯讀副本的步驟。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 找出要建立複本的執行個體,然後開啟清單旁邊的 more actions 選單。
  3. 選取「建立讀取備用資源」

    如果您沒有看見該選項,即表示執行個體為備用資源;您無法為備用資源建立備用資源。

  4. 如果執行個體已啟用備份與二進位檔記錄,請繼續執行下一個步驟。否則請選取「自動備份」和「啟用二進位檔記錄」,然後按一下「繼續」,再按一下「儲存並重新啟動」來重新啟動執行個體。

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

  5. 在頁面上的「自訂執行個體」部分中,更新備用資源的設定。首先按一下「Show configuration options」,顯示設定群組。接著展開所需群組,查看並自訂設定。右側會顯示您選取的所有選項的摘要。您可以選擇是否自訂這些設定。在所有未進行自訂的情況下,系統都會指派預設值。

    如需各項設定的詳細資訊,請參閱「關於執行個體設定」頁面。

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

  6. 按一下「建立備用資源」

    如有必要,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 位址,且您想要允許其他 Google Cloud 服務 (例如 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
        

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

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

    備用資源執行個體的 binlog 保留期限會自動設為一天,而非主要執行個體的七天。

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
}

套用變更

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

準備 Cloud Shell

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

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

    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. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

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

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

    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. 確認已設定複製欄位

    如果 enabledpointInTimeEnabledfalse,請使用執行個體資源的 patch 方法來啟用這兩者。在要求中,指定您要變更的備份設定屬性。

    如要啟用備份功能,請將 enabled 設為 true,並將 startTime 設為 HH:MM 格式的時段。startTime 參數會以 24 小時制指定在 UTC±00 時區中,並指定 4 小時備份時間的開始。備份可於備份期間的任何時間開始。

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

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:包含執行個體的 Google Cloud 專案 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:您新增或選取的授權網路,用於建立私人連線。

    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
        }
      }
    }
    

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

    您應該會收到如下的 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. 確認已設定複製欄位

    如果 enabledbinaryLogEnabled 在主要例項上為 false,請使用執行個體資源的 patch 方法來啟用這兩者。在要求中,指定要變更的備份設定屬性。

    如要啟用備份功能,請將 enabled 設為 true,並將 startTime 設為 HH:MM 格式的時段。startTime 參數會以 24 小時制指定在 UTC±00 時區中,並指定 4 小時備份時間的開始。備份可於備份期間的任何時間開始。

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

    唯讀備用資源執行個體支援二進位記錄 (僅限 MySQL 5.7 以上版本)。使用複本的例項 ID (而非主要例項 ID),在具有相同 API 的複本上啟用二進位記錄功能。

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

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

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:包含執行個體的 Google Cloud 專案 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:您新增或選取的授權網路,用於建立私人連線。

    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
        }
        
      }
    }
    

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

    您應該會收到如下的 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

請將以下項目改為對應的值:

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

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

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

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

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • PROJECT_ID:包含執行個體的 Google Cloud 專案 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 ProxyCloud 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": "[email protected]",
  "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:包含執行個體的 Google Cloud 專案 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 ProxyCloud 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": "[email protected]",
  "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. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

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

建立串聯式備用資源

本節說明如何建立及管理層疊式複本。

如要進一步瞭解串聯式備用資源的運作方式,請參閱「串聯式備用資源」。

建立串聯式備用資源的步驟

主控台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

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

    Cloud SQL 會建立備用資源。您會回到父代複本的執行個體頁面。

  7. 針對每個要建立的新階層式複本,請按照步驟 4 到 6 操作。

gcloud

  1. 如果您使用的是 MySQL 5.7 以上版本,請為新備援主機啟用 binlog:
    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,請停用再重新啟用 Service Networking API。這個動作會建立繼續程序所需的服務帳戶。

磁碟已滿。 在建立備援執行個體時,主要執行個體的磁碟空間可能會用盡。 編輯主要執行個體,將其升級為較大的磁碟大小。
副本執行個體使用太多記憶體。 備份資源會使用暫存記憶體快取常見的讀取作業,因此可能會比主要執行個體使用更多記憶體。

重新啟動複本執行個體,以便回收暫時性記憶體空間。

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

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

複製延遲持續偏高。 寫入負載過高,複本無法處理。當備援機制上的 SQL 執行緒無法跟上 I/O 執行緒時,就會發生複製延遲。某些類型的查詢或工作負載,可能會導致特定結構定義的複製延遲時間暫時或永久性偏高。複製延遲的常見原因包括:
  • 複本上的查詢速度緩慢。找出並修正這些問題。
  • 所有資料表都必須有專屬/主索引鍵。在這種沒有唯一/主鍵的資料表上進行的每項更新,都會導致備援資料庫進行完整資料表掃描。
  • DELETE ... WHERE field < 50000000 這類查詢會導致以列為基礎的複製作業出現延遲,因為複本上會累積大量更新。

可能的解決方法包括:

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

為避免交易時間過長,可採用以下解決方案:

  • 將交易拆分為多筆小額交易
  • 將單一大型寫入查詢分割為較小的批次
  • 請嘗試將長時間執行的 SELECT 查詢與混合 DML 的交易分開
變更並行複製旗標會導致錯誤。 為一或多個標記設定了錯誤的值。

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

  1. 修改 binlog_transaction_dependency_trackingtransaction_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

備援機制建立作業因逾時而失敗。 主要執行個體上長時間執行未提交的交易,可能會導致建立唯讀備用資源失敗。

停止所有執行中的查詢後,重新建立複本。

後續步驟