本指南說明如何從 Spanner 執行容錯移轉和災難復原回溯,返回來源 MySQL 執行個體。
如果切換至 Spanner 後,效能意外降低、發生無法復原的應用程式錯誤,或出現重大功能阻礙,請按照下列各節的程序復原至 MySQL 主要執行個體:
事前準備
啟動備用程序前,請確認符合下列必要條件:
- 啟用反向複製:確認反向複製 Dataflow 管道 (
Spanner_to_SourceDb) 正在執行,並在forward_migration篩選模式中主動使用 Spanner 變更串流。詳情請參閱「設定 MySQL 回退機制」。 - 來源 MySQL 可用性:確認來源 MySQL 資料庫已上線、可從 Dataflow 連線,且可接受寫入連線。
- 維護期間:提醒相關人員,在 Spanner 寫入作業暫停和反向複製作業耗盡時,需要預定的停機時間。
必要的角色
-
如要取得執行 MySQL 回復作業所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Cloud Spanner 資料庫使用者 (
roles/spanner.databaseUser) - Dataflow 管理員 (
roles/dataflow.admin) - Datastream 管理員 (
roles/datastream.admin) - 儲存空間管理員 (
roles/storage.admin) - Monitoring 檢視者 (
roles/monitoring.viewer) - 檢視者 (
roles/viewer)
- Cloud Spanner 資料庫使用者 (
暫停 Spanner 寫入作業
- 暫停應用程式中所有寫入 Spanner 的資料庫流量。
- 讓 Spanner 上的有效交易完全提交並排空。
允許反向複製來排空
下列各節說明如何確認轉換後寫入 Spanner 的所有變更,都已複製回 MySQL,然後再切換應用程式寫入作業。
監控複製延遲時間
追蹤複製延遲時間,確認所有進行中的變更都已寫入 MySQL:
- 在 Google Cloud 控制台,前往反向複製 Dataflow 工作的「Job details」(工作詳細資料) 頁面。
- 在「自訂指標」分頁中,檢查
replication_lag_in_seconds_LOGICAL_SHARD_NAME_MAX使用者計數器。詳情請參閱「設定備用 MySQL」。 - 等待計數器值達到
0。
或者,您也可以在 Metrics Explorer 中,使用 Monitoring 查詢語言 (MQL) 查詢使用者計數器:
fetch dataflow_job | metric 'dataflow.googleapis.com/job/user_counter' | filter (metric.job_id == 'JOB_ID' && metric.metric_name == 'replication_lag_insecondsLOGICAL_SHARD_NAME_MAX') | group_by 1m, [value_p99_latency: percentile(value.user_counter, 99)] | every 1m
JOB_ID:反向複製 Dataflow 工作的 ID。
* LOGICAL_SHARD_NAME:為來源資料庫設定的邏輯分片名稱。
驗證 MySQL 寫入活動
確認來源資料庫的反向複製寫入作業已完成:
- 在來源 MySQL 主要資料庫中,檢查有效查詢和資料庫連線指標。
- 確認反向複製管道的寫入流量已停止。
確認 DLQ 狀態是否乾淨
檢查無法傳送的訊息佇列 (DLQ),確認反向複製期間未發生任何未處理的錯誤:
- 在 Google Cloud 控制台,前往反向複製 Dataflow 工作的「Job details」(工作詳細資料) 頁面。在「自訂指標」分頁中,檢查
severe_error_count使用者計數器。 檢查 Cloud Storage 中嚴重和重試反向複製 DLQ 目錄 (例如
gs://MIGRATION_BUCKET/ENV/SERVICE/reverse/DB_SCHEMA/severe/和gs://MIGRATION_BUCKET/ENV/SERVICE/reverse/DB_SCHEMA/retry/)。您可以使用 gcloud CLI 列出嚴重 DLQ 目錄的內容:
gcloud storage ls gs://MIGRATION_BUCKET/ENV/SERVICE/reverse/DB_SCHEMA/severe/
更改下列內容:
MIGRATION_BUCKET:Cloud Storage bucket 的名稱。ENV:部署環境名稱 (例如prod)。SERVICE:應用程式或服務名稱。DB_SCHEMA:資料庫結構定義名稱。
確認 DLQ 目錄仍完全空白。
如果存在錯誤檔案,請先解決根本問題並重播失敗的記錄,再繼續操作。詳情請參閱「監控及解決反向複製錯誤」。
繼續轉送 CDC 串流
如果您打算日後繼續執行 Spanner 的正向遷移作業,請繼續執行正向 Datastream 串流:
- 前往 Google Cloud 控制台的串流「Stream details」頁面。
- 按一下「繼續」,等待串流狀態變更為
RUNNING。詳情請參閱「遷移 MySQL 資料」。
或者,如要使用 gcloud CLI 繼續串流,請執行 gcloud datastream streams resume 指令:
gcloud datastream streams resume STREAM_ID \
--location=LOCATION
更改下列內容:
STREAM_ID:Datastream 串流的 ID。LOCATION:串流所在的 Google Cloud 區域。
將寫入作業重新轉送至 MySQL
- 更新應用程式設定和資料庫連線字串,以來源 MySQL 主要資料庫執行個體為目標。
- 啟動應用程式服務,並繼續對 MySQL 執行即時讀取和寫入流量。
- 確認應用程式讀取和寫入作業是否能成功對 MySQL 資料庫執行。