管理唯讀備用資源

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

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

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

停用複製功能

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

停用複製作業不會停止備用執行個體,而是會將其變成唯讀執行個體,不再從主要執行個體複製資料。系統會繼續收取執行個體費用。在已停用的備用資源上,您可以重新啟用複製功能、刪除備用資源,或將備用資源升級為獨立執行個體。

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

停用複製功能:

控制台

  1. 前往 Google Cloud 控制台的「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 執行個體

  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 Availability Group 資訊主頁
  3. 確認備用資源正在複製,然後檢查複製延遲,例如 seconds_behind_master 指標回報的延遲。

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

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

控制台

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

    前往 Cloud SQL 執行個體

  2. 按一下備用資源執行個體的名稱來選取備用資源執行個體。
  3. 按一下「推送備用資源」
  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,請停用並重新啟用 Service Networking API。這項動作會建立必要的服務帳戶,以便繼續進行程序。

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

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

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

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

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

可能的解決方法包括:

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

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

後續步驟