

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

# Amazon RDS for MySQL 的已知問題和限制
<a name="MySQL.KnownIssuesAndLimitations"></a>

使用 Amazon RDS for MySQL 的已知問題和限制如下所示。

**Topics**
+ [InnoDB 保留字詞](#MySQL.Concepts.KnownIssuesAndLimitations.InnodbDatabaseName)
+ [Amazon RDS for MySQL 的儲存已滿行為](#MySQL.Concepts.StorageFullBehavior)
+ [InnoDB 緩衝集區大小不一致](#MySQL.Concepts.KnownIssuesAndLimitations.InnodbBufferPoolSize)
+ [索引合併最佳化傳回不正確的結果](#MySQL.Concepts.KnownIssuesAndLimitations.IndexMergeOptimization)
+ [Amazon RDS 資料庫執行個體的 MySQL 參數例外狀況](#MySQL.Concepts.ParameterNotes)
+ [Amazon RDS 中的 MySQL 檔案大小限制](#MySQL.Concepts.Limits.FileSize)
+ [不支援 MySQL Keyring 外掛程式](#MySQL.Concepts.Limits.KeyRing)
+ [自訂連接埠](#MySQL.Concepts.KnownIssuesAndLimitations.CustomPorts)
+ [MySQL 預存程序限制](#MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures)
+ [使用外部來源執行個體進行 GTID 式複寫](#MySQL.Concepts.KnownIssuesAndLimitations.GTID)
+ [MySQL 預設身分驗證外掛程式](#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin)
+ [覆寫 innodb\$1buffer\$1pool\$1size](#MySQL.Concepts.KnownIssuesAndLimitations.innodb-bp-size)
+ [從 MySQL 5.7 升級至 MySQL 8.4](#MySQL.Concepts.KnownIssuesAndLimitations.upgrade-8-4)
+ [InnoDB 頁面壓縮](#MySQL.Concepts.KnownIssuesAndLimitations.innodb-page-compression)

## InnoDB 保留字詞
<a name="MySQL.Concepts.KnownIssuesAndLimitations.InnodbDatabaseName"></a>

`InnoDB` 是用於 RDS for MySQL 的保留字詞。此名稱無法用於 MySQL 資料庫。

## Amazon RDS for MySQL 的儲存已滿行為
<a name="MySQL.Concepts.StorageFullBehavior"></a>

當 MySQL 資料庫執行個體的儲存空間已滿時，可能會出現中繼資料不一致、字典不符和孤立表格。若要避免這些問題，Amazon RDS 應自動停止達到 `storage-full` 狀態的資料庫執行個體。

MySQL 資料庫執行個體在下列情況下達到 `storage-full` 狀態：
+ 資料庫執行個體的儲存空間少於 20,000 MiB，可用儲存空間達到 200 MiB 或更少。
+ 資料庫執行個體擁有超過 102,400 MiB 的儲存空間，可用儲存空間達到 1024 MiB 或更少。
+ 資料庫執行個體的儲存空間介於 20,000 MiB 和 102,400 MiB 之間，且可用的儲存空間少於 1%。

由於資料庫執行個體達到 `storage-full` 狀態，因此 Amazon RDS 自動停止它之後，您仍然可以進行修改。若要重新啟動資料庫執行個體，請至少完成下列其中一項：
+ 修改資料庫執行個體以啟用儲存體自動擴展。

  如需儲存體自動擴展的詳細資訊，請參閱[使用 Amazon RDS 儲存體自動擴展自動管理容量](USER_PIOPS.Autoscaling.md)。
+ 修改資料庫執行個體以增加其儲存容量。

  如需增加儲存容量的詳細資訊，請參閱[增加資料庫執行個體的儲存容量](USER_PIOPS.ModifyingExisting.md)。

進行其中一項變更後，資料庫執行個體會自動重新啟動。如需修改資料庫執行個體的相關資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## InnoDB 緩衝集區大小不一致
<a name="MySQL.Concepts.KnownIssuesAndLimitations.InnodbBufferPoolSize"></a>

若為 MySQL 5.7，目前在管理 InnoDB 緩衝集區大小的方式中有一個錯誤。MySQL 5.7 可能將 `innodb_buffer_pool_size` 參數的值調整為非常大的值，因而導致 InnoDB 緩衝集區過大並使用過多的記憶體。此效果可能導致 MySQL 資料庫引擎停止執行，或可能阻止其啟動。對於可用記憶體更少的資料庫執行個體類別，此問題更常發生。

若要解決此問題，請將 `innodb_buffer_pool_size` 參數的值設為 `innodb_buffer_pool_instances` 參數值與 `innodb_buffer_pool_chunk_size` 參數值之乘積的倍數。例如，您可能將 `innodb_buffer_pool_size` 參數值設為 `innodb_buffer_pool_instances` 與 `innodb_buffer_pool_chunk_size` 參數值之乘積的八倍，如下列範例所示。

```
innodb_buffer_pool_chunk_size = 536870912
innodb_buffer_pool_instances = 4
innodb_buffer_pool_size = (536870912 * 4) * 8 = 17179869184
```

如需此 MySQL 5.7 錯誤的詳細資訊，請參閱 MySQL 文件中的 [https://bugs.mysql.com/bug.php?id=79379](https://bugs.mysql.com/bug.php?id=79379)。

## 索引合併最佳化傳回不正確的結果
<a name="MySQL.Concepts.KnownIssuesAndLimitations.IndexMergeOptimization"></a>

由於 MySQL 5.5.37 推出的 MySQL 查詢最佳化工具有錯誤，使用索引合併最佳化的查詢可能會傳回不正確的結果。當您對具有多個索引的資料表發出查詢請求，最佳化工具可以根據多個索引來掃描資料列範圍，卻無法正確地合併結果。如需查詢最佳化器錯誤的詳細資訊，請參閱 MySQL 錯誤資料庫中的 [http://bugs.mysql.com/bug.php?id=72745](https://bugs.mysql.com/bug.php?id=72745) 和 [http://bugs.mysql.com/bug.php?id=68194](https://bugs.mysql.com/bug.php?id=68194)。

例如，考慮對具有兩個索引的資料表進行查詢，其中搜尋引數會參考具索引的資料欄。

```
1. SELECT * FROM table1
2. WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
```

在此情況下，搜尋引擎將搜尋這兩個索引。但由於有錯誤，合併的結果會不正確。

若要解決此問題，您可以執行下列項目之一：
+ 對於您的 MySQL 資料庫執行個體，將 `optimizer_switch` 參數設為資料庫參數群組中的 `index_merge=off`。如需設定資料庫參數群組參數的相關資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。
+ 將 MySQL 資料庫執行個體升級為 MySQL 5.7 或 8.0 版。如需詳細資訊，請參閱[RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。
+ 如果您無法升級執行個體或變更 `optimizer_switch` 參數，則可以藉由明確地識別查詢的索引來解決錯誤，例如：

  ```
  1. SELECT * FROM table1
  2. USE INDEX covering_index
  3. WHERE indexed_col1 = 'value1' AND indexed_col2 = 'value2';
  ```

如需詳細資訊，請參閱 MySQL 文件中的[索引合併最佳化](https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html)。

## Amazon RDS 資料庫執行個體的 MySQL 參數例外狀況
<a name="MySQL.Concepts.ParameterNotes"></a>

與 Amazon RDS 資料庫執行個體搭配使用時，部分 MySQL 參數需要特殊考量。

### lower\$1case\$1table\$1names
<a name="MySQL.Concepts.ParameterNotes.lower-case-table-names"></a>

因為 Amazon RDS 會使用區分大小寫檔案系統，所以不支援將 `lower_case_table_names` 伺服器參數的值設為 2 (名稱按原狀儲存，但以小寫形式進行比較)。以下是 Amazon RDS for MySQL 資料庫執行個體支援的值：
+ 所有 RDS for MySQL 版本都支援 0 (名稱按原狀儲存，且比較會區分大小寫)。
+ RDS for MySQL 5.7 版、8.0.28 版、更高的 8.0 版和 8.4 版支援 1.(名稱儲存為小寫，且比較不區分大小寫)。

在建立資料庫執行個體之前，請在自訂資料庫參數群組中設定 `lower_case_table_names` 參數。然後，在建立資料庫執行個體時，指定自訂資料庫參數群組。

當參數群組與版本低於 8.0 的 MySQL 資料庫執行個體相關聯時，建議您避免變更參數群組中的 `lower_case_table_names` 參數。變更該參數可能導致與時間點復原備份和僅供讀取複本資料庫執行個體產生不一致。

當參數群組與 8.0 或 8.4 版的 MySQL 資料庫執行個體相關聯時，您無法修改參數群組中的 `lower_case_table_names` 參數。

僅供讀取複本應該一律使用與來源資料庫執行個體相同的 `lower_case_table_names` 參數值。

### 長查詢時間
<a name="MySQL.Concepts.ParameterNotes.long_query_time"></a>

您可以將 `long_query_time` 參數設為浮點值，以便您可以利用微秒解析，將緩慢查詢記錄至 MySQL 緩慢查詢日誌。您可以設定一值，例如 0.1 秒 (即 100 微秒)，以在偵錯所花時間不到一秒的緩慢交易時提供協助。

## Amazon RDS 中的 MySQL 檔案大小限制
<a name="MySQL.Concepts.Limits.FileSize"></a>

對於 MySQL 8.0 版和更高版本的資料庫執行個體，檔案大小上限為 16 TiB。使用 file-per-table 資料表空間時，檔案大小上限會將 InnoDB 資料表的大小限制為 16 TiB。根據預設，InnoDB file-per-table 資料表空間 (其資料表每一個都在自己的資料表空間中) 是針對 MySQL 資料庫執行個體設定的。如需詳細資訊，請參閱 MySQL 文件中的 [InnoDB 限制](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html)。

**注意**  
部分現有的資料庫執行個體具有較低的限制。例如，在 2014 年 4 月之前建立的 MySQL 資料庫執行個體具有 2 TB 的檔案和資料表大小限制。無論何時建立資料庫執行個體，此 2-TB 檔案大小限制也適用於從 2014 年 4 月之前取得之快照建立的資料庫執行個體或僅供讀取複本。

使用 InnoDB file-per-table 資料表空間有優缺點，取決於您的應用程式。如要判斷您應用程式的最佳方式，請前往 MySQL 文件中的 [File-Per-Table 表格空間](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html)。

不建議允許資料表成長至檔案大小上限。一般來說，更理想的做法是將資料表分割成更小的資料表，如此可以改善效能並縮短復原時間。

您可以用於將大型資料表分成更小資料表的選項為分割。「分割」會根據您指定的規則，將大型資料表的部分分散成個別檔案。例如，如果您依日期儲存交易，則可以建立分割規則，使用分割將較舊的交易分配成個別檔案。然後，您可以定期封存不需要立即可供應用程式使用的歷史交易資料。如需詳細資訊，請參閱 MySQL 文件中的[分割](https://dev.mysql.com/doc/refman/8.0/en/partitioning.html)。

因為沒有可提供所有資料表和 InnoDB 系統資料表空間大小的單一系統資料表或檢視，因此您必須查詢多個資料表，以判斷資料表空間的大小。

**決定 InnoDB 系統資料表空間和資料字典資料表空間的大小**
+ 使用下列 SQL 命令來判斷您的任何資料表空間是否太大，且為進行分割的候選者。
**注意**  
資料字典資料表空間是 MySQL 8.0 和更高版本特有的。

  ```
  1. select FILE_NAME,TABLESPACE_NAME, ROUND(((TOTAL_EXTENTS*EXTENT_SIZE)
  2. /1024/1024/1024), 2)  as "File Size (GB)" from information_schema.FILES
  3. where tablespace_name in ('mysql','innodb_system');
  ```

**決定 InnoDB 系統資料表空間之外的 InnoDB 使用者資料表大小 (適用於 MySQL 5.7 版)**
+ 使用下列 SQL 命令來判斷您是否有太大的資料表，且為進行分割的候選者。

  ```
  1. SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2)
  2. as "Tablespace Size (GB)"
  3. FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
  ```

**決定 InnoDB 系統資料表空間之外的 InnoDB 使用者資料表大小 (適用於 MySQL 8.0 和更高版本)**
+ 使用下列 SQL 命令來判斷您是否有太大的資料表，且為進行分割的候選者。

  ```
  1. SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2)
  2. as "Tablespace Size (GB)"
  3. FROM information_schema.INNODB_TABLESPACES ORDER BY 3 DESC;
  ```

**決定非 InnoDB 使用者資料表的大小**
+ 使用下列 SQL 命令，判斷您的任何非 InnoDB 使用者資料表是否太大。

  ```
  SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE)
  / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES
  WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema')
  and ENGINE<>'InnoDB';
  ```

**啟用 InnoDB file-per-table 資料表空間**
+ 在資料庫執行個體的參數群組中，將 *innodb\$1file\$1per\$1table* 參數設為 `1`。

**停用 InnoDB file-per-table 資料表空間**
+ 在資料庫執行個體的參數群組中，將 *innodb\$1file\$1per\$1table* 參數設為 `0`。

如需更新參數群組的相關資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

當啟用或停用了 InnoDB file-per-table 資料表空間，您可以發出 `ALTER TABLE` 命令，將資料表從全域資料表空間移至其自己的資料表空間，或從其自己的資料表空間移至全域資料表空間，如下列範例所示：

```
ALTER TABLE table_name TABLESPACE=innodb_file_per_table;
```

## 不支援 MySQL Keyring 外掛程式
<a name="MySQL.Concepts.Limits.KeyRing"></a>

Amazon RDS for MySQL 目前不支援 MySQL `keyring_aws` Amazon Web Services Keyring 外掛程式。

## 自訂連接埠
<a name="MySQL.Concepts.KnownIssuesAndLimitations.CustomPorts"></a>

Amazon RDS 會封鎖 MySQL 引擎的自訂連接埠 33060 的連線。為您的 MySQL 引擎選擇不同的連接埠。

## MySQL 預存程序限制
<a name="MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures"></a>

如果 MySQL 使用者名稱長度超過 16 個字元，則在以下版本的 RDS for MySQL 上，[mysql.rds\$1kill](mysql-stored-proc-ending.md#mysql_rds_kill) 和 [mysql.rds\$1kill\$1query](mysql-stored-proc-ending.md#mysql_rds_kill_query) 預存程序無法終止該使用者擁有的工作階段或查詢：
+ 8.0.32 和較低的 8 版本
+ 5.7.41 和較低的 5.7 版本

## 使用外部來源執行個體進行 GTID 式複寫
<a name="MySQL.Concepts.KnownIssuesAndLimitations.GTID"></a>

Amazon RDS 支援根據全域交易識別符 (GTID) 從外部 MySQL 執行個體複寫至需要在設定期間設定 GTID\$1PURGED 的 Amazon RDS for MySQL 資料庫執行個體。然而，只有 RDS for MySQL 8.0.37 和更高版本支援此功能。

## MySQL 預設身分驗證外掛程式
<a name="MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin"></a>

Amazon RDS for MySQL 8.0.34 版和更高的 8.0 版使用 `mysql_native_password` 外掛程式。您無法變更 `default_authentication_plugin` 設定。

RDS for MySQL 8.4 版和更高版本使用 `caching_sha2_password` 外掛程式做為預設身分驗證外掛程式。您可以變更 MySQL 8.4 的預設身分驗證外掛程式。`mysql_native_password` 外掛程式仍適用於 MySQL 8.4，但此外掛程式的支援將隨著 MySQL 8.4 結束。若要變更預設身分驗證外掛程式，請建立自訂參數群組，並修改 `authentication_policy` 參數的值。如需詳細資訊，請參閱[預設和自訂參數群組](parameter-groups-overview.md#parameter-groups-overview.custom)。

## 覆寫 innodb\$1buffer\$1pool\$1size
<a name="MySQL.Concepts.KnownIssuesAndLimitations.innodb-bp-size"></a>

使用微型或小型資料庫執行個體類別時，`innodb_buffer_pool_size` 參數的預設值可能會與執行下列命令傳回的值不同：

```
mysql> SELECT @@innodb_buffer_pool_size;
```

Amazon RDS 若需要在管理資料庫執行個體類別時覆寫預設值，就可能出現此差異。如有必要，您可以覆寫預設值，並將其設定為資料庫執行個體類別支援的值。若要確認有效值，請新增資料庫執行個體上可用的記憶體用量和記憶體總數。如需詳細資訊，請參閱 [Amazon RDS 執行個體類型](https://aws.amazon.com/rds/instance-types/)。

如果您的資料庫執行個體只有 4 GB 的記憶體，則無法將 `innodb_buffer_pool_size` 設定為 8 GB，但您可以將其設定為 3 GB，具體取決於您為其他參數配置的記憶體數量。

如果您輸入的值太大，Amazon RDS 會將該值降至下列限制：
+ 微型資料庫執行個體類別：256 MB
+ db.t4g.micro 資料庫執行個體類別：128 MB

## 從 MySQL 5.7 升級至 MySQL 8.4
<a name="MySQL.Concepts.KnownIssuesAndLimitations.upgrade-8-4"></a>

您無法直接從 MySQL 5.7 升級至 MySQL 8.4。您必須先從 MySQL 5.7 升級至 MySQL 8.0，再從 MySQL 8.0 升級至 MySQL 8.4。如需詳細資訊，請參閱[RDS for MySQL 的主要版本升級](USER_UpgradeDBInstance.MySQL.Major.md)。

## InnoDB 頁面壓縮
<a name="MySQL.Concepts.KnownIssuesAndLimitations.innodb-page-compression"></a>

InnoDB 頁面壓縮不適用於檔案系統區塊大小為 16k 的 Amazon RDS 資料庫執行個體，因為檔案系統區塊大小必須小於 InnoDB 頁面大小。從 2024 年 2 月開始，所有新建立的資料庫執行個體都有 16k 的檔案系統區塊大小，因而提高了輸送量，並降低頁面排清期間的 IOPS 耗用量。