建立唯讀備用資源

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

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

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

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

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

事前準備

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

建立唯讀備用資源

建立唯讀備用資源時,請考量下列事項:

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

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

主控台

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

    前往 Cloud SQL 執行個體

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

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

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

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

  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:包含執行個體的 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": "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": "[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": "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": "[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"
}

建立串聯式備用資源

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

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

事前準備

主要執行個體必須有可分層的備用資源。以下節將說明如何建立可分層複製的複本。

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

建立可分層備援的備用資源時,您必須在與主要執行個體不同的區域中建立備用資源。您可以設定 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:要建立新複本的區域。這個區域必須與主要執行個體的區域不同。

您必須在與主要執行個體相同的虛擬私有雲網路中建立備用資源。您也可以在該虛擬私有雲網路中指定已分配的 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 執行個體」頁面。

    前往 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 執行緒無法跟上 I/O 執行緒時,就會發生複製延遲。某些類型的查詢或工作負載,可能會導致特定結構定義的複製延遲時間暫時或永久性偏高。複製延遲的常見原因包括:
  • 複本上的查詢速度緩慢。找出並修正這些問題。
  • DELETE ... WHERE field < 50000000 這類查詢會導致以列為基礎的複製作業出現延遲,因為複本上會累積大量更新。

可能的解決方法包括:

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

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

後續步驟