本頁說明從外部伺服器複製資料到 Cloud SQL 時,如何設定及使用代管匯入功能。
你必須完成本頁的所有步驟。完成後,您就能以管理任何其他 Cloud SQL 執行個體的方式,管理及監控來源代表執行個體。
事前準備
開始之前,請先完成下列步驟:
確認複製設定
設定完成後,請確認 Cloud SQL 備用資源可以從外部伺服器複製資料。
下列外部同步設定必須正確無誤。
- Cloud SQL 備用執行個體與外部伺服器之間的連線
- 複製使用者權限
- 版本相容性
- Cloud SQL 備用資源尚未開始複製
如要驗證這些設定,請開啟 Cloud Shell 終端機並輸入下列指令:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"selectedObjects": "SELECTED_OBJECTS"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings
範例
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal",
"selectedObjects":[{"database":"db1"}, {"database":"db2"}]
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
這些呼叫會傳回 sql#externalSyncSettingErrorList
類型的清單。
如果清單為空白,表示沒有錯誤。沒有錯誤的回應如下所示:
{ "kind": "sql#externalSyncSettingErrorList" }
屬性 | 說明 |
---|---|
SYNC_MODE | 請確保設定複製作業後,Cloud SQL 備用資源和外部伺服器可以保持同步。同步模式包括 EXTERNAL_SYNC_MODE_UNSPECIFIED 、ONLINE 和 OFFLINE 。 |
SYNC_PARALLEL_LEVEL | 確認控制資料庫資料表資料移轉速度的設定。可用的值如下:
注意:這個參數的預設值是 |
SELECTED_OBJECTS | 以半形逗號分隔的資料庫清單,這些資料庫會從來源代表執行個體遷移至目的地 Cloud SQL 執行個體。如果您未使用這個參數,或提供空白清單做為參數值,系統就會將所有資料庫從來源遷移至目的地。 |
PROJECT_ID | Google Cloud 專案的 ID。 |
REPLICA_INSTANCE_ID | Cloud SQL 副本的 ID。 |
更新來源表示法執行個體
如要更新要從來源代表執行個體遷移至目的地 Cloud SQL 執行個體的資料庫,請更新與 selectedObjects
參數相關聯的資料庫名稱清單。如果您未使用這個參數,或提供空白清單做為參數值,系統就會將所有資料庫從來源遷移至目的地。
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "username": "USERNAME", "password": "PASSWORD" } }
範例
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "POSTGRES_9_6",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "newReplicationUser",
"password": "525#@%*@"
}
}
屬性 | 說明 |
---|---|
SOURCE_NAME | 來源表示法執行個體的名稱。 |
REGION | 來源表示法執行個體所在的區域。 |
DATABASE_VERSION | 外部伺服器上執行的資料庫版本。選項包括 POSTGRES_9_6 、POSTGRES_10 、POSTGRES_11 、POSTGRES_12 、POSTGRES_13 、POSTGRES_14 、POSTGRES_15 、POSTGRES_16 或 POSTGRES_17 。 |
SELECTED_OBJECTS | 以半形逗號分隔的資料庫清單 (已更新),這些資料庫會從來源代表執行個體遷移至目的地 Cloud SQL 執行個體。 |
USERNAME | 外部伺服器上的複製使用者帳戶。 |
PASSWORD | 帳戶密碼。 |
接著,如要在 Cloud SQL 中修改來源代表執行個體,請開啟 Cloud Shell 終端機並輸入下列指令:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data @JSON_PATH \
-X PATCH \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_NAME
範例
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data @./source.json \
-X PATCH \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
屬性 | 說明 |
---|---|
JSON_PATH | 包含外部伺服器要求資料的 JSON 檔案路徑。 |
PROJECT_ID | Google Cloud 專案的 ID。 |
SOURCE_NAME | 來源表示法執行個體的名稱。 |
在外部伺服器上啟動複製作業
確認可以從外部伺服器複製資料後,請開始複製作業。初始匯入程序執行複製作業的速度最高可達每小時 500 GB。不過,實際速度會因機器層級、資料磁碟大小、網路輸送量和資料庫性質而異。
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync
範例
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
屬性 | 說明 |
---|---|
SYNC_MODE | 確認設定複製作業後,Cloud SQL 備用資源和外部伺服器可以保持同步。 |
SKIP_VERIFICATION | 是否要在同步處理資料前略過內建驗證步驟。只有在驗證複製設定後,才建議使用這個參數。 |
SYNC_PARALLEL_LEVEL | 提供可控制資料庫資料表資料移轉速度的設定。可用的值如下:
注意:這個參數的預設值是 |
PROJECT_ID | Google Cloud 專案的 ID。 |
REPLICA_INSTANCE_ID | Cloud SQL 副本的 ID。 |
監控遷移作業
從外部伺服器啟動複製作業後,您需要監控複製作業。詳情請參閱「監控複製作業」。然後完成遷移作業。
疑難排解
請考慮採用下列疑難排解選項:
問題 | 疑難排解 |
---|---|
建立唯讀副本時,系統未開始複製作業。 | 記錄檔中可能會有更具體的錯誤。 檢查 Cloud Logging 中的記錄,找出實際錯誤。 |
無法建立唯讀副本 - invalidFlagValue 錯誤。 | 要求中的其中一個標記無效。這可能是您明確提供的旗標,也可能是設為預設值的旗標。 首先,請確認 如果 |
無法建立唯讀副本 - 發生不明錯誤。 | 記錄檔中可能會有更具體的錯誤。
檢查 Cloud Logging 中的記錄,找出實際錯誤。 如果錯誤訊息為 |
磁碟空間已滿。 | 建立副本時,主要執行個體的磁碟大小可能會達到上限。 編輯主要執行個體,將其升級為較大的磁碟大小。 |
磁碟空間大幅增加。 | 如果某個時段未主動用於追蹤資料,PostgreSQL 會無限期保留 WAL 區隔,導致磁碟空間無限擴充。如果您在 Cloud SQL 中使用邏輯複製和解碼功能,系統會自動建立及捨棄複製時段。如要偵測未使用的複寫位置,請查詢 pg_replication_slots 系統檢視畫面,並依 active 欄篩選。未使用過的時段可以捨棄,使用 pg_drop_replication_slot 指令移除 WAL 區段。 |
副本執行個體使用的記憶體過多。 | 副本會使用暫存記憶體快取經常要求的讀取作業,因此使用的記憶體可能比主要執行個體多。 重新啟動副本執行個體,即可回收暫存記憶體空間。 |
複製作業已停止。 | 儲存空間已達上限,且未啟用自動增加儲存空間功能。
編輯執行個體,啟用 |
複製延遲持續偏高。 | 副本的寫入負載過高,如果備用資源上的 SQL 執行緒無法跟上 IO 執行緒,就會發生複製延遲。某些查詢或工作負載可能會導致特定結構定義出現暫時或永久的高複製延遲。複製延遲的常見原因包括:
可能的解決方法包括:
|
在 PostgreSQL 9.6 中重建索引時發生錯誤。 | 您會收到 PostgreSQL 的錯誤訊息,指出需要重建特定索引。這項操作只能在主要執行個體上進行。如果您建立新的副本執行個體,很快就會再次發生相同錯誤。在 PostgreSQL 10 以下版本中,雜湊索引不會傳播至副本。 如果必須使用雜湊索引,請升級至 PostgreSQL 10 以上版本。否則,如果您也想使用副本,請勿在 PostgreSQL 9.6 中使用雜湊索引。 |
主要執行個體上的查詢一律會執行。 | 建立副本後,查詢 SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' 應會在主要執行個體上持續執行。
|
建立副本時發生逾時錯誤。 | 主要執行個體上未提交的長期交易可能會導致唯讀備用資源建立失敗。 停止所有執行中的查詢後,重新建立副本。 |
如果主要執行個體和副本的 vCPU 大小不同,查詢最佳化工具會將 vCPU 大小納入考量,因此可能會發生查詢效能問題。 |
如要解決這個問題,請完成下列步驟:
如果是特定查詢,請修改查詢。舉例來說,您可以變更聯結的順序,看看是否能提升效能。 |
查看複寫記錄
驗證複製設定時,系統會產生記錄。
如要查看這些記錄,請按照下列步驟操作:
前往 Google Cloud 控制台的記錄檢視器。
- 從「執行個體」下拉式選單中選取 Cloud SQL 副本。
- 選取
replication-setup.log
記錄檔。
如果 Cloud SQL 備用資源無法連線至外部伺服器,請確認下列事項:
- 外部伺服器上的任何防火牆都已設定為允許來自 Cloud SQL 備用資源傳出 IP 位址的連線。
- 您的 SSL/TLS 設定正確無誤。
- 複製使用者、主機和密碼正確無誤。
後續步驟
- 瞭解如何更新執行個體。
- 瞭解如何管理備用資源。
- 瞭解如何監控執行個體。
- 瞭解如何升級 Cloud SQL 備用資源。