排解遷移錯誤
遷移工作程序可能會在執行期間發生錯誤。
- 有些錯誤 (例如來源資料庫的密碼錯誤) 是可復原的,也就是說,您可以修正這些錯誤,遷移工作也會自動恢復。
- 有些錯誤無法復原,例如資料複製錯誤,這表示遷移工作必須從頭開始。
發生錯誤時,遷移工作狀態會變更為 Failed
,子狀態則會反映失敗前的最後狀態。
如要排解錯誤,請前往失敗的遷移工作查看錯誤,然後按照錯誤訊息中列出的步驟操作。
如要查看錯誤的詳細資訊,請透過遷移工作的連結前往 Cloud Monitoring。系統會將記錄檔篩選為特定遷移工作。
下表列出一些問題範例和解決方法:
問題 | 可能原因 | 建議做法 |
---|---|---|
無法連線至來源資料庫執行個體。 | 來源資料庫執行個體和目的地執行個體之間的連線發生問題。 | 請按照「偵錯連線問題」一文中的步驟操作。 |
來源和目的地資料庫版本不相容,因此無法執行遷移工作。 | 來源和目的地資料庫版本不相容。具體來說,提供的來源資料庫版本與目的地資料庫版本不相容。 | 請確認目的地資料庫版本與來源資料庫版本相同,或比來源版本高一個主要版本。接著,請建立新的遷移工作。 |
來源已封鎖資料定義語言 (DDL) 或資料操縱語言 (DML)。 | 需要 ACCESS EXCLUSIVE 鎖定且在完整傾印階段執行的 DDL 會遭到封鎖。 |
在初始同步程序 (完整傾印) 期間,請避免在資料表上使用 DDL 或需要 舉例來說,如果資料表仍處於初始同步處理程序,且在同一資料表上執行 |
錯誤訊息:No pglogical extension installed on databases (X)
|
一或多個來源資料庫未安裝 pglogical 。 |
請按照這些規範,在來源執行個體的資料庫上安裝 pglogical 。 |
錯誤訊息:Replication user 'x' doesn't have sufficient privileges. |
使用資料庫移轉服務的使用者沒有執行指定作業所需的權限。 | 請遵循這些規範,確保該使用者具備必要的權限。 |
錯誤訊息:Unable to connect to source database server. |
資料庫遷移服務無法與來源資料庫伺服器建立連線。 | 請確認來源和目的地資料庫執行個體可以相互通訊,且您已完成定義遷移工作設定時顯示的所有必要先決條件。 |
錯誤訊息:The source database 'wal_level' configuration must be equal to 'logical'.
|
來源資料庫的 wal_level 已設為 logical 以外的值。 |
將 wal_level 設為 logical 。 |
錯誤訊息:The source database 'max_replication_slots' configuration is not sufficient. |
max_replication_slots 參數設定不正確。 |
請按照這些規範正確設定這個參數。 |
錯誤訊息:The source database 'max_wal_senders' configuration is not sufficient. |
max_wal_senders 參數設定不正確。 |
請按照這些規範正確設定這個參數。 |
錯誤訊息:The source database 'max_worker_processes' configuration is not sufficient.
|
max_worker_processes 參數設定不正確。 |
請按照這些規範正確設定這個參數。 |
錯誤訊息: 或
錯誤訊息: |
在遷移工作升級期間,無法清除複製作業所需的設定。 | 針對每個資料庫,以具備 如要進一步瞭解要執行哪些指令,請參閱「清理複製作業時段」。 |
錯誤訊息: |
提供給資料庫移轉服務的來源 CA 憑證可能只包含根憑證。不過,來源憑證需要根憑證和任何中繼憑證。 舉例來說,如果您使用 Amazon Relational Database Service 的 rds-ca-2019-root.pem 憑證,可能會發生這個問題。 |
建立結合來源 CA 憑證,內含根憑證和所有必要的中繼憑證。 針對 Amazon Relational Database Service 用途,請使用 rds-combined-ca-bundle.pem 憑證,而非 rds-ca-2019-root.pem 憑證。 |
錯誤訊息: |
max_locks_per_transaction 參數的值設定不足。 |
請將這個參數的值設為至少 {max_number_of_tables_per_database }/(max_connections + max_prepared_transactions )。 |
錯誤訊息: |
來源執行個體未正確安裝 pglogical 套件。 | 如要進一步瞭解如何正確安裝此套件,請參閱「在來源執行個體中安裝 pglogical 套件」。 |
錯誤訊息: |
已設定的來源處於復原模式。 | 設定未處於復原模式的來源。 |
完整傾印作業速度較慢。 | AlloyDB 目的地可能會從來源資料庫匯入大量資料時速度變慢。 |
|
錯誤訊息:subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again |
遷移工作在完整傾印階段期間失敗,且無法復原。來源資料庫執行個體已重新啟動或處於復原模式,或是複本連線因 如要找出問題的根本原因,請按照下列步驟操作: |
|
錯誤訊息:ERROR: unknown column name {column_name} |
在主要節點的複本資料表中新增資料欄,但在複本節點中未新增。 |
在連續遷移期間,只有資料操縱語言 (DML) 變更會自動更新。管理資料定義語言 (DDL) 變更,讓來源和目的地資料庫保持相容,是使用者的責任,可透過兩種方式達成:
請參閱「持續遷移」,瞭解如何使用 |
錯誤訊息:ERROR: cannot truncate a table referenced in a foreign key constraint |
使用者嘗試截斷含有外鍵限制的表格。 |
請先移除外鍵限制,再截斷資料表。 |
錯誤訊息:ERROR: connection to other side has died |
由於 |
建議您提高 |
當您遷移所選資料庫,且遷移工作無法將資料複製到一個或多個資料庫時,資料庫清單中會顯示「失敗」狀態。 | 各種遷移工作錯誤。 | 在「錯誤」欄中,按一下「查看錯誤」並修正錯誤。您也可以從遷移工作中移除失敗的資料庫。 如要進一步瞭解如何從遷移工作中移除失敗的資料庫,請參閱「管理遷移工作」。 |
清理複製運算單元
您會看到下列其中一則訊息:
Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.
Error promoting EM replica: finished drop replication with errors.
可能原因
在升級 AlloyDB 例項時,如果從 AlloyDB 例項無法存取來源例項 (例如,來源例項未執行,或您已從來源例項的許可清單中移除 AlloyDB 例項),則在升級遷移工作時,無法清除複寫作業所需的設定。您必須手動清理複寫時段。
建議做法
針對每個資料庫,以具有 superuser
權限的使用者身分執行下列指令:
從錯誤訊息中取得複製運算單元名稱,然後執行下列指令,逐一放棄運算單元:
select pg_drop_replication_slot({slot_name});
-
如果錯誤訊息中沒有複製運算單元名稱,請執行下列指令,查詢現有的複製運算單元:
select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
-
如果沒有使用來源執行個體的 AlloyDB 副本,請執行下列指令來清除
pglogical
設定:select pglogical.drop_node(node_name) from pglogical.node where node_name like
'alloydb';
-
如果不再需要
pglogical
擴充功能,請執行下列指令來解除安裝擴充功能:DROP EXTENSION IF EXISTS pglogical;
在引導模式下刪除孤立的 AlloyDB 叢集
在少數極端情況下,您可能會發現遷移工作已刪除,但相關聯的 AlloyDB 叢集並未刪除,且仍處於引導模式。您可以使用 AlloyDB 的 gcloud 指令刪除叢集,並搭配 --force
選項。
請注意,如果在遷移工作使用引導叢集時刪除該叢集,會導致不明確的行為。
管理使用者和角色
遷移現有使用者
目前,資料庫遷移服務不支援將現有使用者從來源執行個體遷移至 AlloyDB 目的地執行個體。您可以在 AlloyDB 中手動建立使用者,以便管理這項遷移作業。
關於 alloydbexternalsync
使用者
在遷移期間,AlloyDB 主要資料來源中的所有物件都由 alloydbexternalsync
使用者擁有。資料遷移完成後,您可以完成下列步驟,將物件的擁有權修改為其他使用者:
- 請執行
GRANT alloydbexternalsync to {USER}
指令。 - 在每個資料庫上執行
reassign owned by alloydbexternalsync to {USER};
指令。 - 如要移除
alloydbexternalsync
使用者,請執行drop role alloydbexternalsync
指令。