使用 My SQL相容的資料庫作為 的來源 AWS DMS - AWS 資料庫遷移服務

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

使用 My SQL相容的資料庫作為 的來源 AWS DMS

您可以使用資料庫遷移 AWS 服務從任何SQL與 My 相容的資料庫遷移資料 (我的 、SQLMariaDB 或 Amazon Aurora My SQL)。

如需有關 AWS DMS 支援作為來源的 MySQL 版本的資訊,請參閱 的來源 AWS DMS

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

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

如需使用 My SQL相容的資料庫和 的其他詳細資訊 AWS DMS,請參閱下列章節。

使用 從 MySQL 遷移至 MySQL AWS DMS

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

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

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

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

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

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

  • SUPER – 只有 5.6.6 之前的我的SQL版本才需要此權限。

AWS DMS 使用者也必須擁有指定用於複寫的來源資料表SELECT的權限。

如果您使用 My SQL特定預遷移評估,請授予下列權限。

grant select on mysql.user to <dms_user>; grant select on mysql.db to <dms_user>; grant select on mysql.tables_priv to <dms_user>; grant select on mysql.role_edges to <dms_user> #only for MySQL version 8.0.11 and higher

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

您可以使用下列自我管理的 My SQL相容的資料庫作為 的來源 AWS DMS:

  • 我的SQL Community Edition

  • 我的SQL標準版本

  • 我的SQL Enterprise Edition

  • 我的SQL Cluster Carrier 等級版本

  • MariaDB Community Edition

  • MariaDB Enterprise Edition

  • MariaDB 資料行存放區

若要使用 CDC,請務必啟用二進位記錄。若要啟用二進位記錄,必須在我的 SQLmy.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 3.4.7 版或更舊DMS版本將此參數設定為 。

binlog_row_image

將此參數設為 FULL

log_slave_updates

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

如果您使用 MySQL 或 MariaDB 僅供讀取複本作為使用遷移現有資料的DMS遷移任務來源,並複寫進行中的變更模式,則可能會遺失資料。 DMS 不會在完全載入期間或在CDC下列情況下寫入交易:

  • 在DMS任務開始之前,交易已提交至主要執行個體。

  • 在DMS任務開始之前,交易尚未遞交給複本,因為主要執行個體與複本之間存在延遲。

主要執行個體與複本之間的延遲越長,資料遺失的可能性就越大。

如果您的來源使用 NDB(叢集式) 資料庫引擎,則必須設定下列參數,以便在使用該儲存引擎的資料表CDC上啟用 。在我的 SQLmy.ini(Windows) 或 my.cnf(UNIX) 檔案中新增這些變更。

參數

Value

ndb_log_bin

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

ndb_log_update_as_write

將此參數設為 OFF。此值可防止將UPDATE陳述式寫入二進位日誌中的INSERT陳述式。

ndb_log_updated_only

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

使用 AWS受管 My SQL相容的資料庫作為 的來源 AWS DMS

您可以使用下列 AWS受管 My SQL相容的資料庫作為 的來源 AWS DMS:

  • 我的SQL Community Edition

  • MariaDB Community Edition

  • Amazon Aurora My SQL-Compatible Edition

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

  • 若要為 RDS MySQL 啟用二進位日誌,以及為 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受管 My SQL相容的資料庫會盡快清除二進位日誌,因此您應該增加日誌保持可用的時間長度。例如,執行下列命令將日誌保留期增加為 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"

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

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

使用 MySQL 資料庫作為 來源的限制 AWS DMS

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

  • Amazon RDS MySQL 5.5 或更低版本不支援變更資料擷取 (CDC)。對於 Amazon RDS My SQL,您必須使用 5.6、5.7 或 8.0 版來啟用 CDC。CDC 支援自我管理的 MySQL 5.5 來源。

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

  • 對於來源上的分割資料表,當您將目標資料表準備模式設定為在目標 上捨棄資料表時, 會 AWS DMS 建立簡單的資料表,而我的SQL目標上沒有任何分割區。若要將分割資料表遷移至目標上的分割資料表,請在目標我的SQL資料庫上預先建立分割資料表。

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

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

  • 您可以使用 Aurora My SQL-Compatible Edition Serverless v1 進行完整載入,但無法將其用於 CDC。這是因為您無法為我的 啟用先決條件SQL。如需詳細資訊,請參閱參數群組和 Aurora Serverless 第 1 版

    Aurora My SQL-Compatible Edition Serverless v2 支援 CDC。

  • 資料欄上的 AUTO_INCREMENT 屬性不會遷移至目標資料庫資料欄。

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

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

  • 除非DMS遷移任務模式是遷移現有資料, AWS DMS 否則您無法將 Aurora MySQL 複本用作 的來源 — 僅限完整載入。

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

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

  • 在某些情況下,任務設定為不複寫 LOBs(任務設定中的「SupportLobs」為 false,或在任務主控台中選擇不包含LOB資料欄)。在這些情況下, AWS DMS 不會將任何 MEDIUMBLOB、LONGBLOB、 MEDIUMTEXT和 LONGTEXT資料欄遷移至目標。

    BLOB、TEXT、 TINYBLOB和 TINYTEXT資料欄不受影響,且會遷移至目標。

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

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

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

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

  • AWS DMS 僅支援 3.5.0 版和更新版本的 XA 交易。舊版不支援 XA 交易。 AWS DMS 不支援 MariaDB 10.6 版中的 XA 交易。如需詳細資訊,請參閱下列 支援 XA 交易

  • AWS DMS 即使來源資料包含它們, 也不會GTIDs用於複寫。

  • AWS DMS 不支援 Aurora MySQL 增強的二進位日誌。

  • AWS DMS 不支援二進位日誌交易壓縮。

  • AWS DMS 不會使用 InnoDB 儲存引擎傳播我的SQL資料庫的 ON DELETECASCADE和 ON UPDATECASCADE事件。對於這些事件,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 Source 資料庫 10.6 版上的 XA 交易。

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

您可以使用端點設定來設定我的SQL來源資料庫,類似於使用額外的連線屬性。使用 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

對於 3.4.7 版和更新 AWS DMS 版本, 會以秒為單位設定我的SQL來源端點的用戶端陳述式逾時。

預設值:60

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

ServerTimezone

指定來源我的SQL資料庫的時區。

範例:--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 不支援對我的 的分割資料表進行DDL變更SQL。對於 3.4.6 版和更新 AWS DMS 版本,請將此設定為true略過 期間分割區DDL變更的資料表暫停CDC。 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}'

My 的來源資料類型SQL

下表顯示使用 時支援的我的SQL資料庫來源資料類型, AWS DMS 以及來自 AWS DMS 資料類型的預設映射。

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

如需 AWS DMS 資料類型的詳細資訊,請參閱 AWS Database Migration Service 的資料類型

我的SQL資料類型

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 沒有括號值的複寫不會有毫秒。DATETIME 括號值為 1 到 5 (例如 DATETIME(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 (length)

在此,length 是 中最長值的長度ENUM。

SET

WSTRING (length)

在此,length 是 中所有值的總長度SET,包括逗號。

JSON

CLOB

注意

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