

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

# 比較 Aurora MySQL 第 2 版和 Aurora MySQL 第 3 版
<a name="AuroraMySQL.Compare-v2-v3"></a>

使用以下內容來了解當您將 Aurora MySQL 第 2 版叢集升級至第 3 版時，應注意的變更。

**Topics**
+ [單元資料定義語言 (DDL) 支援。](#AuroraMySQL.Compare-v2-v3-atomic-ddl)
+ [Aurora MySQL 第 2 版與第 3 版之間的功能差異](#AuroraMySQL.Compare-v2-v3-features)
+ [執行個體類別支援](#AuroraMySQL.mysql80-instance-classes)
+ [Aurora MySQL 第 3 版的參數變更](#AuroraMySQL.mysql80-parameter-changes)
+ [狀態變數](#AuroraMySQL.mysql80-status-vars)
+ [Aurora MySQL 第 3 版的包容性語言變更](#AuroraMySQL.8.0-inclusive-language)
+ [AUTO\_INCREMENT 值](#AuroraMySQL.mysql80-autoincrement)
+ [二進位日誌複寫](#AuroraMySQL.mysql80-binlog)

## 單元資料定義語言 (DDL) 支援。
<a name="AuroraMySQL.Compare-v2-v3-atomic-ddl"></a>

從 MySQL 5.7 到 8.0 的最大變更之一是引入[單元資料字典](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)。在 MySQL 8.0 之前，MySQL 資料字典使用以檔案為基礎的方法來存放中繼資料，例如資料表定義 (.frm)、觸發 (.trg)，以及與儲存引擎中繼資料 (例如 InnoDB 的) 分開的函數。這有一些問題，包括如果在 DDL 操作期間發生意外，導致檔案型和儲存引擎中繼資料不同步，資料表會變成「[孤立](https://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html)」的風險。

為了修正此問題，MySQL 8.0 推出了單元資料字典，該字典會將所有中繼資料存放在 `mysql` 結構描述中的一組內部 InnoDB 資料表中。這個新架構提供交易、[ACID](https://en.wikipedia.org/wiki/ACID) 合規的方式來管理資料庫中繼資料，從舊的檔案型方法解決「單元 DDL」問題。如需單元資料字典的詳細資訊，請參閱 *MySQL 參考手冊*中的[移除檔案型中繼資料儲存](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)和[單元資料定義陳述式支援](https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html)。

由於此架構變更，從 Aurora MySQL 第 2 版升級至第 3 版時，您必須考量下列事項：
+ 第 2 版的檔案型中繼資料必須在升級到第 3 版的過程中遷移到新的資料字典資料表。視遷移多少資料庫物件而定，這可能需要一些時間。
+ 這些變更也引入了一些新的不相容，可能需要先解決，才能從 MySQL 5.7 升級到 8.0。例如，8.0 有一些新的預留關鍵字，可能與現有的資料庫物件名稱衝突。

為了協助您在升級引擎之前識別這些不相容，Aurora MySQL 會執行一系列的升級相容性檢查 (預先檢查)，以確定資料庫字典中是否有任何不相容的物件，然後再執行資料字典升級。如需關於預先檢查的詳細資訊，請參閱 [Aurora MySQL 的主要版本升級預先檢查](AuroraMySQL.upgrade-prechecks.md)。

## Aurora MySQL 第 2 版與第 3 版之間的功能差異
<a name="AuroraMySQL.Compare-v2-v3-features"></a>

Aurora MySQL for MySQL 5.7 中支援下列 Amazon Aurora MySQL 功能，但 Aurora MySQL for MySQL 8.0 中不支援這些功能。
+ 您無法將 Aurora MySQL 第 3 版用於 Aurora Serverless v1 叢集。Aurora MySQL 第 3 版可與 Aurora Serverless v2 搭配使用。
+ 實驗室模式不適用於 Aurora MySQL 第 3 版。Aurora MySQL 第 3 版中沒有任何實驗室模式功能。即時 DDL 會取代先前可在實驗室模式中使用的快速線上 DDL 功能。如需範例，請參閱 [即時 DDL (Aurora MySQL 第 3 版)](AuroraMySQL.Managing.FastDDL.md#AuroraMySQL.mysql80-instant-ddl)。
+ 查詢快取會從社群 MySQL 8.0 移除，也會從 Aurora MySQL 第 3 版移除。
+ Aurora MySQL 第 3 版與社群 MySQL 雜湊聯結功能相容。未使用 Aurora MySQL 第 2 版中雜湊聯結的 Aurora 特定實作。如需搭配使用雜湊聯結與 Aurora 平行查詢的相關資訊，請參閱[開啟平行查詢叢集的雜湊聯結](aurora-mysql-parallel-query-enabling.md#aurora-mysql-parallel-query-enabling-hash-join)和 [Aurora MySQL 提示](AuroraMySQL.Reference.Hints.md)。如需雜湊聯結的一般用法資訊，請參閱《MySQL 參考手冊》**中的[雜湊聯結最佳化](https://dev.mysql.com/doc/refman/8.0/en/hash-joins.html)。
+ 已在 Aurora MySQL 第 2 版中取代的 `mysql.lambda_async` 預存程序會在第 3 版中移除。對於第 3 版，請改用非同步函數 `lambda_async`。
+ Aurora MySQL 第 3 版中的預設字元集是 `utf8mb4`。在 Aurora MySQL 第 2 版中，預設字元集是 `latin1`。如需此字元集的相關資訊，請參閱《MySQL 參考手冊》**中的 [utf8mb4 字元集 (4 位元組 UTF-8 Unicode 編碼)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html)。

有些 Aurora MySQL 功能適用於 AWS 區域和資料庫引擎版本的特定組合。如需詳細資訊，請參閱[AWS 區域 和 Aurora 資料庫引擎在 Amazon Aurora 中支援的功能](Concepts.AuroraFeaturesRegionsDBEngines.grids.md)。

## 執行個體類別支援
<a name="AuroraMySQL.mysql80-instance-classes"></a>

Aurora MySQL 第 3 版支援的執行個體類別集與 Aurora MySQL 第 2 版支援的不同：
+ 對於較大的執行個體，您可以使用新式執行個體類別，例如 `db.r5`、`db.r6g` 和 `db.x2g`。
+ 對於較小的執行個體，您可以使用新式執行個體類別，例如 `db.t3` 和 `db.t4g`。
**注意**  
建議您在開發、測試伺服器或其他非生產伺服器時，僅使用 T 資料庫執行個體類別。如需詳細了解 T 執行個體類別，請參閱 [使用 T 執行個體類別進行開發和測試](AuroraMySQL.BestPractices.Performance.md#AuroraMySQL.BestPractices.T2Medium)。

來自 Aurora MySQL 第 2 版的以下執行個體類別不適用於 Aurora MySQL 第 3 版：
+  `db.r4` 
+  `db.r3` 
+  `db.t3.small` 
+  `db.t2` 

 檢查您的管理指令碼是否有任何建立 Aurora MySQL 資料庫執行個體的 CLI 陳述式。無法用於 Aurora MySQL 第 3 版的硬式編碼執行個體類別名稱。如有必要，請將執行個體類別名稱修改為 Aurora MySQL 第 3 版支援的名稱。

**提示**  
 若要檢查可用於 Aurora MySQL 版本和 AWS 區域特定組合的執行個體類別，請使用 `describe-orderable-db-instance-options` AWS CLI 命令。

 如需 Aurora 執行個體類別的完整詳細資訊，請參閱 [Amazon Aurora 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

## Aurora MySQL 第 3 版的參數變更
<a name="AuroraMySQL.mysql80-parameter-changes"></a>

Aurora MySQL 第 3 版包含新的叢集層級和執行個體層級組態參數。Aurora MySQL 第 3 版也移除一些存在於 Aurora MySQL 第 2 版中的參數。有些參數名稱會由於包容性語言的倡議而變更。為了回溯相容性，您仍然可以使用舊名稱或新名稱來擷取參數值。不過，您必須使用新名稱來指定自訂參數群組中的參數值。

在 Aurora MySQL 第 3 版中，`lower_case_table_names` 參數的值會在建立叢集時永久設定。如果您對此選項使用非預設值，請在升級之前設定您的 Aurora MySQL 第 3 版自訂參數群組。然後，在建立叢集或快照還原作業期間指定參數群組。

**注意**  
使用以 Aurora MySQL 為基礎的 Aurora 全域資料庫時，若啟用 `lower_case_table_names` 參數，即無法從 Aurora MySQL 第 2 版就地升級至第 3 版。請改用快照還原技術。

在 Aurora MySQL 第 3 版中，`init_connect` 和 `read_only` 參數不適用於具有 `CONNECTION_ADMIN` 權限的使用者。這包括 Aurora 主要使用者。如需詳細資訊，請參閱[角色型權限模型](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)。

如需 Aurora MySQL 叢集參數的完整清單，請參閱[叢集層級參數](AuroraMySQL.Reference.ParameterGroups.md#AuroraMySQL.Reference.Parameters.Cluster)。資料表涵蓋了來自 Aurora MySQL 第 2 和 3 版的所有參數。資料表包含附註，其中顯示哪些參數在 Aurora MySQL 第 3 版中是新的，或是哪些參數已從 Aurora MySQL 第 3 版中移除。

如需 Aurora MySQL 執行個體參數的完整清單，請參閱[執行個體層級參數](AuroraMySQL.Reference.ParameterGroups.md#AuroraMySQL.Reference.Parameters.Instance)。資料表涵蓋了來自 Aurora MySQL 第 2 和 3 版的所有參數。資料表包含附註，其中顯示哪些參數在 Aurora MySQL 第 3 版中是新的，以及哪些參數已從 Aurora MySQL 第 3 版中移除。它還包括其他附註，其中顯示哪些參數在早期版本中是可修改的，但不是 Aurora MySQL 第 3 版。

如需已變更之參數名稱的相關資訊，請參閱 [Aurora MySQL 第 3 版的包容性語言變更](#AuroraMySQL.8.0-inclusive-language)。

## 狀態變數
<a name="AuroraMySQL.mysql80-status-vars"></a>

如需不適用於 Aurora MySQL 之狀態變數的相關資訊，請參閱[不適用於 Aurora MySQL 的 MySQL 狀態變數](AuroraMySQL.Reference.GlobalStatusVars.md#AuroraMySQL.Reference.StatusVars.Inapplicable)。

## Aurora MySQL 第 3 版的包容性語言變更
<a name="AuroraMySQL.8.0-inclusive-language"></a>

 Aurora MySQL 第 3 版與來自 MySQL 社群版的 8.0.23 版相容。Aurora MySQL 第 3 版還包括來自 MySQL 8.0.26 的變更，這些變更與包容性語言之關鍵字和系統結構描述相關。例如，`SHOW REPLICA STATUS` 命令現在是偏好的命令，而不是 `SHOW SLAVE STATUS`。

 下列 Amazon CloudWatch 指標在 Aurora MySQL 第 3 版中具有新名稱。

 在 Aurora MySQL 第 3 版中，只有新的指標名稱可用。升級至 Aurora MySQL 第 3 版時，請務必更新任何警示或其他依賴指標名稱的自動化。


|  舊名稱  |  新名稱  | 
| --- | --- | 
|  ForwardingMasterDMLLatency  |  ForwardingWriterDMLLatency  | 
|  ForwardingMasterOpenSessions  |  ForwardingWriterOpenSessions  | 
|  AuroraDMLRejectedMasterFull  |  AuroraDMLRejectedWriterFull  | 
|  ForwardingMasterDMLThroughput  |  ForwardingWriterDMLThroughput  | 

 下列狀態變數在 Aurora MySQL 第 3 版中具有新名稱。

 為了相容性，您可以在初始的 Aurora MySQL 第 3 版中使用任一個名稱。舊的狀態變數名稱將在未來版本中移除。


|  要移除的名稱  |  新名稱或偏好名稱  | 
| --- | --- | 
|  Aurora\_fwd\_master\_dml\_stmt\_duration  |  Aurora\_fwd\_writer\_dml\_stmt\_duration  | 
|  Aurora\_fwd\_master\_dml\_stmt\_count  |  Aurora\_fwd\_writer\_dml\_stmt\_count  | 
|  Aurora\_fwd\_master\_select\_stmt\_duration  |  Aurora\_fwd\_writer\_select\_stmt\_duration  | 
|  Aurora\_fwd\_master\_select\_stmt\_count  |  Aurora\_fwd\_writer\_select\_stmt\_count  | 
|  Aurora\_fwd\_master\_errors\_session\_timeout  |  Aurora\_fwd\_writer\_errors\_session\_timeout  | 
|  Aurora\_fwd\_master\_open\_sessions  |  Aurora\_fwd\_writer\_open\_sessions  | 
|  Aurora\_fwd\_master\_errors\_session\_limit  |  Aurora\_fwd\_writer\_errors\_session\_limit  | 
|  Aurora\_fwd\_master\_errors\_rpc\_timeout  |  Aurora\_fwd\_writer\_errors\_rpc\_timeout  | 

下列組態參數在 Aurora MySQL 第 3 版中具有新名稱。

為了相容性，您可以檢查 `mysql` 用戶端中的參數名稱，方法是在初始 Aurora MySQL 第 3 版中使用任一名稱。修改自訂參數群組中的值時，您只能使用新名稱。舊的參數名稱將在未來版本中移除。


|  要移除的名稱  |  新名稱或偏好名稱  | 
| --- | --- | 
|  aurora\_fwd\_master\_idle\_timeout  |  aurora\_fwd\_writer\_idle\_timeout  | 
|  aurora\_fwd\_master\_max\_connections\_pct  |  aurora\_fwd\_writer\_max\_connections\_pct  | 
|  master\_verify\_checksum  |  source\_verify\_checksum  | 
|  sync\_master\_info  |  sync\_source\_info  | 
|  init\_slave  |  init\_replica  | 
|  rpl\_stop\_slave\_timeout  |  rpl\_stop\_replica\_timeout  | 
|  log\_slow\_slave\_statements  |  log\_slow\_replica\_statements  | 
|  slave\_max\_allowed\_packet  |  replica\_max\_allowed\_packet  | 
|  slave\_compressed\_protocol  |  replica\_compressed\_protocol  | 
|  slave\_exec\_mode  |  replica\_exec\_mode  | 
|  slave\_type\_conversions  |  replica\_type\_conversions  | 
|  slave\_sql\_verify\_checksum  |  replica\_sql\_verify\_checksum  | 
|  slave\_parallel\_type  |  replica\_parallel\_type  | 
|  slave\_preserve\_commit\_order  |  replica\_preserve\_commit\_order  | 
|  log\_slave\_updates  |  log\_replica\_updates  | 
|  slave\_allow\_batching  |  replica\_allow\_batching  | 
|  slave\_load\_tmpdir  |  replica\_load\_tmpdir  | 
|  slave\_net\_timeout  |  replica\_net\_timeout  | 
|  sql\_slave\_skip\_counter  |  sql\_replica\_skip\_counter  | 
|  slave\_skip\_errors  |  replica\_skip\_errors  | 
|  slave\_checkpoint\_period  |  replica\_checkpoint\_period  | 
|  slave\_checkpoint\_group  |  replica\_checkpoint\_group  | 
|  slave\_transaction\_retries  |  replica\_transaction\_retries  | 
|  slave\_parallel\_workers  |  replica\_parallel\_workers  | 
|  slave\_pending\_jobs\_size\_max  |  replica\_pending\_jobs\_size\_max  | 
|  pseudo\_slave\_mode  |  pseudo\_replica\_mode  | 

 下列預存程序在 Aurora MySQL 第 3 版中具有新名稱。

 為了相容性，您可以在初始的 Aurora MySQL 第 3 版中使用任一個名稱。未來版本將移除舊的程序名稱。


|  要移除的名稱  |  新名稱或偏好名稱  | 
| --- | --- | 
|  mysql.rds\_set\_master\_auto\_position  |  mysql.rds\_set\_source\_auto\_position  | 
|  mysql.rds\_set\_external\_master  |  mysql.rds\_set\_external\_source  | 
|  mysql.rds\_set\_external\_master\_with\_auto\_position  |  mysql.rds\_set\_external\_source\_with\_auto\_position  | 
|  mysql.rds\_reset\_external\_master  |  mysql.rds\_reset\_external\_source  | 
|  mysql.rds\_next\_master\_log  |  mysql.rds\_next\_source\_log  | 

## AUTO\_INCREMENT 值
<a name="AuroraMySQL.mysql80-autoincrement"></a>

 在 Aurora MySQL 第 3 版中，Aurora 會在其重新啟動每個資料庫執行個體時保留每個資料表的 `AUTO_INCREMENT` 值。在 Aurora MySQL 第 2 版中，重新啟動後未保留 `AUTO_INCREMENT` 值。

 從快照還原、執行時間點復原，以及複製叢集來設定新叢集時，不會保留 `AUTO_INCREMENT` 值。在這些情況下，`AUTO_INCREMENT` 值會在建立快照時初始化為基於資料表中最大資料欄值的值。這種行為與 RDS for MySQL 8.0 中不同，其中 `AUTO_INCREMENT` 值會在這些作業期間保留。

## 二進位日誌複寫
<a name="AuroraMySQL.mysql80-binlog"></a>

 在 MySQL 8.0 社群版中，預設為開啟二進位日誌複寫。在 Aurora MySQL 第 3 版中，預設為關閉二進位日誌複寫。

**提示**  
 如果 Aurora 內建複寫功能滿足您的高可用性需求，您可以將二進位日誌複寫保留關閉狀態。如此一來，就可以避免二進位日誌複寫的效能負荷。也可以避免管理二進位日誌複寫所需的相關聯監控和疑難排解。

 Aurora 支援二進位日誌從 MySQL 5.7 相容來源複寫到 Aurora MySQL 第 3 版。來源系統可以是 Aurora MySQL 資料庫叢集、RDS for MySQL 資料庫執行個體或內部部署 MySQL 執行個體。

 與社群 MySQL 一樣，Aurora MySQL 支援從執行特定版本的來源複寫到執行相同主要版本或更高主要版本的目標。例如，不支援從 MySQL 5.6 相容系統複寫到 Aurora MySQL 第 3 版。不支援從 Aurora MySQL 第 3 版複寫到 MySQL 5.7 相容系統或 MySQL 5.6 相容系統。如需使用二進位日誌複寫的詳細資訊，請參閱 [Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位複寫)](AuroraMySQL.Replication.MySQL.md)。

 Aurora MySQL 第 3 版包含對社群 MySQL 8.0 中二進位日誌複寫的改進，例如篩選的複寫。如需有關社群 MySQL 8.0 改進的詳細資訊，請參閱《MySQL 參考手冊》**中的[伺服器如何評估複寫篩選規則](https://dev.mysql.com/doc/refman/8.0/en/replication-rules.html)。

### 二進位日誌複寫的交易壓縮
<a name="AuroraMySQL.binlog-transaction-compression"></a>

 如需二進位日誌壓縮的用法資訊，請參閱《MySQL 參考手冊》中的[二進位日誌交易壓縮](https://dev.mysql.com/doc/refman/8.0/en/binary-log-transaction-compression.html)。

 下列限制適用於 Aurora MySQL 第 3 版中的二進位日誌壓縮：
+  其二進位日誌資料大於最大允許封包大小的交易不會進行壓縮。無論 Aurora MySQL 二進位日誌壓縮設定是否開啟，都會發生此情況。這類交易會在不壓縮的情況下進行複寫。
+  如果您對尚未支援 MySQL 8.0 的變更資料擷取 (CDC) 使用連接器，則無法使用此功能。建議您使用二進位日誌壓縮，完整測試任何第三方連接器。此外，建議您先這樣做，然後在針對 CDC 使用 binlog 複寫的系統上開啟 binlog 壓縮。