使用與 MySQL 相容的資料庫做為 AWS Database Migration Service的目標 - AWS 資料庫遷移服務

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

使用與 MySQL 相容的資料庫做為 AWS Database Migration Service的目標

您可以從 AWS DMS 支援的任何來源資料引擎 AWS DMS,使用 將資料遷移至任何 MySQL 相容資料庫。如果您要遷移至內部部署 MySQL 相容資料庫,則 AWS DMS 需要您的來源引擎位於 AWS 生態系統中。引擎可以採用 AWS Amazon RDS、Amazon Aurora 或 Amazon S3 等受管服務。或者,引擎可以在 Amazon EC2 的自我管理資料庫中。

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

如需 AWS DMS 支援作為目標的 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 資料行存放區

  • Amazon Aurora MySQL

注意

根據預設,無論來源儲存引擎為何 (MyISAM、MEMORY 等等), AWS DMS 會建立與 MySQL 相容的目標資料表做為 InnoDB 表。

如果您在 InnoDB 外還需要一份儲存引擎中的資料表,您可以在與 MySQL 相容的目標中手動建立資料表,並使用 Do nothing (不執行任何動作) 選項遷移資料表。如需詳細資訊,請參閱完全載入任務設定

如需使用與 MySQL 相容之資料庫做為 AWS DMS目標的其他詳細資訊,請參閱以下各節。

使用任何 MySQL 相容資料庫做為 的目標 AWS Database Migration Service

開始使用與 MySQL 相容之資料庫做為 AWS DMS的目標之前,請務必完成以下事前準備:

  • 將具有 MySQL 相容資料庫讀取/寫入權限 AWS DMS 的使用者帳戶提供給 。若要建立必要的權限,請執行下列命令。

    CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>'; GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT ON <schema>.* TO '<user acct>'@'%'; GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  • 在完全載入遷移階段,您必須停用您目標資料表的外部索引鍵。若要在完全載入期間停用 MySQL 相容資料庫上的外部金鑰檢查,您可以將下列命令新增至目標端點 AWS DMS 主控台的額外連線屬性區段。

    Initstmt=SET FOREIGN_KEY_CHECKS=0;
  • 設定資料庫參數 local_infile = 1 以讓 AWS DMS 將資料載入目標資料庫。

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

    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

使用 MySQL 相容資料庫做為 目標的限制 AWS Database Migration Service

使用 MySQL 資料庫做為目標時, AWS DMS 不支援下列項目:

  • 資料定義語言 (DDL) 陳述式 TRUNCATE PARTITION、DROP TABLE 和 RENAME TABLE。

  • 使用 ALTER TABLE table_name ADD COLUMN column_name 陳述式將資料欄新增至資料表的開頭或中間。

  • 在完全載入任務中將資料載入至 MySQL 相容目標時, AWS DMS 不會報告任務日誌中的限制條件所造成的錯誤,這可能會導致重複的金鑰錯誤或與記錄數量不相符。這是由 MySQL 使用 LOAD DATA 命令處理本機資料的方式所引起。在完全載入階段,請務必執行下列操作:

    • 停用限制

    • 使用 AWS DMS 驗證來確保資料一致。

  • 當您將資料行值更新為現有的值時,與 MySQL 相容的資料庫會傳回 0 rows affected 警告。雖然在技術上此行為不算錯誤,但這和其他資料庫引擎處理此情況的方法不同。例如,Oracle 會執行一個資料列的更新。對於與 MySQL 相容的資料庫, 會在 awsdms_apply_exceptions 控制資料表中 AWS DMS 產生項目,並記錄下列警告。

    Some changes from the source database had no impact when applied to the target database. See awsdms_apply_exceptions table for details.
  • Aurora Serverless 可作為 Amazon Aurora 第 2 版的目標 (與 MySQL 5.7 版相容)。(選取 Aurora MySQL 2.07.1 版,以便使用與 MySQL 5.7 相容的 Aurora Serverless。) 如需 Aurora Serverless 的詳細資訊,請參閱《Amazon Aurora 使用者指南》中的使用 Aurora Serverless v2

  • AWS DMS 不支援使用 Aurora 或 Amazon RDS 的讀取器端點,除非執行個體處於可寫入模式,也就是 read_onlyinnodb_read_only 參數設定為 0OFF。如需有關使用 Amazon RDS 和 Aurora 作為目標的詳細資訊,請參閱下列內容:

使用 MySQL 相容資料庫做為 目標時的端點設定 AWS DMS

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

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

名稱 描述

TargetDbType

指定來源資料表遷移的目標位置,單一資料庫或多個資料庫。如果您指定 SPECIFIC_DATABASE,則需要在使用 AWS CLI 或 時指定資料庫名稱 AWS Management Console。

預設值:MULTIPLE_DATABASES

有效值:{SPECIFIC_DATABASEMULTIPLE_DATABASES}

範例:--my-sql-settings '{"TargetDbType": "MULTIPLE_DATABASES"}'

ParallelLoadThreads

將資料載入與 MySQL 相容的目標資料庫時提升效能。指定使用多少個執行緒將資料載入到與 MySQL 相容的目標資料庫。設定大量執行緒會對資料庫效能造成負面影響,因為每個執行緒都需要單獨的連線。

預設值:1

有效值:1–5

範例:--my-sql-settings '{"ParallelLoadThreads": 1}'

AfterConnectScript

指定 AWS DMS 連線到端點後立即執行的指令碼。

例如,您可以指定 MySQL 相容目標應該使用 latin1 字元集轉譯收到的陳述式,latin1 字元集是資料庫預設的編譯字元集。從 UTF8 用戶端轉換時,此參數通常可以提升效能。

範例:--my-sql-settings '{"AfterConnectScript": "SET character_set_connection='latin1'"}'

MaxFileSize

針對用於將資料傳輸到 MySQL 相容資料庫的任何 .csv 檔案,指定其大小上限 (KB)。

預設值:32,768 KB (32 MB)

有效值:1–1,048,576

--my-sql-settings '{"MaxFileSize": 512}'

您也可以使用額外連線屬性設定 MySQL 相容目標資料庫。

下表顯示以 MySQL 作為目標時可使用的額外連線屬性。

名稱 描述

Initstmt=SET FOREIGN_KEY_CHECKS=0;

停用外部索引鍵檢查。

範例:--extra-connection-attributes "Initstmt=SET FOREIGN_KEY_CHECKS=0;"

Initstmt=SET time_zone

指定目標 MySQL 相容資料庫的時區。

預設值:UTC

有效值:目標 MySQL 資料庫中可用的時區名稱。

範例:--extra-connection-attributes "Initstmt=SET time_zone=US/Pacific;"

或者,您可以使用 --my-sql-settings 命令的 AfterConnectScript 參數,來停用外部索引鍵檢查,並指定資料庫的時區。

MySQL 的目標資料類型

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

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

AWS DMS 資料類型

MySQL 資料類型

BOOLEAN

BOOLEAN

BYTES

如果長度是從 1 到 65,535,則使用 VARBINARY (長度)。

如果長度是從 65,536 到 2,147,483,647,則使用 LONGLOB。

DATE

DATE

TIME

TIME

TIMESTAMP

「如果擴展 => 0 且 =< 6,則:DATETIME (擴展)

如果擴展 => 7 且 =< 9,則:VARCHAR (37)」

INT1

TINYINT

INT2

SMALLINT

INT4

INTEGER

INT8

BIGINT

NUMERIC

DECIMAL (p,s)

REAL4

FLOAT

REAL8

DOUBLE PRECISION

STRING

如果長度是從 1 到 21,845,則使用 VARCHAR (長度)。

如果長度是從 21,846 到 2,147,483,647,則使用 LONGTEXT。

UINT1

UNSIGNED TINYINT

UINT2

UNSIGNED SMALLINT

UINT4

UNSIGNED INTEGER

UINT8

UNSIGNED BIGINT

WSTRING

如果長度是從 1 到 32,767,則使用 VARCHAR (長度)。

如果長度是從 32,768 到 2,147,483,647,則使用 LONGTEXT。

BLOB

如果長度是從 1 到 65,535,則使用 BLOB。

如果長度是從 65,536 到 2,147,483,647,則使用 LONGBLOB。

如果長度為 0,則使用 LONGBLOB (完整的 LOB 支援)。

NCLOB

如果長度是從 1 到 65,535,則使用 TEXT。

如果長度是從 65,536 到 2,147,483,647,則使用 LONGTEXT 加適用於 CHARACTER SET 的 ucs2。

如果長度為 0,則使用 LONGTEXT (完整 LOB 支援) 加適用於 CHARACTER SET 的 ucs2。

CLOB

如果長度是從 1 到 65,535,則使用 TEXT。

如果長度是從 65,536 到 2147483647,則使用 LONGTEXT。

如果長度為 0,則使用 LONGTEXT (完整的 LOB 支援)。