本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS DMS建立進行中複寫的任務
您可以建立 AWS DMS 任務,從來源資料存放區擷取正在進行的變更。您可以在遷移資料的同時執行此擷取。您也可以建立任務,在完成初始 (完全載入) 遷移到支援的目標資料存放區之後,擷取持續進行的變更。此程序稱為持續複寫或變更資料擷取 (CDC)。從來源資料存放區複寫持續變更時, AWS DMS 會使用此程序。此程序的運作方式為使用資料庫引擎的原生 API,將變更收集到資料庫日誌。
注意
您只能使用完全載入任務來遷移檢視。如果您的任務是僅限 CDC 的任務,或是在完成之後啟動 CDC 的完全載入任務,則遷移只會包含來自來源的資料表。使用僅限完全載入的任務,您可以遷移檢視或資料表和檢視的組合。如需詳細資訊,請參閱 使用 JSON 指定資料表選擇及轉換。
每個來源引擎都有特定的組態需求,用於將此變更串流公開給指定的使用者帳戶。大多數的引擎都需要一些額外設定,才能讓擷取程序以有意義的方式使用變更資料,同時不遺失資料。例如,Oracle 需要額外的增補日誌記錄,MySQL 則需要資料列層級的二進位日誌記錄 (二進位日誌記錄)。
若要從來源資料庫讀取持續變更, AWS DMS 會使用引擎特定的 API 動作,從來源引擎的交易日誌讀取變更。以下是如何 AWS DMS 執行此操作的一些範例:
-
對於 Oracle, AWS DMS 會使用 Oracle LogMiner API 或二進位讀取器 API (bfile API) 來讀取持續變更。 會根據系統變更編號 (SCN) 從線上 AWS DMS 讀取持續變更或封存重做日誌。
-
對於 Microsoft SQL Server, AWS DMS 會使用 MS-Replication 或 MS-CDC 將資訊寫入 SQL Server 交易日誌。它接著會根據記錄序號 (LSN) 使用 SQL Server 中的
fn_dblog()
或fn_dump_dblog()
函數讀取交易日誌中的變更。 -
對於 MySQL, 會從資料列型二進位日誌 (binlog) AWS DMS 讀取變更,並將這些變更遷移至目標。
-
對於 PostgreSQL, AWS DMS 會設定邏輯複寫插槽,並使用 test_decoding 外掛程式從來源讀取變更,並將其遷移至目標。
-
針對以 Amazon RDS 做為來源的情況,我們建議您確認已啟用備份來設定 CDC。我們也建議您確定來源資料庫設定的變更記錄保留時間充足,通常 24 小時就足夠了。如需每個端點的詳細設定,請參閱以下內容:
Amazon RDS for Oracle: 設定 的 AWS受管 Oracle 來源 AWS DMS。
Amazon RDS for MySQL 和 MariaDB Aurora MySQL:使用 AWS受管 MySQL 相容資料庫做為 的來源 AWS DMS。
Amazon RDS for SQL Server:設定雲端 SQL Server 資料庫執行個體的進行中複寫。
Amazon RDS for PostgreSQL SQL 和 Aurora:PostgreSQL 會自動保留所需的 WAL。
進行中複寫任務有兩種類型:
-
完全載入加上 CDC – 任務會遷移現有資料,然後根據來源資料庫的變更更新目標資料庫。
-
僅 CDC – 任務會在您於目標資料庫上擁有資料後遷移持續進行的變更。
從 CDC 起點開始執行複寫
您可以從數個點開始 AWS DMS 持續的複寫任務 (僅變更資料擷取)。這些索引標籤包括以下項目:
-
從自訂 CDC 開始時間 – 您可以使用 AWS Management Console 或 AWS CLI AWS DMS 提供您希望複寫開始的時間戳記。 AWS DMS 然後,從此自訂 CDC 開始時間開始持續複寫任務。 會將指定的時間戳記 (UTC) AWS DMS 轉換為原生起點,例如適用於 SQL Server 的 LSN 或適用於 Oracle 的 SCN。 AWS DMS 會使用引擎特定方法,根據來源引擎的變更串流來決定從何處啟動遷移任務。
注意
只有將
StartFromContext
連線屬性設定為所需的時間戳記,Db2 作為來源時才會提供自訂的 CDC 開始時間。以 PostgreSQL 做為來源則不支援自訂 CDC 啟動時間。這是因為 PostgreSQL 資料庫引擎與 Oracle 和 SQL Server 不同,沒有將時間戳記映射到 LSN 或 SCN 的方法。
-
從 CDC 原生起點 – 您也可以從來源引擎交易日誌中的原生點開始。在某些情況下,您可能偏好此方法,因為時間戳記可以在交易日誌中指出多個原生點。 AWS DMS 支援下列來源端點的此功能:
-
SQL Server
-
PostgreSQL
-
Oracle
-
MySQL
-
MariaDB
-
建立任務時, 會 AWS DMS 標記 CDC 起點,且無法變更。若要使用不同的 CDC 起點,請建立新任務。
決定 CDC 原生起點
CDC 原生起點是資料庫引擎的日誌中的一點,定義您可開始 CDC 的時間。例如,假設大量資料傾印已套用到目標。您可以尋找僅進行中複寫任務的原生起點。為避免產生資料不一致,請謹慎選擇僅複製任務的起點。DMS 會擷取在所選 CDC 起點之後啟動的交易。
以下範例說明您如何從支援的來源引擎尋找 CDC 原生起點:
- SQL Server
-
在 SQL Server 中,記錄序號 (LSN) 分成三個部分:
-
虛擬日誌檔 (VLF) 序號
-
日誌區塊的啟動位移
-
位置編號
範例 LSN 如下:
00000014:00000061:0001
若要根據您的交易日誌備份設定取得 SQL Server 遷移任務的起點,請使用 SQL Server 中的
fn_dblog()
或fn_dump_dblog()
函數。若要搭配 SQL Server 使用 CDC 原生起點,請在參與進行中複寫的任何資料表上建立發佈。當您使用 CDC 而不使用 CDC 原生起始點時, AWS DMS 會自動建立發佈。
-
- PostgreSQL
-
您可以為您的 PostgreSQL 來源資料庫使用 CDC 復原檢查點。當來源資料庫 (父項任務) 執行進行中複寫任務時,此檢查點值會在不同的時間點產生。如需整體檢查點的詳細資訊,請參閱:使用檢查點做為 CDC 起點。
若要識別要用作原生起點的檢查點,請使用資料庫
pg_replication_slots
檢視或來自 的父項任務概觀詳細資訊 AWS Management Console在主控台上尋找父項任務的概觀詳細資訊
-
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/dms/v2/
開啟 AWS DMS 主控台。 如果您以 IAM 使用者身分登入,請確認您具備適當的許可來存取 AWS DMS。如需所需許可的詳細資訊,請參閱 使用 AWS DMS所需的 IAM 許可。
-
從導覽窗格中,選擇 Database migration tasks (資料庫遷移任務)。
-
從 Database migration tasks (資料庫遷移任務) 頁面的清單中選擇您的父任務。這會開啟顯示概觀詳細資訊的父項任務頁面。
-
在 Change data capture (CDC) (變更資料擷取 (CDC))、Change data capture (CDC) start position (變更資料擷取 (CDC) 起始位置) 以及 Change data capture (CDC) recovery checkpoint (變更資料擷取 (CDC) 復原檢查點) 下尋找檢查點值。
該數值會顯示如下:
checkpoint:V1#1#000004AF/B00000D0#0#0#*#0#0
在這裡,
4AF/B00000D0
元件是您需要指定此原生 CDC 起點的元件。當您建立 CDC 任務為您的 PostgreSQL 來源在此起點開始複寫時,請將 DMS API 的CdcStartPosition
參數設定為此數值。如需使用 AWS CLI 建立此 CDC 任務的資訊,請參閱 使用 啟用 CDC 搭配 的 AWS受管 PostgreSQL 資料庫執行個體 AWS DMS。
-
- Oracle
-
系統變更編號 (SCN) 是一種 Oracle 資料庫所使用的邏輯、內部時間戳記。SCN 會將資料庫中發生的事件排序,以滿足交易的 ACID 屬性。Oracle 資料庫使用 SCN 來標記所有變更寫入磁碟的位置,以使復原動作不會套用已寫入的變更。Oracle 也會針對一組資料使用 SCN 標記不存在重做的點,以使復原能夠停止。
若要取得 Oracle 資料庫中目前的 SCN,請執行以下命令。
SELECT CURRENT_SCN FROM V$DATABASE
如果您使用 SCN 或時間戳記來啟動 CDC 工作,將會遺漏任何開啟中交易的結果,而且無法遷移這些結果。開啟中交易是指起始於任務開始位置之前,並在任務開始位置之後遞交的交易。您可以識別 SCN 和時間戳記,以便在包含所有開啟中交易的時間點啟動 CDC 工作。如需更多資訊,請參閱 Oracle 線上文件中的 Transactions (交易)
。使用 3.5.1 版和更新版本時,如果您使用 SCN 或時間戳記來啟動任務, AWS DMS 會使用 openTransactionWindow
端點設定支援僅限 CDC 任務的開放交易。使用
openTransactionWindow
設定時,您必須提供以分鐘為單位的視窗來處理開啟的交易。 會 AWS DMS 轉移擷取位置並尋找新位置以開始資料擷取。 AWS DMS 會使用新的開始位置,從必要的 Oracle 重做或封存重做日誌掃描任何開啟的交易。 - MySQL
-
在 MySQL 5.6.3 版發行之前,MySQL 的記錄序號 (LSN) 是 4 位元組不含正負號的整數。在 MySQL 5.6.3 版中,當重做日誌大小限制從 4 GB 增加至 512 GB 時,LSN 便會變成 8 位元組不含正負號的整數。該增加反映了儲存額外大小資訊所需要的額外位元組。在使用 LSN 值的 MySQL 5.6.3 及更新版本上建置的應用程式應使用 64 位元,而非 32 位元的變數來儲存及比較 LSN 值。如需 MySQL LSN 的詳細資訊,請參閱 MySQL documentation
。 若要取得 MySQL 資料庫中目前的 LSN,請執行以下命令。
mysql> show master status;
查詢會傳回一個 binlog 檔案名稱、位置,以及其他數個值。CDC 原生起點是 binlog 檔案名稱和位置的組合,例如
mysql-bin-changelog.000024:373
。在此範例中,mysql-bin-changelog.000024
是 binlogs 檔案名稱,373
是 AWS DMS 需要開始擷取變更的位置。
使用檢查點做為 CDC 起點
持續複寫任務會遷移變更,並 AWS DMS 不時 AWS DMS 快取 的特定檢查點資訊。 AWS DMS 建立的檢查點包含資訊,可讓複寫引擎了解變更串流的復原點。您可以使用檢查點來在變更的時間軸上返回,並復原失敗的遷移任務。您也可以使用檢查點針對其他目標,於任何指定的時間點啟動另一個進行中複寫任務。
您可以透過三種方式中的其中一種取得檢查點資訊:
-
執行 API 操作
DescribeReplicationTasks
並檢視結果。您可以透過任務篩選資訊並搜尋檢查點。您可以在任務處於停止或失敗狀態時擷取最新的檢查點。若任務遭到刪除,則會遺失此資訊。 -
檢視目標執行個體上名為
awsdms_txn_state
的中繼資料表。您可以查詢資料表來取得檢查點資訊。若要建立中繼資料表,請在建立任務時將TaskRecoveryTableEnabled
參數設為Yes
。此設定會導致 AWS DMS 持續將檢查點資訊寫入目標中繼資料資料表。若任務遭到刪除,則會遺失此資訊。例如,以下是中繼資料表中的範例檢查點:
checkpoint:V1#34#00000132/0F000E48#0#0#*#0#121
-
在瀏覽窗格中,選擇資料庫遷移任務,然後從 [資料庫遷移任務] 頁面上顯示的清單中選擇您的父任務。父任務頁面隨即開啟,顯示概觀詳細資訊。在 Change data capture (CDC) (變更資料擷取 (CDC))、Change data capture (CDC) start position (變更資料擷取 (CDC) 起始位置) 以及 Change data capture (CDC) recovery checkpoint (變更資料擷取 (CDC) 復原檢查點) 下尋找檢查點值。該檢查點值會顯示如下:
checkpoint:V1#1#000004AF/B00000D0#0#0#*#0#0
在遞交或伺服器時間點停止任務
隨著 CDC 原生起點的推出, AWS DMS 也可以在下列時間點停止任務:
-
來源上的遞交時間
-
複寫執行個體上的伺服器時間
您可以視需要修改任務及設定時間 (格式為 UTC)。任務會根據您設定的遞交或伺服器時間自動停止。或者,若您知道在建立任務時停止遷移任務的適當時間,您也可以在建立任務時設定停止時間。
注意
當您第一次啟動新的無 AWS DMS 伺服器複寫時,初始化所有資源最多可能需要 40 分鐘。請注意,server_time
選項只有在資源初始化完成後才適用。
執行雙向複寫
您可以使用 AWS DMS 任務在兩個系統之間執行雙向複寫。在「雙向複寫」中,您可以從兩個系統之間的相同資料表 (或一組資料表) 以兩個方向複寫資料。
例如,您可以將 EMPLOYEE 資料表從資料庫 A 複製到資料庫 B,並將資料庫 A 的變更複寫到資料庫 B。您也可以將 EMPLOYEE 資料表的變更從資料庫 B 複寫回 A。因此,您執行的是雙向複製。
注意
AWS DMS 雙向複寫不適用於完整多主機解決方案,包括主節點、衝突解決等。
針對不同節點上的資料在操作上分離的情況,請使用雙向複寫。換句話說,假設您有一個資料元素由節點 A 上操作的應用程式所變更,而且節點 A 與節點 B 執行雙向複寫。則節點 A 上的資料元素永遠不會被節點 B 上操作的任何應用程式所變更。
AWS DMS 支援在這些資料庫引擎上進行雙向複寫:
-
Oracle
-
SQL Server
-
MySQL
-
PostgreSQL
-
Amazon Aurora MySQL-Compatible Edition
-
Amazon PostgreSQL-Compatible Edition
建立雙向複寫任務
若要啟用雙向複寫,請設定資料庫 (A AWS DMS 和 B) 的來源和目標端點。例如,設定資料庫 A 的來源端點、資料庫 B 的來源端點、資料庫 A 的目標端點和資料庫 B 的目標端點。
然後建立兩個任務:一個任務讓來源 A 將資料移至目標 B,另一個任務讓來源 B 將資料移至目標 A。此外,請確定每個任務都已設定迴路預防。這樣做可以防止將相同的變更套用至兩個任務的目標,而不致損毀至少其中一個任務的資料。如需詳細資訊,請參閱防止迴路。
最簡單的方法是從資料庫 A 和資料庫 B 上的相同資料集開始,然後建立兩個僅 CDC 任務,一個將資料從 A 複寫到 B 的任務,另一個將資料從 B 複寫到 A 的任務。
若要使用 AWS DMS 從節點 A 在節點 B 上執行個體化新的資料集 (資料庫),請執行下列動作:
-
使用完整載入和 CDC 任務將資料從資料庫 A 移至 B。請確定在此期間沒有任何應用程式修改資料庫 B 上的資料。
-
當完整載入完成並在允許應用程式修改資料庫 B 上的資料之前,請注意資料庫 B 的時間或 CDC 起始位置。如需指示,請參閱從 CDC 起點開始執行複寫。
-
使用此起始時間或 CDC 起始位置,建立一個僅 CDC 任務將資料從資料庫 B 移回 A。
注意
雙向對中只有一個任務可以完整載入和 CDC。
防止迴路
若要顯示防止循環,假設任務 T1 AWS DMS 會從來源資料庫 A 讀取變更日誌,並將變更套用至目標資料庫 B。
接下來,第二項任務 T2 從來源資料庫 B 讀取變更日誌,並將它們套用回目標資料庫 A。在 T2 執行這項操作之前,DMS 必須確定從來源資料庫 A 對目標資料庫 B 所做的相同變更不會對來源資料庫 A 進行。換句話說,DMS 必須確定這些變更不會回應 (循環) 回目標資料庫 A。否則,資料庫 A 中的資料可能會損毀。
若要防止變更迴路,請將下列任務設定新增至每個雙向複寫任務。這樣做可確保任一方向都不會發生迴路資料損毀。
{ . . . "LoopbackPreventionSettings": { "EnableLoopbackPrevention":
Boolean
, "SourceSchema":String
, "TargetSchema":String
}, . . . }
LoopbackPreventionSettings
任務設定會判斷交易是新的還是來自相反複寫任務的回應。當 AWS DMS
將交易套用至目標資料庫時,它會以變更的指示更新 DMS 資料表 (awsdms_loopback_prevention
)。在將每個交易套用至目標之前,DMS 會忽略包含此 awsdms_loopback_prevention
資料表參考的任何交易。因此,它不會套用變更。
將這些任務設定包含在雙向配對中的每個複寫任務。這些設定可啟用迴路預防。它們也會為包含每個端點之 awsdms_loopback_prevention
資料表的任務中的每個來源和目標資料庫指定結構描述。
若要讓每個任務都能夠識別此類回應並加以捨棄,請將 EnableLoopbackPrevention
設定為 true
。若要在包含 awsdms_loopback_prevention
的來源指定結構描述,請將 SourceSchema
設定為來源資料庫中該結構描述的名稱。若要在包含相同資料表的目標指定結構描述,請將 TargetSchema
設定為目標資料庫中該結構描述的名稱。
在以下範例中,複寫任務 T1 及其相反複製任務 T2 的SourceSchema
和 TargetSchema
設定是以相反的設定指定的。
任務 T1 的設定如下。
{ . . . "LoopbackPreventionSettings": { "EnableLoopbackPrevention": true, "SourceSchema": "LOOP-DATA", "TargetSchema": "loop-data" }, . . . }
相反任務 T2 的設定如下。
{ . . . "LoopbackPreventionSettings": { "EnableLoopbackPrevention": true, "SourceSchema": "loop-data", "TargetSchema": "LOOP-DATA" }, . . . }
注意
使用 時 AWS CLI,請僅使用 create-replication-task
或 modify-replication-task
命令,在雙向複寫任務LoopbackPreventionSettings
中設定 。
雙向複寫的限制
的雙向複寫 AWS DMS 有下列限制:
-
迴路預防只會追蹤資料處理語言 (DML) 陳述式。 AWS DMS 不支援防止資料定義語言 (DDL) 迴路。若要這麼做,請在雙向對中設定其中一個任務,篩選出 DDL 陳述式。
-
使用迴路預防的任務不支援批次遞交變更。若要設定具有迴路預防的任務,請確定將
BatchApplyEnabled
設定為false
。 -
DMS 雙向複寫不包括衝突偵測或解決方法。若要偵測資料不一致,請在這兩項任務上使用資料驗證。