管理唯讀備用資源

本頁面說明如何管理唯讀副本。這些作業包括停用及啟用複製、升級副本、設定平行複製,以及檢查複製狀態。

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

本頁面適用於 Cloud SQL 執行個體的副本。如要將 Cloud SQL 執行個體設為外部訂閱者的發布者,請參閱「設定外部副本」。

停用複製功能

備用資源預設會在啟用複製的情況下啟動,但是您也可以將其停用以進行其他工作,例如進行偵錯作業或分析執行個體的狀態。準備就緒後,您必須明確重新啟用複製功能。停用或重新啟用複製功能,不會重新啟動副本執行個體。

停用複製功能不會停止副本執行個體,而是會變成唯讀執行個體,不再從主要執行個體複製資料。您仍須支付執行個體的費用。在已停用的副本上,您可以重新啟用複製功能、刪除副本,或將副本升級為獨立執行個體。

如果長時間停用複製功能,磁碟儲存空間需求可能會增加。舉例來說,執行個體可能會累積交易記錄,以便在您重新啟用複製功能時繼續複製。為避免磁碟儲存空間需求增加,請考慮升級副本或建立主要執行個體的複製項目,而非長時間停用複製功能。

停用複製功能:

控制台

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

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 按一下副本執行個體的名稱,選取該執行個體。
  3. 按一下按鈕列中的「停用複製功能」。
  4. 按一下 [確定]。

gcloud

gcloud sql instances patch REPLICA_NAME \
--no-enable-database-replication

REST v1

如要在指令列提示執行這個 cURL 指令,請使用 gcloud auth print-access-token 指令取得存取權杖。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。

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

  • project-id:專案 ID
  • replica-name:副本執行個體的名稱

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

JSON 要求主體:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

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

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

REST v1beta4

如要在指令列提示執行這個 cURL 指令,請使用 gcloud auth print-access-token 指令取得存取權杖。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。

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

  • project-id:專案 ID
  • replica-name:副本執行個體的名稱

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

JSON 要求主體:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

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

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

啟用複製功能

如果副本長時間未複製,則需要較長時間才能趕上主要執行個體。在這種情況下,請刪除副本並建立新的副本。

啟用複製功能:

控制台

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

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 按一下副本執行個體的名稱,選取該執行個體。
  3. 按一下「啟用複製功能」。
  4. 按一下 [確定]。

gcloud

gcloud sql instances patch REPLICA_NAME \
--enable-database-replication

REST v1

如要在指令列提示執行這個 cURL 指令,請使用 gcloud auth print-access-token 指令取得存取權杖。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。

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

  • project-id:專案 ID
  • replica-name:副本執行個體的名稱

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

JSON 要求主體:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

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

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

REST v1beta4

如要在指令列提示執行這個 cURL 指令,請使用 gcloud auth print-access-token 指令取得存取權杖。您也可以使用 Instances:patch 頁面上的 APIs Explorer 傳送 REST API 要求。

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

  • project-id:專案 ID
  • replica-name:副本執行個體的名稱

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

JSON 要求主體:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

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

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

升級副本

將唯讀副本升級後,執行個體就會停止複製資料,並轉換為具備讀寫能力的獨立 Cloud SQL 主要執行個體。

唯讀副本升級後,系統會自動設定備份,但不會自動設為高可用性 (HA) 執行個體。提升副本後,您可以啟用高可用性,就像為任何非副本執行個體啟用一樣。為唯讀副本設定高可用性的方式,與主要執行個體相同。進一步瞭解如何設定執行個體的高可用性。

在提升唯讀副本之前,如果主要執行個體仍可使用並為用戶端提供服務,請執行下列操作:

  1. 停止所有寫入主要執行個體的作業。
  2. 查看副本的複製狀態。其中一個方法是使用 SQL Server Management Studio (SSMS) 中的 Always On 可用性群組資訊主頁。
  3. 確認副本正在複製,然後檢查複製延遲時間,例如 seconds_behind_master 指標回報的時間。
  4. 使用 sp_help_revlogin 預存程序,匯出建立副本後在主要執行個體上建立的所有登入資訊,並在副本上重新建立這些資訊。

否則,新升級的執行個體可能會遺失一些已提交至主要執行個體的交易。

如要將副本升級為獨立執行個體,請按照下列步驟操作:

控制台

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

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 按一下副本執行個體的名稱,選取該執行個體。
  3. 按一下「Promote replica」(升級副本)。
  4. 按一下 [確定]。

gcloud

gcloud sql instances promote-replica REPLICA_NAME
  

REST v1

如要在指令列提示執行這個 cURL 指令,請使用 gcloud auth print-access-token 指令取得存取權杖。

您也可以在 Instances:promoteReplica 頁面使用 APIs Explorer 傳送 REST API 要求。

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

  • project-id:專案 ID
  • replica-name:副本執行個體的名稱

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica

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

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

REST v1beta4

如要在指令列提示執行這個 cURL 指令,請使用 gcloud auth print-access-token 指令取得存取權杖。

您也可以在 Instances:promoteReplica 頁面使用 APIs Explorer 傳送 REST API 要求。

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

  • project-id:專案 ID
  • replica-name:副本執行個體的名稱

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica

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

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

確認已正確設定升級的執行個體。建議您視需要將執行個體設為高可用性。

查看複製狀態

目前,您應使用 T-SQL 查詢或 SSMS 監控複製狀態。如要瞭解詳情,請參考下列資源:

疑難排解

問題 疑難排解
唯讀副本建立後未開始複製。 記錄檔中可能會有更具體的錯誤。 在 Cloud Logging 中檢查記錄,找出實際錯誤。
無法建立唯讀副本 - invalidFlagValue 錯誤。 要求中的其中一個標記無效。這可能是您明確提供的旗標,也可能是設為預設值的旗標。

首先,請確認 max_connections 旗標的值大於或等於主要執行個體的值。

如果 max_connections 旗標設定正確,請檢查 Cloud Logging 中的記錄,找出實際錯誤。

無法建立唯讀副本,發生不明錯誤。 記錄檔中可能會有更具體的錯誤。 在 Cloud Logging 中檢查記錄,找出實際錯誤。

如果錯誤為 set Service Networking service account as servicenetworking.serviceAgent role on consumer project,請按照「建立服務代理並授予角色」中的操作說明,手動建立必要的服務帳戶。

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

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

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

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

複製作業延遲時間持續偏高。 寫入負載過高,副本無法處理。如果副本上的 SQL 執行緒無法跟上 IO 執行緒,就會發生複製作業延遲。某些類型的查詢或工作負載可能會導致特定結構定義暫時或永久出現高複製延遲。複製延遲的常見原因包括:
  • 副本上的慢速查詢。找出並修正問題。
  • DELETE ... WHERE field < 50000000 這類查詢會導致資料列式複製作業發生複製延遲,因為副本上會累積大量更新。

可能的解決方案包括:

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

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

後續步驟