建立唯讀備用資源

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

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

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

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

事前準備

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

建立唯讀備用資源

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

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

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

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

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

  5. 在頁面的「Customize your instance」(自訂執行個體) 區段中,更新備用資源的設定。首先,請按一下「顯示設定選項」 ,顯示設定群組。然後展開所需群組,即可查看及自訂設定。右側會顯示所有選取選項的摘要。您可以選擇是否自訂這些設定。如果沒有進行任何自訂作業,系統一律會指派預設值。

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

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

  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 位址,且您想允許 BigQuery 等其他服務存取 Cloud SQL 中的資料,並透過內部連線查詢這項資料,請在指令中加入 --enable-google-private-path 參數。 Google Cloud

    您必須在與主要執行個體相同的虛擬私有雲網路中建立副本。您也可以在該虛擬私有雲網路中指定 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. 執行下列指令,並在提示中輸入 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. 確認已設定複製欄位

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

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

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

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • 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. 確認已設定複製欄位

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

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

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

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

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

    備用執行個體無法啟用備份功能,但即使停用備份功能,備用執行個體仍可啟用二進位檔記錄功能 (主要執行個體則無法)。

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

    • PROJECT_ID:包含執行個體的專案 ID 或專案編號 Google Cloud
    • 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:包含執行個體的專案 ID 或專案編號。 Google Cloud
  • 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:包含執行個體的專案 ID 或專案編號。 Google Cloud
  • 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": "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:包含執行個體的專案 ID 或專案編號。 Google Cloud
  • 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": "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. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

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

建立串聯式備用資源

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

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

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

主控台

  1. 前往 Google Cloud 控制台的「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,請停用並重新啟用 Service Networking API。這項動作會建立必要的服務帳戶,以便繼續進行程序。

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

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

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

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

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

可能的解決方法包括:

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

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

  • 將交易拆分成多筆小額交易
  • 將單一大型寫入查詢分成較小的批次
  • 嘗試將包含 DML 的交易中冗長的 SELECT 查詢分開
變更平行複製旗標會導致錯誤。 一或多個標記的值不正確。

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

  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

建立副本時發生逾時錯誤。 主要執行個體上未提交的長期交易可能會導致唯讀備用資源建立失敗。

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

後續步驟