

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

# 使用 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\$1apply\$1exceptions 控制資料表中 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 作為目標搭配使用的端點設定。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Target.MySQL.html)

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

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/dms/latest/userguide/CHAP_Target.MySQL.html)

或者，您可以使用 `--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 (長度)。 如果長度是從 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 支援)。  | 