建立唯讀備用資源

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

如要設定 Cloud SQL 執行個體做為外部訂閱者的發布者,請參閱「設定外部備用資源」。

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

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

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

事前準備

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

建立唯讀備用資源

建立唯讀副本時,請注意下列事項:

  • 每個主要執行個體最多可建立 8 個唯讀備用資源。
  • 如未指定版本,則預設為 Cloud SQL Enterprise 版。
  • 建立唯讀副本或連鎖副本時,如果主要副本是 Cloud SQL Enterprise Plus 版本執行個體,則必須指出要使用的版本和層級。

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

主控台

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

    前往 Cloud SQL 執行個體

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

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

  4. 在「自訂執行個體」部分,更新副本的設定。首先,請按一下「顯示設定選項」 ,顯示設定群組。然後展開所需群組,即可查看及自訂設定。右側會顯示所有選取選項的摘要。您可以選擇是否自訂這些設定。如果沒有進行任何自訂作業,系統一律會指派預設值。

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

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

    如有必要,Cloud SQL 會建立備份並建立備用資源。 您會回到主要執行個體的執行個體頁面。

gcloud

建立備用資源:

gcloud sql instances create REPLICA_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME
  

如有需要,您可以使用 --tier 參數指定其他層級大小。

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

如果主要執行個體只有內部 IP 位址,請將 --no-assign-ip 參數新增至指令。

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

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

Terraform

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

resource "google_sql_database_instance" "read_replica" {
  name                 = "sqlserver-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "SQLSERVER_2019_ENTERPRISE"
  root_password        = "INSERT-PASSWORD-HERE"
  replica_configuration {
    failover_target = false
  }

  settings {
    tier              = "db-custom-2-7680"
    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
}

REST v1beta4

使用執行個體資源的 insert 方法來建立唯讀備用資源。region 和 databaseVersion 屬性必須與主要執行個體的這兩個屬性相同。

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

  • project-id:專案 ID
  • database-version:列舉版本字串 (例如 SQLSERVER_2017_ENTERPRISE)
  • primary-instance-name:主要執行個體的名稱
  • primary-instance-region:主要執行個體的區域
  • replica-region:備用資源執行個體的區域
  • replica-name:副本執行個體的名稱
  • machine-type:機器類型的列舉字串。例如「db-custom-1-3840」

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

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

您應該會收到如下的 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": "SQLSERVER_2019_STANDARD",
  "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": "SQLSERVER_2019_STANDARD",
  "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"
}

建立串聯式備用資源

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

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

事前準備

主要執行個體必須有可連鎖的副本。下節將說明如何建立可連鎖的副本。

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

建立可串聯的副本時,必須在與主要執行個體不同的區域中建立副本。如要設定可連鎖的副本,請設定 cascadable-replica 標記。

gcloud

使用 --master-instance-name 旗標指定主要執行個體,並使用 --cascadable-replica 旗標,建立新的副本:

gcloud sql instances create REPLICA_NAME \
   --master-instance-name=PRIMARY_INSTANCE_NAME \
   --cascadable-replica \
   --region=REGION

更改下列內容:

  • REPLICA_NAME:您要建立的副本專屬 ID。
  • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
  • REGION:要建立新副本的區域。這個區域必須與主要執行個體的區域不同。

您必須在與主要執行個體相同的 VPC 網路中建立副本。您也可以在該 VPC 網路中指定分配的 IP 範圍名稱 。如未指定範圍,系統會在隨機範圍內建立副本。

您可以新增其他參數,設定其他執行個體。例如:

  • 您可以使用 --tier 參數指定其他機器層級大小。
  • 如果主要執行個體只有私人 IP 位址,請在指令中加入 --no-assign-ip 參數。

如要進一步瞭解如何為執行個體設定新增參數,請參閱 gcloud sql instances create

建立可串聯的備用資源後,即可建立串聯式備用資源。

curl

  1. 如要在主要執行個體下建立可連鎖複製的副本,請編輯下列 JSON 程式碼範例,並儲存至名為 request.json 的檔案。

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

    • PROJECT_ID:專案 ID。
    • DATABASE_VERSION:資料庫版本的列舉字串。例如:SQLSERVER_2017_ENTERPRISE.
    • PRIMARY_INSTANCE_NAME:主要執行個體的名稱。
    • PRIMARY_INSTANCE_REGION:主要執行個體的區域。
    • REPLICA_REGION:備用資源執行個體的區域。
    • REPLICA_NAME:副本執行個體的名稱。
    • MACHINE_TYPE:機器類型的列舉字串。例如:db-custom-2-3840
    {
      "masterInstanceName": "PRIMARY_INSTANCE_NAME",
      "project": "PROJECT_ID",
      "databaseVersion": "DATABASE_VERSION"
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
          "settingsVersion": 0,
        }
        "replicaConfiguration":
        {
         "cascadableReplica": true
        }
    }
  2. replicaConfiguration 部分中,確認 cascadadableReplica 欄位已設為 true
  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"

建立可串聯的備用資源後,即可建立串聯式備用資源。

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

建立串聯式備用資源時,您必須在與可串聯式備用資源相同的區域中建立備用資源。如要設定串聯式備用資源,請在 –master-instance-name 參數中提供可串聯的備用資源名稱。

主控台

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

    前往 Cloud SQL 執行個體

  2. 找出要建立的副本,然後點按做為副本上層的副本「副本」分頁標籤。
  3. 按一下「建立備用資源」
  4. 在「Create read replica」(建立唯讀備用資源) 頁面中,更新執行個體 ID 和其他任何設定選項,包括名稱、地區和區域。
  5. 按一下「建立」

    Cloud SQL 會建立備用資源。您會返回上層副本的執行個體頁面。

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

gcloud

  1. --master-instance-name 標記中指定可連鎖的副本執行個體,即可建立新副本:
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=CASCADABLE_REPLICA_NAME \
    取代下列項目:
    • REPLICA_NAME:您要建立的副本專屬 ID
    • CASCADABLE_REPLICA_NAME:可連鎖複製的副本名稱
  3. 建立串聯式備用資源後,您會發現對主要執行個體所做的變更,會透過串聯式備用資源鏈中的所有備用資源進行複製。

curl

  1. 如要在可串聯的副本下建立串聯副本,請編輯下列 JSON 程式碼範例, 並儲存至名為 request.json 的檔案:
    {
      "masterInstanceName": "CASCADABLE_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. 請執行下列指令:
    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 這類查詢會造成複寫延遲,因為複本上會累積大量更新。

可能的解決方法包括:

  • 編輯執行個體,增加副本大小。
  • 降低資料庫負載。
  • 將讀取流量傳送至唯讀副本。
  • 將資料表編入索引。
  • 找出並修正寫入查詢速度緩慢的問題。
  • 重新建立副本。
建立副本時發生逾時錯誤。 主要執行個體上未提交的長期交易可能會導致唯讀備用資源建立失敗。

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

後續步驟