執行 MySQL 回復作業

本指南說明如何從 Spanner 執行容錯移轉和災難復原回溯,返回來源 MySQL 執行個體。

如果切換至 Spanner 後,效能意外降低、發生無法復原的應用程式錯誤,或出現重大功能阻礙,請按照下列各節的程序復原至 MySQL 主要執行個體:

事前準備

啟動備用程序前,請確認符合下列必要條件:

  1. 啟用反向複製:確認反向複製 Dataflow 管道 (Spanner_to_SourceDb) 正在執行,並在 forward_migration 篩選模式中主動使用 Spanner 變更串流。詳情請參閱「設定 MySQL 回退機制」。
  2. 來源 MySQL 可用性:確認來源 MySQL 資料庫已上線、可從 Dataflow 連線,且可接受寫入連線。
  3. 維護期間:提醒相關人員,在 Spanner 寫入作業暫停和反向複製作業耗盡時,需要預定的停機時間。

必要的角色

暫停 Spanner 寫入作業

  1. 暫停應用程式中所有寫入 Spanner 的資料庫流量。
  2. 讓 Spanner 上的有效交易完全提交並排空。

允許反向複製來排空

下列各節說明如何確認轉換後寫入 Spanner 的所有變更,都已複製回 MySQL,然後再切換應用程式寫入作業。

監控複製延遲時間

追蹤複製延遲時間,確認所有進行中的變更都已寫入 MySQL:

  1. 在 Google Cloud 控制台,前往反向複製 Dataflow 工作的「Job details」(工作詳細資料) 頁面。
  2. 在「自訂指標」分頁中,檢查 replication_lag_in_seconds_LOGICAL_SHARD_NAME_MAX 使用者計數器。詳情請參閱「設定備用 MySQL」。
  3. 等待計數器值達到 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 寫入活動

確認來源資料庫的反向複製寫入作業已完成:

  1. 在來源 MySQL 主要資料庫中,檢查有效查詢和資料庫連線指標。
  2. 確認反向複製管道的寫入流量已停止。

確認 DLQ 狀態是否乾淨

檢查無法傳送的訊息佇列 (DLQ),確認反向複製期間未發生任何未處理的錯誤:

  1. 在 Google Cloud 控制台,前往反向複製 Dataflow 工作的「Job details」(工作詳細資料) 頁面。在「自訂指標」分頁中,檢查 severe_error_count 使用者計數器。
  2. 檢查 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:資料庫結構定義名稱。
  3. 確認 DLQ 目錄仍完全空白。

  4. 如果存在錯誤檔案,請先解決根本問題並重播失敗的記錄,再繼續操作。詳情請參閱「監控及解決反向複製錯誤」。

繼續轉送 CDC 串流

如果您打算日後繼續執行 Spanner 的正向遷移作業,請繼續執行正向 Datastream 串流:

  1. 前往 Google Cloud 控制台的串流「Stream details」頁面。
  2. 按一下「繼續」,等待串流狀態變更為 RUNNING。詳情請參閱「遷移 MySQL 資料」。

或者,如要使用 gcloud CLI 繼續串流,請執行 gcloud datastream streams resume 指令:

gcloud datastream streams resume STREAM_ID \
    --location=LOCATION

更改下列內容:

  • STREAM_ID:Datastream 串流的 ID。
  • LOCATION:串流所在的 Google Cloud 區域。

將寫入作業重新轉送至 MySQL

  1. 更新應用程式設定和資料庫連線字串,以來源 MySQL 主要資料庫執行個體為目標。
  2. 啟動應用程式服務,並繼續對 MySQL 執行即時讀取和寫入流量。
  3. 確認應用程式讀取和寫入作業是否能成功對 MySQL 資料庫執行。

後續步驟