關於 Cloud SQL 中的複製功能

複製功能可建立 Cloud SQL 執行個體或地端部署資料庫的副本,並將工作卸載至副本。

簡介

使用複製功能的主要原因,是在不降低效能的情況下,擴大運用資料庫中的資料。

其他原因包括:

  • 在不同區域之間遷移資料
  • 在不同平台之間遷移資料
  • 將資料從地端部署資料庫遷移至 Cloud SQL

此外,如果原始執行個體損毀,也可以升級為副本。

提到 Cloud SQL 執行個體時,複製的執行個體稱為主要執行個體,副本則稱為唯讀備用資源。主要執行個體和唯讀複本位於 Cloud SQL 中。

如果是指地端部署資料庫,複製情境則稱為「從外部伺服器複製」。在這個情境中,要複製的資料庫是來源資料庫伺服器。位於 Cloud SQL 中的副本稱為 Cloud SQL 副本。此外,Cloud SQL 中還有一個代表來源資料庫伺服器的執行個體,稱為「來源代表執行個體」

在災難復原情境中,您可以升級副本,將其轉換為主要執行個體。這樣一來,您就能在發生服務中斷的區域使用這個執行個體,您也可以升級副本,取代已損毀的執行個體。

Cloud SQL 支援下列類型的副本:

透過連接器強制執行,您可以強制僅使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器連線至 Cloud SQL 執行個體。強制執行連接器後,Cloud SQL 會拒絕直接連線至資料庫。如果執行個體已啟用連接器強制執行功能,就無法建立唯讀副本。同樣地,如果執行個體有唯讀備用資源,就無法為該執行個體啟用連接器強制執行功能。

您也可以使用資料庫遷移服務,從來源資料庫伺服器持續複製資料到 Cloud SQL。

Cloud SQL 不支援在兩個外部伺服器之間進行複製。 不過,Cloud SQL 支援以全域交易 ID (GTID) 為基礎的複製功能。GTID 可在伺服器上和複製設定中,不重複地識別每筆交易。由於每筆交易都有專屬 ID,MySQL 伺服器可以追蹤已執行的交易。GTID 使用絕對座標,因此 Cloud SQL 執行個體的副本可以指向主要執行個體,您不必在 CHANGE MASTER 陳述式中指定二進位記錄檔的檔案名稱或位置。副本和時間點復原功能可減少錯誤。基於上述優點,您無法在 Cloud SQL 中停用以 GTID 為基礎的複製功能。

唯讀備用資源

您可以使用唯讀複本,卸載 Cloud SQL 執行個體的工作。唯讀備用資源是主要執行個體的精確副本。主要執行個體上的資料和其他變更,幾乎會即時更新至唯讀副本。

唯讀複本為唯讀,您無法寫入資料。唯讀備用資源會處理查詢、讀取要求和分析流量,因此可減輕主要執行個體的負載。

您可以透過連線名稱和 IP 位址,直接連線至副本。如果使用私人 IP 位址連線至副本,則不需要為副本建立額外的虛擬私有雲私人連線,因為連線會從主要執行個體繼承。

如要瞭解如何建立唯讀副本,請參閱「 建立唯讀副本」。如要瞭解如何管理唯讀副本,請參閱 管理唯讀副本

最佳做法是在主要執行個體上使用高可用性時,將唯讀副本放在與主要執行個體不同的可用區。這樣一來,當主要執行個體所在的可用區發生服務中斷時,讀取副本就能繼續運作。詳情請參閱「高可用性總覽」。

選取合適的機型

唯讀備用資源的 vCPU 數量和記憶體可以與主要執行個體不同。您應監控執行個體的指標,例如 CPU 和記憶體用量,確保副本執行個體的大小適合工作負載,尤其是當副本執行個體比主要執行個體小的時候。如果副本執行個體大小不足,就更容易效能不佳,例如頻繁發生記憶體不足 (OOM) 事件。

唯讀備用資源的儲存空間容量

調整主要執行個體大小時,系統會視需要調整所有唯讀備用資源的大小,確保這些資源的儲存空間容量至少與更新後的主要執行個體相同。

跨地區唯讀備用資源

跨區域複製功能可讓您在與主要執行個體不同的區域中建立唯讀副本。建立跨區域唯讀備用資源的方式,與建立區域內備用資源相同。

跨區域備用資源:

  • 在應用程式區域附近提供副本,提高讀取效能。
  • 提供額外的災難復原功能,防範區域性故障。
  • 可讓您將資料從一個區域遷移至另一個區域。

如要進一步瞭解跨區域副本,請參閱「推送備用資源,以進行區域性遷移或災難復原」。

唯讀備用資源的層疊

連鎖複製功能可讓您在相同或不同區域的另一個唯讀備用資源下,建立唯讀備用資源。以下情境是使用層疊副本的用途:

  • 災難復原:您可以運用串聯式唯讀備用資源階層,模擬主要執行個體及其唯讀備用資源的拓撲。發生服務中斷時,系統會將您選取的唯讀備用資源升級為主要執行個體,而新主要執行個體下的唯讀備用資源會繼續複製資料,隨時可供使用。
  • 提升效能:將複製工作分擔給多個唯讀備用資源,減輕主要執行個體的負擔。
  • 擴大讀取作業:您可以擁有更多副本,分攤讀取負載。
  • 降低成本:您可以在其他區域使用單一連鎖複本和跨區域複寫功能,降低網路成本。

術語

  • 串聯副本:可擁有專屬副本的唯讀副本。
  • 層級:您可以在串聯式備用資源階層中建立備用資源層級。舉例來說,如果您在執行個體中新增四個副本,這四個副本就會處於相同層級。
  • 同層級執行個體:從同一個主要執行個體複製資料的多個副本。同層級的複本位於複本階層的同一層級。一個副本最多可以有八個同層級。
  • 分葉副本:沒有任何副本的唯讀副本。在多層級複製階層中,分葉副本是最後一個層級。
  • 升級:將階層中任何層級的副本轉換為主要執行個體的動作。升級後,備用資源的串聯式備用資源階層會保留。

設定連鎖備用資源

串聯式備用資源可讓您在任何現有備用資源中新增唯讀備用資源。最多可新增四層副本,包括主要執行個體。當您升級串聯式備用資源階層頂端的備用資源時,該備用資源會成為主要執行個體,而其串聯式備用資源會繼續複製。

如要規劃設定,您必須先確定唯讀副本的用途。接下來兩節將說明災難復原和多區域複寫的設定。

災難復原

如要瞭解連鎖副本如何協助您在服務中斷期間快速復原,請參考以下副本情境:

設定

顯示串聯式備用資源設定,串聯式備用資源位於不同區域

服務中斷

在服務中斷期間宣傳或展示複製品

推送

顯示具有備用資源的新執行個體

如要在災難復原設定中使用 B 區域的執行個體,且具備下列條件:

  • 與主要執行個體 (副本 A) 連結的相同區域副本
  • 附加至主要副本的其他區域副本 (串聯副本)。

您可以在 B 區域的串聯式備用資源下建立唯讀備用資源。

在「Outage」(服務中斷)分頁中,如果區域 A 發生服務中斷情形,系統會將連鎖備用資源升級為主要執行個體。底下已有唯讀副本,可縮短復原時間目標 (RTO)。

在「宣傳」分頁中,您會看到當升級連鎖副本時,其副本也會升級,並繼續在其下複製。

多區域複製功能

串聯式副本的另一個使用案例是將讀取容量以符合成本效益的方式分配至第二個區域。您可以建立串聯式備用資源 C 和 D,從備用資源 B 複製資料。用戶端可以在 B、C 和 D 副本之間分配讀取查詢,以減輕每個副本的負載。跨區域網路流量費用只會產生一次,也就是從主要執行個體到備用資源 B 的費用。從 B 複製到 C 和 D 時,會使用區域內網路傳輸,因此不會產生費用。

您可以使用串聯式備用資源,為多區域複製作業建立最多四個執行個體的階層:

主要 A → 副本 B → 副本 C 和副本 D

限制

  • 如果備用資源底下有備用資源,就無法刪除。如要刪除備用資源,請從葉節點備用資源開始,然後逐步向上刪除階層中的備用資源。
  • 系統不支援循環區域依附元件。如要讓連鎖備用資源的備用資源與主要執行個體位於相同區域,連鎖備用資源也必須位於相同區域。

外部唯讀備用資源

外部唯讀複本是外部 MySQL 執行個體,可從 Cloud SQL 主要執行個體進行複寫。舉例來說,在 Compute Engine 上執行的 MySQL 執行個體會被視為外部執行個體。

外部唯讀備用資源有下列限制:

  • 外部備用資源的主要執行個體不得為 Cloud SQL 唯讀備用資源。
  • 可能無法複製到其他雲端平台代管的 MySQL 執行個體;請查閱其他提供者的說明文件。舉例來說,您必須設定 replicate-ignore-db 設定欄位,且不支援不允許這麼做的雲端供應商。如需其他必要設定欄位,請參閱「 設定外部備用資源」。
  • 例如,如果複製只因網路或伺服器故障而中斷了幾小時,備用資源就會落後於主要執行個體。當備用資源重新連線主要執行個體並再次開始複製時,備用資源應該就能趕上。但是,如果複製中斷時間超過保留 Cloud SQL 複製記錄的時間 (7 個備份),您就必須刪除備用資源並重新建立新備用資源。
  • 從主要執行個體流向外部備用資源的資料會被當成輸出資料移轉收費。如需 Cloud SQL 執行個體類型的資料傳輸定價,請參閱定價頁面。
  • 如果您為執行個體建立外部讀取副本,並強制規定只能使用 Cloud SQL Auth Proxy 或 Cloud SQL 語言連接器,連線至已設定私人服務連線的執行個體,則必須將副本的子網路範圍新增至主要執行個體的授權網路。您必須將所有範圍設定為 Cloud SQL 執行個體的授權網路。

    gcloud

    如要為執行個體設定 IP 授權,允許來自外部唯讀副本 IP 位址範圍的流量,請使用 gcloud sql instances patch 指令:

    gcloud sql instances patch \
    --authorized-networks=IP_ADDRESS_RANGE_1/24,IP_ADDRESS_RANGE_2/24

    IP_ADDRESS_RANGE_1IP_ADDRESS_RANGE_2 替換為外部唯讀副本的 IP 位址範圍。

    REST

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

    • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
    • INSTANCE_NAME:Cloud SQL 執行個體的名稱
    • IP_ADDRESS_RANGE_1:外部唯讀副本的第一個 IP 位址範圍
    • IP_ADDRESS_RANGE_2:外部唯讀副本的第二個 IP 位址範圍

    HTTP 方法和網址:

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

    JSON 要求主體:

    {
      "kind": "sql#instance",
      "name": INSTANCE_NAME,
      "project": PROJECT_ID,
      "settings": {
        "ipConfiguration": {
          "authorizedNetworks": [{"kind": "sql#aclEntry", "value": "IP_ADDRESS_RANGE_1/24"}, {"kind": "sql#aclEntry", "value": "IP_ADDRESS_RANGE_2/24"}]},
      "kind": "sql#settings"
      }
    }

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

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

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

複製用途

下列使用案例適用於每種複製類型。

名稱 主要 備用資源 優點及用途 更多資訊
唯讀備用資源 Cloud SQL 執行個體 Cloud SQL 執行個體
  • 額外的讀取容量
  • 數據分析目標
跨區域唯讀副本 Cloud SQL 執行個體 Cloud SQL 執行個體
  • 額外的讀取容量
  • 數據分析目標
  • 額外的災難復原功能
  • 提高讀取效能
  • 在不同區域之間遷移資料
外部唯讀備用資源 Cloud SQL 獨立或主要執行個體 在 Cloud SQL 外部的 MySQL 執行個體
  • 減少外部連線的延遲時間
  • 數據分析目標
  • 到其他平台的遷移路徑
從外部伺服器複製 在 Cloud SQL 外部的 MySQL 執行個體 MySQL 適用的 Cloud SQL 執行個體
  • 到 Cloud SQL 的遷移路徑
  • 資料複製到「 Google Cloud」
  • 數據分析目標

建立唯讀副本的必要條件

如要為主要 Cloud SQL 執行個體建立唯讀複本,該執行個體必須符合下列條件:

  • 必須啟用自動備份功能。
  • 您必須啟用二進位檔記錄功能,這需要啟用時間點復原功能。進一步瞭解這些記錄的影響。
  • 啟用二進位記錄後,至少要建立一個備份。

外部副本的其他規定:

  • 備用資源的 MySQL 版本必須與主要執行個體的 MySQL 版本相同或更高。瞭解詳情
  • 為確保連線安全,您必須為主要執行個體設定安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS)。瞭解詳情

啟用二進位檔記錄功能的影響

您必須啟用時間點復原功能,才能在主要執行個體上啟用二進位記錄功能,以支援唯讀備用資源。這會造成下列影響:

  • 效能負擔

    Cloud SQL 會使用列式複製,並搭配 MySQL 旗標 sync_binlog=1innodb_support_xa=true。因此,每項寫入作業都需要額外的磁碟 fsync,這會降低效能。

  • 儲存空間額外負荷

    二進位記錄檔的儲存費用與一般資料相同。系統會自動將二進位檔記錄截斷至最舊的自動備份年齡。Cloud SQL 會保留最新的七個自動備份,以及所有隨選備份。二進位記錄檔的大小 (以及因此產生的費用) 取決於工作負載。舉例來說,寫入量大的工作負載會比讀取量大的工作負載消耗更多二進位記錄空間。

    您可以使用 SHOW BINARY LOGS MySQL 指令查看二進位記錄檔的大小。

    備份時,記錄會與資料一起儲存在備份中。

唯讀備用資源的二進位記錄

  • 唯讀備用資源執行個體支援二進位記錄 (僅限 MySQL 5.7 和 8.0)。您可以使用與主要執行個體相同的 API 指令,在副本上啟用二進位記錄功能,但要使用副本的執行個體名稱,而非主要執行個體的名稱。請注意,enable binary loggingenable point-in-time recovery 這兩個詞可互換。

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

    即使主要備用資源已停用備份功能,您仍可在備用資源上啟用二進位檔記錄功能。

    如果將已設定這個值的副本升級為獨立伺服器,獨立伺服器上的設定會重設為安全值 1

帳單

  • 唯讀備用資源的計費方式與標準 Cloud SQL 執行個體相同。資料複製無需付費。
  • 如果是外部備用資源,從主要執行個體流向外部備用資源的資料會以資料移轉計費。如需 Cloud SQL 執行個體類型的資料傳輸定價,請參閱定價頁面。
  • 跨區域唯讀備用資源的價格,與在該區域建立新的 Cloud SQL 執行個體相同。請參閱 Cloud SQL 執行個體定價,然後選取適當的區域。除了與執行個體相關的正常費用,跨區域副本還會產生跨區域資料移轉費用,因為系統會將複製記錄從主要執行個體傳送至副本執行個體,如「網路輸出定價」一文所述。

Cloud SQL 唯讀複本快速參考資料

主題 討論
備份 您不能設定備用資源的備份。
核心和記憶體 唯讀備用資源使用的核心數和記憶體量可以與主要執行個體不同。
刪除主要執行個體 刪除主要執行個體之前,必須將其所有唯讀備用資源升級至獨立執行個體,或刪除唯讀備用資源。
刪除副本 刪除副本時,主要執行個體的狀態不會受到影響。
停用二進位記錄 如要停用主要執行個體上的二進位記錄,必須先升級或刪除所有唯讀副本。
容錯移轉 主要執行個體只能容錯移轉至災難復原備用資源。唯讀複本在服務中斷期間無法以任何方式容錯移轉。
高可用性 唯讀備用資源可讓您在備用資源上啟用高可用性
負載平衡 Cloud SQL 不提供備用資源之間的負載平衡。您可以選擇為 Cloud SQL 執行個體實作負載平衡。您也可以使用連線集區,透過負載平衡設定將查詢分散到各個副本,進而提升效能。
維護期間 唯讀備用資源與主要執行個體共用維護期間。副本會遵循主要執行個體的維護設定,包括維護期間、重新排定時間和拒絕維護期間。維護期間,Cloud SQL 會先更新所有唯讀副本,再更新主要執行個體。
多個唯讀複本 Cloud SQL 支援串聯式備用資源。 因此,您可以為單一主要執行個體建立最多 10 個副本,並為這些副本建立副本,最多可達四個層級 (包括主要執行個體)。
平行複製 如要瞭解如何使用平行複製功能提升效能,請參閱「 設定平行複製功能」。
私人 IP 如果使用私人 IP 位址連線至副本,則不需要為副本建立額外的 VPC 私人連線,因為副本會沿用主要執行個體的連線。
還原主要執行個體 存在備用資源時,您無法還原備用資源的主要執行個體。從備份還原執行個體,或對它執行時間點復原之前,您必須 推送或刪除它的所有備用資源。
設定 主要執行個體的 MySQL 設定會推送至備用資源,包括根密碼與對使用者資料表的變更。CPU 和記憶體變更不會傳播至副本。
停止備用資源 您無法stop備用資源,您可以在其上執行 restartdeletedisable replication,但無法停止執行,主要執行個體則可以。
升級副本 唯讀複本隨時可能發生會導致作業中斷的升級。
使用者資料表 您無法變更備用資源。所有使用者變更都必須在主要執行個體上完成。

後續步驟