使用與 MySQL 相容的資料庫做為 AWS DMS的來源 - AWS Database Migration Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用與 MySQL 相容的資料庫做為 AWS DMS的來源

您可以使用 Database Migration Service,從任何與 MySQL 相容的資料庫 (MySQL、MariaDB 或 Amazon Aurora MySQL) 遷移資料。 AWS

若要取得與 AWS DMS 支援作為來源的 MySQL 版本的相關資訊,請參閱資料來源 AWS DMS

您可以使用 SSL 加密您 MySQL 相容端點與複寫執行個體之間的連線。如需在與 MySQL 相容之端點使用 SSL 的詳細資訊,請參閱使用 SSL 搭配使用 AWS Database Migration Service

在以下各節中,「自我管理」一詞適用於安裝在內部部署或 Amazon EC2 上的任何資料庫。「AWS管理的」一詞適用於 Amazon RDS、Amazon Aurora 或 Amazon S3 上的任何資料庫。

如需使用與 MySQL 相容資料庫的其他詳細資訊 AWS DMS,請參閱下列各節。

使用 AWS DMS從 MySQL 遷移至 MySQL

對於異質遷移,您從 MySQL 以外的數據庫引擎遷移到 MySQL 數據庫,幾乎總 AWS DMS 是最好的遷移工具使用。但是對於從 MySQL 資料庫遷移至 MySQL 資料庫的同質遷移,我們建議您使用同質資料遷移專案。相較於 AWS DMS,同質資料遷移會使用原生資料庫工具,來提供更好的資料遷移效能和準確性。

使用任何與 MySQL 相容的資料庫作為來源 AWS DMS

在開始使用 MySQL 資料庫做為來源之前 AWS DMS,請確定您具有下列先決條件。這些先決條件適用於自我管理或管理的來 AWS源。

您必須擁有具有複寫管理員角色的帳戶。 AWS DMS 此角色需要以下權限:

  • REPLICATION CLIENT:僅 CDC 任務需要此權限。換句話說, full-load-only 任務不需要此權限。

  • REPLICATION SLAVE:僅 CDC 任務需要此權限。換句話說, full-load-only 任務不需要此權限。

  • SUPER:僅 MySQL 5.6.6 版以前的版本需要此權限。

AWS DMS 使用者也必須擁有指定用於複製之來源表格的 SELECT 權限。

使用自我管理的 MySQL 相容資料庫作為來源 AWS DMS

您可以使用以下自我管理 MySQL 相容資料庫做為 AWS DMS的來源:

  • MySQL Community Edition

  • MySQL Standard Edition

  • MySQL Enterprise Edition

  • MySQL Cluster Carrier Grade Edition

  • MariaDB Community Edition

  • MariaDB Enterprise Edition

  • MariaDB 資料行存放區

若要使用 CDC,請確保啟用二進位記錄。若要啟用二進位記錄,您必須在 MySQL 的 my.ini (Windows) 或 my.cnf (UNIX) 檔案中設定以下參數。

參數

Value

server_id

將此參數值設為 1 或更大。

log-bin

將路徑設定到二進位日誌檔,例如 log-bin=E:\MySql_Logs\BinLog。不要包含副檔名。

binlog_format

將此參數設為 ROW。我們建議在複寫期間進行此設定,因為在某些情況下,當將 binlog_format 設為 STATEMENT 時,可能會在將資料複寫到目標時造成不一致。將 binlog_format 設為 MIXED 時,資料庫引擎也會將類似不一致的資料寫入目標,因為資料庫引擎會自動切換到以 STATEMENT 為基礎的記錄,進而導致在目標資料庫上寫入不一致的資料。

expire_logs_days

將此參數值設為 1 或更大。為避免過度使用磁碟空間,建議您不要使用預設值 0。

binlog_checksum

NONE針對 DMS 3.4.7 版或之前的版本,將此參數設定為。

binlog_row_image

將此參數設為 FULL

log_slave_updates

如果您使用 MySQL 或 MariaDB 僅供讀取複本做為來源,請將此參數設為 TRUE

如果您的來源使用 NDB (叢集化) 資料庫引擎,即必須設定以下參數,對使用該儲存引擎的資料表啟用 CDC。將這些變更新增至 MySQL 的 my.ini (Windows) 或 my.cnf (UNIX) 檔案。

參數

Value

ndb_log_bin

將此參數設為 ON。這個值可確保叢集化資料表的變更都會記錄到二進位日誌。

ndb_log_update_as_write

將此參數設為 OFF。這個值避免在二進位日誌中將 UPDATE 陳述式編寫為 INSERT 陳述式。

ndb_log_updated_only

將此參數設為 OFF。這個值可確保二進位日誌包含整個資料列,不僅是變更的資料行。

使用 AWS受管理的 MySQL 相容資料庫做為下列項目的來源 AWS DMS

您可以使用下列 AWS受管理的 MySQL 相容資料庫做為來源: AWS DMS

  • MySQL Community Edition

  • MariaDB Community Edition

  • Amazon Aurora MySQL-Compatible Edition

使用 AWS受管理的 MySQL 相容資料庫做為的來源時 AWS DMS,請確定您具有 CDC 的下列先決條件:

  • 若要為適用於 MySQL 的 RDS 和適用於 MariaDB 的 RDS 啟用二進位日誌,請在執行個體層級啟用自動備份。若要為 Aurora MySQL 叢集啟用二進位日誌,請變更參數群組中的變數 binlog_format

    如需設定自動備份的相關資訊,請參閱《Amazon RDS 使用者指南》中的使用自動備份

    如需為 Amazon RDS for MySQL 資料庫設定二進位記錄功能的相關資訊,請參閱《Amazon RDS 使用者指南》中的設定二進位記錄格式

    如需為 Aurora MySQL 叢集設定二進位記錄的相關資訊,請參閱如何為 Amazon Aurora MySQL 叢集開啟二進位記錄功能?

  • 如果您打算使用 CDC,請開啟二進位記錄功能。如需為 Amazon RDS for MySQL 資料庫設定二進位記錄功能的相關資訊,請參閱《Amazon RDS 使用者指南》中的設定二進位記錄格式

  • 請確定二進位記錄檔可供使用 AWS DMS。由於 AWS-managed 與 MySQL 相容的資料庫會儘快清除二進位記錄檔,因此您應該增加記錄檔保持可用的時間長度。例如,執行下列命令將日誌保留期增加為 24 小時。

    call mysql.rds_set_configuration('binlog retention hours', 24);
  • binlog_format 參數設為 "ROW"

    注意

    在 MySQL 或 MariaDB 上,binlog_format 是動態參數,因此您不必重新啟動,新值便會生效。不過,新值只會套用至新的工作階段。如果您為了複寫目的而將 binlog_format 切換到 ROW,如果那些工作階段在您變更值之前已開始,則資料庫仍然可以使用 MIXED 格式建立後續的二進位日誌。這可能會導致 AWS DMS 無法正確擷取來源資料庫上的所有變更。當您變更 MariaDB 或 MySQL 資料庫上的 binlog_format 設定時,請務必重新啟動資料庫以關閉所有現有的工作階段,或重新啟動任何執行 DML (資料操作語言) 操作的應用程式。在變更binlog_format參數之後,強制資料庫重新啟動所有工作階段,以確保資料庫ROW會使用正確的格式寫入所有後續來源資料庫變更, AWS DMS 以便正確擷取這些變更。

  • binlog_row_image 參數設為 "Full"

  • 將 DMS 3.4.7 版或之前版本的binlog_checksum參數設定"NONE"為。如需在 Amazon RDS MySQL 中設定參數的詳細資訊,請參閱《Amazon RDS 使用者指南》中的使用自動備份

  • 如果您使用 Amazon RDS MySQL 或 Amazon RDS MariaDB 僅供讀取複本作為來源,則請在僅供讀取複本上啟用備份,並確保將 log_slave_updates 參數設為 TRUE

使用 MySQL 數據庫作為源代碼的限制 AWS DMS

使用 MySQL 資料庫做為來源時,請考慮下列事項:

  • 不支援 Amazon RDS MySQL 5.5 版或較舊版本的變更資料擷取 (CDC)。針對 Amazon RDS MySQL,您必須使用 5.6、5.7 或 8.0 版才能啟用 CDC。若為自我管理 MySQL 5.5 來源,則可支援 CDC。

  • 對於 CDC,CREATE TABLEADD COLUMNDROP COLUMN 變更資料欄資料類型,且支援 renaming a column。但是,不支援 DROP TABLERENAME TABLE 和對其他屬性 (例如資料欄預設值、資料欄可為 Null 性、字元集等) 進行的更新。

  • 對於來源上的分區資料表,當您將 Target 資料表準備模式設定為 [在目標上刪除資料表] 時, AWS DMS 會在 MySQL 目標上建立沒有任何分割區的簡單資料表。若要將分割資料表遷移到目標的分割資料表,請在目標 MySQL 資料庫上預先建立分割資料表。

  • 不支援使用 ALTER TABLE table_name ADD COLUMN column_name 陳述式將欄新增至資料表的開始 (FIRST) 或中間 (AFTER)。資料行一律新增到資料表結尾處。

  • 當資料表名稱包含大小寫字元,而來源引擎託管在檔案名稱不區分大小寫的作業系統上時,不支援 CDC。範例是使用 HFS+ 的 Microsoft Windows 或 OS X。

  • 您可以將 Aurora 與 MySQL 相容的版本無伺服器 v1 用於滿載,但不能將其用於 CDC。這是因為您無法滿足 MySQL 的先決條件。如需詳細資訊,請參閱參數群組和 Aurora Serverless 第 1 版

    Aurora 與 MySQL 相容的版本無伺服器 v2 支援疾病預防控制中心。

  • 資料行中的 AUTO_INCREMENT 屬性不會遷移到目標資料庫資料行。

  • 當二進位日誌不儲存在標準區塊儲存時,不支援擷取變更。例如,當二進位日誌儲存在 Amazon S3 時,CDC 不會運作。

  • AWS DMS 默認情況下,使用 InnoDB 存儲引擎創建目標表。如果您需要使用 InnoDB 以外的儲存引擎,您必須手動建立資料表,並使用 do nothing (不執行任何動做) 模式遷移到它。

  • 除非您的 DMS 移轉任務模式是遷移現有資料, AWS DMS 否則您無法使用 Aurora MySQL 複本做為來源 — 僅限滿載。

  • 如果在完全載入期間停止與 MySQL 相容的來源, AWS DMS 任務不會因錯誤停止。任務成功結束,但目標與來源可能不同步。如果發生這種情況,請重新啟動任務或重新載入受影響的資料表。

  • 不遷移建立在部分資料行值的索引。例如,目標中不會建立索引 CREATE INDEX first_ten_chars ON customer (name(10))。

  • 在某些情況下,工作會設定為不複寫 LOB (SupportLobs「在工作設定中為 false,或在工作主控台中選擇不包含 LOB 資料行)。在這些情況下, AWS DMS 不會將任何中繼資料行、長 BLOB、中等文字和長文字資料行遷移到目標。

    BLOB、TINYBLOB、TEXT 和 TINYTEXT 資料行不受影響,會遷移到目標。

  • MariaDB 來源和目標資料庫上不支援暫時時間資料表或系統版本控制的資料表。

  • 如果在兩個 Amazon RDS Aurora MySQL 叢集之間進行遷移,則 RDS Aurora MySQL 來源端點必須是讀取/寫入執行個體,而不是複本執行個體。

  • AWS DMS 目前不支援 MariaDB 的檢視遷移。

  • AWS DMS 對於 MySQL 的分區資料表,不支援 DDL 變更。若要在 CDC 期間略過分割區 DDL 變更的資料表暫停,請將 skipTableSuspensionForPartitionDdl 設為 true

  • AWS DMS 僅支援 3.5.0 及更高版本的 XA 交易。先前的版本不支援 XA 交易。 AWS DMS 在 MariaDB 10.6 版本中不支持 XA 事務。如需詳細資訊,請參閱下列 支援 XA 交易

  • AWS DMS 不使用 GTID 進行複寫,即使來源資料包含它們也是如此。

  • AWS DMS 不支持二進制日誌事務壓縮。

  • AWS DMS 不傳播刪除級聯和更新級聯使用 InnoDB 存儲引擎 MySQL 數據庫的級聯事件。對於這些事件,MySQL 不會產生 binlog 事件來反映子資料表上的梯級操作。因此, AWS DMS 無法將相應的變更複製到子資料表。如需詳細資訊,請參閱 未遷移的索引、外部索引鍵或梯級更新或刪除

  • AWS DMS 不會擷取已計算 (VIRTUALGENERATED ALWAYS) 資料行的變更。若要解決這個限制,您可以執行以下操作:

    • 在目標資料庫中預先建立目標資料表,並使用 DO_NOTHINGTRUNCATE_BEFORE_LOAD 完全載入任務設定建立 AWS DMS 任務。

    • 新增轉換規則,以從任務範圍移除計算資料欄。如需轉型規則的詳細資訊,請參閱 轉換規則與動作

支援 XA 交易

延伸架構 (XA) 交易是這種交易,可用來將來自多個交易資源的一系列操作分組為單一、可靠的全域交易。XA 交易使用兩階段遞交通訊協定。一般而言,存在開啟 XA 交易時擷取變更可能會導致資料遺失。如果資料庫不使用 XA 交易,您可以使用預設值 TRUE 忽略此許可和組態 IgnoreOpenXaTransactionsCheck。若要從具有 XA 交易的來源開始複寫,請執行下列動作:

  • 確定 AWS DMS 端點使用者具有下列權限:

    grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  • 將端點設定 IgnoreOpenXaTransactionsCheck 設為 false

注意

AWS DMS 在 MariaDB 來源資料庫 10.6 版本上不支援 XA 交易。

使用 MySQL 作為來源時的端點設定 AWS DMS

您可以使用端點設定來設定 MySQL 來源資料庫,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立來源端點時指定設定,或使用中的create-endpoint命令以 --my-sql-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。AWS CLI

下列資料表顯示您可以在將 MySQL 作為來源搭配使用的端點設定。

名稱 描述
EventsPollInterval

指定資料庫閒置時,二進位日誌之新變更/事件的檢查頻率。

預設值:5

有效值:1-60

範例:--my-sql-settings '{"EventsPollInterval": 5}'

在此範例中,每五秒 AWS DMS 檢查一次二進位記錄檔中的變更。

ExecuteTimeout

對於 AWS DMS 版本 3.4.7 及更高版本,設定 MySQL 來源端點的用戶端陳述式逾時 (以秒為單位)。

預設值:60

範例:--my-sql-settings '{"ExecuteTimeout": 1500}'

ServerTimezone

指定來源 MySQL 資料庫的時區。

範例:--my-sql-settings '{"ServerTimezone": "US/Pacific"}'

AfterConnectScript

指定要在 AWS DMS 連線到端點後立即執行的指令碼。無論 SQL 陳述式成功或失敗,遷移任務都會繼續執行。

有效值:一或多個有效的 SQL 陳述式,由分號開頭。

範例:--my-sql-settings '{"AfterConnectScript": "ALTER SESSION SET CURRENT_SCHEMA=system"}'

CleanSrcMetadataOnMismatch

發生不相符時,清除和重新建立複寫執行個體的資料表中繼資料資訊。例如,在資料表中執行更改 DDL 的情況,可能會造成在複寫執行個體的快取資料表資訊不同。布林值。

預設值:false

範例:--my-sql-settings '{"CleanSrcMetadataOnMismatch": false}'

skipTableSuspensionForPartitionDdl

AWS DMS 對於 MySQL 的分區資料表,不支援 DDL 變更。對於 3.4.6 及更高 AWS DMS 版本,將其設置為在 CDC 期間true跳過分區 DDL 更改的表格暫停。 AWS DMS 忽略 partitioned-table-related DDL,並繼續處理進一步的二進位記錄變更。

預設值:false

範例:--my-sql-settings '{"skipTableSuspensionForPartitionDdl": true}'

IgnoreOpenXaTransactionsCheck

對於 3.5.0 及更高 AWS DMS 版本,指定工作是否應在啟動時忽略開啟的 XA 交易。如果來源具有 XA 交易,請將此設為 false

預設值:true

範例:--my-sql-settings '{"IgnoreOpenXaTransactionsCheck": false}'

MySQL 的來源資料類型

下表顯示了使用時支持的 MySQL 數據庫源數據類型 AWS DMS 和 AWS DMS 數據類型的默認映射。

如需如何檢視從目標映射的資料類型資訊,請參閱您要使用的目標端點一節。

如需有關資 AWS DMS 料類型的其他資訊,請參閱AWS Database Migration Service 的資料類型

MySQL 資料類型

AWS DMS 資料類型

INT

INT4

BIGINT

INT8

MEDIUMINT

INT4

TINYINT

INT1

SMALLINT

INT2

UNSIGNED TINYINT

UINT1

UNSIGNED SMALLINT

UINT2

UNSIGNED MEDIUMINT

UINT4

UNSIGNED INT

UINT4

UNSIGNED BIGINT

UINT8

DECIMAL(10)

NUMERIC (10,0)

BINARY

BYTES(1)

BIT

BOOLEAN

BIT(64)

BYTES(8)

BLOB

BYTES(65535)

LONGBLOB

BLOB

MEDIUMBLOB

BLOB

TINYBLOB

BYTES(255)

DATE

DATE

DATETIME

DATETIME

複寫沒有括號值的 DATETIME (不含毫秒)。複寫具有括號值為 1 到 5 (例如 DATETIME(5)) 的 DATETIME (含毫秒)。

複寫 DATETIME 資料欄時,目標上的時間保持不變。其不會轉換為 UTC。

TIME

STRING

TIMESTAMP

DATETIME

複寫 TIMESTAMP 資料欄時,會將時間轉換為目標上的 UTC。

YEAR

INT2

DOUBLE

REAL8

FLOAT

REAL(DOUBLE)

如果 FLOAT 值不在以下範圍內,請使用轉換將 FLOAT 對應至 STRING。如需轉型的詳細資訊,請參閱 轉換規則與動作

支援的 FLOAT 範圍是 -1.79E+308 到 -2.23E-308、0,以及 2.23E-308 到 1.79E+308

VARCHAR (45)

WSTRING (45)

VARCHAR (2000)

WSTRING (2000)

VARCHAR (4000)

WSTRING (4000)

VARBINARY (4000)

BYTES (4000)

VARBINARY (2000)

BYTES (2000)

CHAR

WSTRING

TEXT

WSTRING

LONGTEXT

NCLOB

MEDIUMTEXT

NCLOB

TINYTEXT

WSTRING(255)

GEOMETRY

BLOB

POINT

BLOB

LINESTRING

BLOB

POLYGON

BLOB

MULTIPOINT

BLOB

MULTILINESTRING

BLOB

MULTIPOLYGON

BLOB

GEOMETRYCOLLECTION

BLOB

ENUM

WSTRING (長度)

在這裡,長度是 ENUM 中最長值的長度。

SET

WSTRING (長度)

在這裡,長度是 SET 中所有值的總長度 (包括逗號)。

JSON

CLOB

注意

在某些情況下,您可以使用值「零」 (也就是 0000-00-00),來指定 DATETIME 和 TIMESTAMP 資料類型。如果這樣做,請確定複寫任務中的目標資料庫支援 DATETIME 和 TIMESTAMP 資料類型的「零」值。否則,這些值在目標上會記錄為 null。