本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用與 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 |
---|---|
|
將此參數值設為 1 或更大。 |
|
將路徑設定到二進位日誌檔,例如 |
|
將此參數設為 |
|
將此參數值設為 1 或更大。為避免過度使用磁碟空間,建議您不要使用預設值 0。 |
|
|
|
將此參數設為 |
|
如果您使用 MySQL 或 MariaDB 僅供讀取複本做為來源,請將此參數設為 |
如果您的來源使用 NDB (叢集化) 資料庫引擎,即必須設定以下參數,對使用該儲存引擎的資料表啟用 CDC。將這些變更新增至 MySQL 的 my.ini
(Windows) 或 my.cnf
(UNIX) 檔案。
參數 |
Value |
---|---|
|
將此參數設為 |
|
將此參數設為 |
|
將此參數設為 |
使用 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 TABLE
、ADD COLUMN
和DROP COLUMN
變更資料欄資料類型,且支援renaming a column
。但是,不支援DROP TABLE
、RENAME TABLE
和對其他屬性 (例如資料欄預設值、資料欄可為 Null 性、字元集等) 進行的更新。 -
對於來源上的分區資料表,當您將 Target 資料表準備模式設定為 [在目標上刪除資料表] 時, AWS DMS 會在 MySQL 目標上建立沒有任何分割區的簡單資料表。若要將分割資料表遷移到目標的分割資料表,請在目標 MySQL 資料庫上預先建立分割資料表。
-
不支援使用
ALTER TABLE
陳述式將欄新增至資料表的開始 (FIRST) 或中間 (AFTER)。資料行一律新增到資料表結尾處。table_name
ADD COLUMNcolumn_name
-
當資料表名稱包含大小寫字元,而來源引擎託管在檔案名稱不區分大小寫的作業系統上時,不支援 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 不會擷取已計算 (
VIRTUAL
和GENERATED ALWAYS
) 資料行的變更。若要解決這個限制,您可以執行以下操作:在目標資料庫中預先建立目標資料表,並使用
DO_NOTHING
或TRUNCATE_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 '{"
JSON 語法指定設定。AWS CLIEndpointSetting"
:
"value"
, ...
}'
下列資料表顯示您可以在將 MySQL 作為來源搭配使用的端點設定。
名稱 | 描述 |
---|---|
EventsPollInterval |
指定資料庫閒置時,二進位日誌之新變更/事件的檢查頻率。 預設值:5 有效值:1-60 範例: 在此範例中,每五秒 AWS DMS 檢查一次二進位記錄檔中的變更。 |
ExecuteTimeout |
對於 AWS DMS 版本 3.4.7 及更高版本,設定 MySQL 來源端點的用戶端陳述式逾時 (以秒為單位)。 預設值:60 範例: |
ServerTimezone |
指定來源 MySQL 資料庫的時區。 範例: |
AfterConnectScript |
指定要在 AWS DMS 連線到端點後立即執行的指令碼。無論 SQL 陳述式成功或失敗,遷移任務都會繼續執行。 有效值:一或多個有效的 SQL 陳述式,由分號開頭。 範例: |
CleanSrcMetadataOnMismatch
|
發生不相符時,清除和重新建立複寫執行個體的資料表中繼資料資訊。例如,在資料表中執行更改 DDL 的情況,可能會造成在複寫執行個體的快取資料表資訊不同。布林值。 預設值: 範例: |
skipTableSuspensionForPartitionDdl
|
AWS DMS 對於 MySQL 的分區資料表,不支援 DDL 變更。對於 3.4.6 及更高 AWS DMS 版本,將其設置為在 CDC 期間 預設值: 範例: |
IgnoreOpenXaTransactionsCheck
|
對於 3.5.0 及更高 AWS DMS 版本,指定工作是否應在啟動時忽略開啟的 XA 交易。如果來源具有 XA 交易,請將此設為 預設值: 範例: |
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 資料欄時,目標上的時間保持不變。其不會轉換為 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 ( 在這裡, |
SET |
WSTRING ( 在這裡, |
JSON |
CLOB |
注意
在某些情況下,您可以使用值「零」 (也就是 0000-00-00),來指定 DATETIME 和 TIMESTAMP 資料類型。如果這樣做,請確定複寫任務中的目標資料庫支援 DATETIME 和 TIMESTAMP 資料類型的「零」值。否則,這些值在目標上會記錄為 null。