

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

# 使用 MySQL 相容資料庫做為 的目標 AWS Database Migration Service
<a name="CHAP_Target.MySQL"></a>

您可以從 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](CHAP_Security.SSL.md)。

如需 AWS DMS 支援做為目標的 MySQL 版本資訊，請參閱 [的目標 AWS DMS](CHAP_Introduction.Targets.md)。

您可以使用下列 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 (不執行任何動作)** 選項遷移資料表。如需詳細資訊，請參閱[完全載入任務設定](CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.md)。

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

**Topics**
+ [使用任何 MySQL 相容資料庫做為 的目標 AWS Database Migration Service](#CHAP_Target.MySQL.Prerequisites)
+ [使用 MySQL 相容資料庫做為 目標的限制 AWS Database Migration Service](#CHAP_Target.MySQL.Limitations)
+ [使用 MySQL 相容資料庫做為 目標時的端點設定 AWS DMS](#CHAP_Target.MySQL.ConnectionAttrib)
+ [MySQL 的目標資料類型](#CHAP_Target.MySQL.DataTypes)

## 使用任何 MySQL 相容資料庫做為 的目標 AWS Database Migration Service
<a name="CHAP_Target.MySQL.Prerequisites"></a>

開始使用與 MySQL 相容之資料庫做為 AWS DMS的目標之前，請務必完成以下事前準備：
+ 將具有 MySQL 相容資料庫讀取/寫入權限 AWS DMS 的使用者帳戶提供給 。若要建立必要的權限，請執行下列命令。

  ```
  CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>';
  GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES  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
<a name="CHAP_Target.MySQL.Limitations"></a>

使用 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](https://docs.aws.amazon.com//AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html)。
+ AWS DMS 不支援使用 Aurora 或 Amazon RDS 的讀取器端點，除非執行個體處於可寫入模式，也就是 `read_only`和 `innodb_read_only` 參數設定為 `0`或 `OFF`。如需有關使用 Amazon RDS 和 Aurora 作為目標的詳細資訊，請參閱下列內容：
  +  [判斷您連接的資料庫執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.BestPractices.html#AuroraMySQL.BestPractices.DeterminePrimaryInstanceConnection) 
  +  [使用 MySQL 更新僅供讀取複本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.Updates) 
+ 複寫 TIME 資料類型時，不會複寫部分時間值。
+ 使用額外連線屬性 複寫 TIME 資料類型時`loadUsingCSV=false`，時間值上限為範圍 `[00:00:00, 23:59:59]`。

## 使用 MySQL 相容資料庫做為 目標時的端點設定 AWS DMS
<a name="CHAP_Target.MySQL.ConnectionAttrib"></a>

您可以使用端點設定來設定 MySQL 相容目標資料庫，類似於使用額外的連線屬性。當您使用 AWS DMS 主控台或使用 中的 `create-endpoint`命令搭配 `--my-sql-settings '{"{{EndpointSetting"}}: {{"value"}}, {{...}}}'` JSON 語法來建立目標端點時[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)，您可以指定設定。

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


| 名稱 | 描述 | 
| --- | --- | 
| `ConnectionTimeout` | 使用此額外的連線屬性 (ECA)，以秒為單位設定 MySQL 執行個體的端點連線逾時。預設值為 10 秒。ECA 範例：`ConnectionTimeout=30`。 | 
| ` TargetDbType` | 指定來源資料表遷移的目標位置，單一資料庫或多個資料庫。如果您指定 `SPECIFIC_DATABASE`，則需要在使用 AWS CLI 或 時指定資料庫名稱 AWS 管理主控台。<br />預設值：`MULTIPLE_DATABASES`<br />有效值：{`SPECIFIC_DATABASE`、`MULTIPLE_DATABASES`} <br />範例：`--my-sql-settings '{"TargetDbType": "MULTIPLE_DATABASES"}'` | 
| `ParallelLoadThreads` | 將資料載入與 MySQL 相容的目標資料庫時提升效能。指定使用多少個執行緒將資料載入到與 MySQL 相容的目標資料庫。設定大量執行緒會對資料庫效能造成負面影響，因為每個執行緒都需要單獨的連線。<br />預設值：1 <br />有效值：1–5 <br />範例：`--my-sql-settings '{"ParallelLoadThreads": 1}'` | 
| `AfterConnectScript` | 指定 AWS DMS 連線到端點後立即執行的指令碼。<br />例如，您可以指定 MySQL 相容目標應該使用 latin1 字元集轉譯收到的陳述式，latin1 字元集是資料庫預設的編譯字元集。從 UTF8 用戶端轉換時，此參數通常可以提升效能。<br />範例：`--my-sql-settings '{"AfterConnectScript": "SET character_set_connection='latin1'"}'` | 
| `MaxFileSize` | 針對用於將資料傳輸到 MySQL 相容資料庫的任何 .csv 檔案，指定其大小上限 (KB)。<br />預設值：32,768 KB (32 MB)<br />有效值：1–1,048,576<br />`--my-sql-settings '{"MaxFileSize": 512}'` | 

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

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


| 名稱 | 描述 | 
| --- | --- | 
| `Initstmt=SET FOREIGN_KEY_CHECKS=0;` | 停用外部索引鍵檢查。<br />範例：`--extra-connection-attributes "Initstmt=SET FOREIGN_KEY_CHECKS=0;"` | 
| `Initstmt=SET time_zone` | 指定目標 MySQL 相容資料庫的時區。<br />預設值：UTC <br />有效值：目標 MySQL 資料庫中可用的時區名稱。<br />範例：`--extra-connection-attributes "Initstmt=SET time_zone={{US/Pacific}};"` | 

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

## MySQL 的目標資料類型
<a name="CHAP_Target.MySQL.DataTypes"></a>

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

如需 AWS DMS 資料類型的詳細資訊，請參閱 [AWS Database Migration Service 的資料類型](CHAP_Reference.DataTypes.md)。


|  AWS DMS 資料類型  |  MySQL 資料類型  | 
| --- | --- | 
| BOOLEAN | BOOLEAN | 
| BYTES | 如果長度是從 1 到 65,535，則使用 VARBINARY (長度)。<br />如果長度是從 65,536 到 2,147,483,647，則使用 LONGLOB。 | 
| DATE | DATE | 
| TIME | TIME | 
| TIMESTAMP | 「如果擴展 => 0 且 =< 6，則：DATETIME (擴展)<br />如果擴展 => 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 (長度)。<br />如果長度是從 21,846 到 2,147,483,647，則使用 LONGTEXT。 | 
| UINT1 | UNSIGNED TINYINT | 
| UINT2 | UNSIGNED SMALLINT | 
| UINT4 | UNSIGNED INTEGER | 
| UINT8 | UNSIGNED BIGINT | 
| WSTRING | 如果長度是從 1 到 32,767，則使用 VARCHAR (長度)。<br />如果長度是從 32,768 到 2,147,483,647，則使用 LONGTEXT。 | 
| BLOB | 如果長度是從 1 到 65,535，則使用 BLOB。<br />如果長度是從 65,536 到 2,147,483,647，則使用 LONGBLOB。<br />如果長度為 0，則使用 LONGBLOB (完整的 LOB 支援)。 | 
| NCLOB | 如果長度是從 1 到 65,535，則使用 TEXT。<br />如果長度是從 65,536 到 2,147,483,647，則使用 LONGTEXT 加適用於 CHARACTER SET 的 ucs2。<br />如果長度為 0，則使用 LONGTEXT (完整 LOB 支援) 加適用於 CHARACTER SET 的 ucs2。 | 
| CLOB | 如果長度是從 1 到 65,535，則使用 TEXT。<br />如果長度是從 65,536 到 2147483647，則使用 LONGTEXT。<br />如果長度為 0，則使用 LONGTEXT (完整的 LOB 支援)。 | 