

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

# 使用 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)
+ [Aurora MySQL 8.4 目標的考量事項](#CHAP_Target.MySQL.AuroraMySQL84)
+ [使用 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
  ```

## Aurora MySQL 8.4 目標的考量事項
<a name="CHAP_Target.MySQL.AuroraMySQL84"></a>

Aurora MySQL 8.4 引入可能影響 AWS DMS 目標端點連線的安全變更。將 Aurora MySQL 目標升級至 8.4 版之前，請先檢閱下列項目。

**TLS 強制執行**

Aurora MySQL 8.4 `ON` 預設`require_secure_transport`設定為 ，這表示所有連線都必須使用 TLS。如果您的 AWS DMS 目標端點連線至 Aurora MySQL 8.4，且 SSL 模式設定為**無**，則連線將被拒絕。如果您的端點 SSL 模式設定為**無**，您會收到下列錯誤：`MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON`。將端點 SSL 模式設定為 **verify-ca** 或 **verify-full**。這兩種模式都需要 CA 憑證。或者，在您的 Aurora 叢集參數群組`OFF`中將 `require_secure_transport`設定為 ，以允許未加密的連線。

**注意**  
Aurora MySQL 8.4 僅支援 TLS 1.2 的 GCM 密碼套件。已移除所有 CBC 模式密碼。針對 MySQL 和 Aurora MySQL 端點 AWS DMS 使用 TLS 1.2，並會自動交涉支援的 GCM 密碼。如果您有自訂密碼組態，請確認它們包含下列其中一個支援的密碼：ECDHE-RSA-AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384、ECDHE-ECDSA-AES128-GCM-SHA256 或 ECDHE-ECDSA-AES256-GCM-SHA384。

**注意**  
AWS DMS 不支援 MySQL 端點的 TLS 1.3。這不會影響 Aurora MySQL 8.4 的連線，因為 Aurora MySQL 8.4 繼續支援 TLS 1.2。

**身分驗證 (Aurora MySQL 和 RDS for MySQL 8.4)**

Aurora MySQL 8.4 會將 `default_authentication_plugin` 參數取代為 `authentication_policy`，預設為 `*:caching_sha2_password`。現有資料庫使用者會在升級後保留其目前的身分驗證外掛程式。如果您在升級之後建立新的 AWS DMS 端點使用者，除非您在叢集參數群組`*:mysql_native_password`中`authentication_policy`將 設定為 ，`caching_sha2_password`否則它們預設會使用 。

**主要使用者密碼重設**

升級至 Aurora MySQL 8.4 之後，透過 AWS 管理主控台、 CLI 或透過 Secrets Manager 輪換重設主要使用者密碼，會將主要使用者的身分驗證外掛程式設定為 `authentication_policy` 參數定義的預設值。如果 `authentication_policy` 設定為其預設值 (`*:caching_sha2_password`)，則在下次密碼重設`caching_sha2_password`時，主要使用者的身分驗證外掛程式會從 `mysql_native_password` 變更為 。

如果您的 AWS DMS 目標端點使用主要使用者帳戶，請在任何密碼重設後驗證連線。若要避免身分驗證外掛程式變更，請執行下列其中一項操作：
+ 在重設密碼之前，在您的叢集參數群組`*:mysql_native_password`中`authentication_policy`將 設定為 ，或
+ 使用明確指定的身分驗證外掛程式建立專用 AWS DMS 端點使用者 （建議）。例如：`CREATE USER 'dms_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';`

如需 Aurora MySQL 8.4 安全性變更的詳細資訊，請參閱《[Amazon Aurora 使用者指南》中的使用 Amazon Aurora MySQL 進行安全性](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Security.html)和[使用 Amazon Aurora 進行密碼管理以及使用 Secrets Manager](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html)。 **如需有關身分驗證外掛程式已知問題的資訊，請參閱《*Amazon RDS 使用者指南*》中的身分[驗證外掛程式](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.KnownIssuesAndLimitations.html#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin)。

## 使用 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 支援)。 | 