

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

# Amazon RDS for MySQL
<a name="CHAP_MySQL"></a>

Amazon RDS 針對資料庫執行個體支援多個 MySQL 版本。如需有關支援版本的完整資訊，請參閱 [MySQL on Amazon RDS 版本](MySQL.Concepts.VersionMgmt.md)。

若要建立 Amazon RDS for MySQL 資料庫執行個體，請使用 Amazon RDS 管理工具或介面。然後，您可以執行下列作業：
+ 調整資料庫執行個體的大小
+ 授權連線至資料庫執行個體
+ 從備份或快照建立和還原
+ 建立多可用區域次要項
+ 建立僅供讀取複本
+ 監控資料庫執行個體的效能

若要在資料庫執行個體中存放與存取資料，您可以使用標準 MySQL 公用程式與應用程式。

Amazon RDS for MySQL 符合多項業界標準。例如，您可以使用 RDS for MySQL 資料庫來建置符合 HIPAA 規範的應用程式。依據與 AWS 簽署的商業夥伴協議 (BAA)，您可以使用 RDS for MySQL 資料庫存放醫療保健相關的資訊，包括受保護醫療資訊 (PHI)。Amazon RDS for MySQL 亦符合美國聯邦風險與授權管理計劃 (FedRAMP) 的安全性要求。此外，Amazon RDS for MySQL 已獲得 FedRAMP 聯合授權委員會 (JAB) 核發的 FedRAMP 高基準臨時操作授權書 (P-ATO)，可在 AWS GovCloud (US) 區域內執行。如需支援的合規標準的詳細資訊，請參閱 [AWS雲端合規](https://aws.amazon.com/compliance/)。

如需關於 MySQL 各版本功能的資訊，請參閱 MySQL 文件中的 [MySQL 的主要功能](https://dev.mysql.com/doc/refman/8.0/en/features.html)。

建立資料庫執行個體之前，請先完成 [設定您的 Amazon RDS 環境](CHAP_SettingUp.md) 中的步驟。建立資料庫執行個體時，RDS 主要使用者帳戶會取得 DBA 權限 (有一些限制)。將此帳戶用於管理任務，例如建立其他資料庫帳戶。

您可以建立下列作業：
+ 資料庫執行個體
+ 資料庫快照
+ 時間點還原
+ 自動備份
+ 手動備份

您可以在以 Amazon 虛擬私有雲端 (VPC) 為基礎的 VPC 內使用執行 MySQL 的資料庫執行個體。您也可以透過開啟各種選項，新增功能至 MySQL 資料庫執行個體。Amazon RDS 支援 MySQL 的多可用區部署，做為高可用性、容錯移轉解決方案。

**重要**  
為了提供受管理的服務體驗，Amazon RDS 並不會提供資料庫執行個體的殼層存取權。而且會將存取權限制在某些需要進階權限的系統程序和資料表。您可以使用標準 SQL 用戶端 (例如 mysql 用戶端) 存取資料庫。不過，您無法使用 Telnet 或 Secure Shell (SSH) 直接存取主機。

**Topics**
+ [

# Amazon RDS 上的 MySQL 功能支援
](MySQL.Concepts.FeatureSupport.md)
+ [

# MySQL on Amazon RDS 版本
](MySQL.Concepts.VersionMgmt.md)
+ [

# 連線至您的 MySQL 資料庫執行個體
](USER_ConnectToInstance.md)
+ [

# 保護 MySQL 資料庫執行個體連線的安全
](securing-mysql-connections.md)
+ [

# 使用 Amazon RDS Optimized Reads 改善 RDS for MySQL 的查詢效能
](rds-optimized-reads.md)
+ [

# 使用 RDS Optimized Writes 改善 MySQL 的寫入效能
](rds-optimized-writes.md)
+ [

# RDS for MySQL 資料庫引擎的升級
](USER_UpgradeDBInstance.MySQL.md)
+ [

# 升級 MySQL 資料庫快照引擎版本
](mysql-upgrade-snapshot.md)
+ [

# 將資料匯入至 Amazon RDS for MySQL 資料庫執行個體
](MySQL.Procedural.Importing.Other.md)
+ [

# 在 Amazon RDS 中使用 MySQL 複寫
](USER_MySQL.Replication.md)
+ [

# 為 RDS for MySQL 設定主動-主動叢集
](mysql-active-active-clusters.md)
+ [

# 使用複寫從 MySQL 資料庫執行個體匯出資料
](MySQL.Procedural.Exporting.NonRDSRepl.md)
+ [

# MySQL 資料庫執行個體的選項
](Appendix.MySQL.Options.md)
+ [

# MySQL 的參數
](Appendix.MySQL.Parameters.md)
+ [

# MySQL 資料庫執行個體的常用 DBA 任務
](Appendix.MySQL.CommonDBATasks.md)
+ [

# MySQL 資料庫執行個體的本機時區
](MySQL.Concepts.LocalTimeZone.md)
+ [

# Amazon RDS for MySQL 的已知問題和限制
](MySQL.KnownIssuesAndLimitations.md)
+ [

# RDS for MySQL 預存程序參考
](Appendix.MySQL.SQLRef.md)

# Amazon RDS 上的 MySQL 功能支援
<a name="MySQL.Concepts.FeatureSupport"></a>

RDS for MySQL 支援 MySQL 的大多數特性與功能。部分功能的支援或權限可能有所限制。

您可以在[資料庫的最新資訊](https://aws.amazon.com/about-aws/whats-new/database/)頁面上篩選新的 Amazon RDS 功能。對於 **Products** (產品)，請選擇 **Amazon RDS**。然後使用關鍵字搜尋，例如 **MySQL 2022**。

**注意**  
以下清單並非詳盡清單。

**Topics**
+ [

## Amazon RDS for MySQL 主要版本的 MySQL 功能支援
](#MySQL.Concepts.FeatureSupport.MajorVersions)
+ [

## 支援的 RDS for MySQL 儲存引擎
](#MySQL.Concepts.Storage)
+ [

## Amazon RDS 上的 MySQL 搭配使用 Memcached 與其他選項
](#MySQL.Concepts.General.Options)
+ [

## Amazon RDS 上 MySQL 的 InnoDB 快取預備
](#MySQL.Concepts.InnoDBCacheWarming)
+ [

## RDS for MySQL 8.4 的包容性語言變更
](#mysql-8-4-inclusive-language-changes)
+ [

## Amazon RDS 不支援的 MySQL 功能
](#MySQL.Concepts.Features)

## Amazon RDS for MySQL 主要版本的 MySQL 功能支援
<a name="MySQL.Concepts.FeatureSupport.MajorVersions"></a>

在以下幾節中，參閱 Amazon RDS for MySQL 主要版本的 MySQL 功能支援相關資訊：

**Topics**
+ [

### Amazon RDS 上的 MySQL 功能支援
](#MySQL.Concepts.FeatureSupport.8-4)

如需 Amazon RDS for MySQL 支援次要版本的相關資訊，請參閱 [Amazon RDS 上支援的 MySQL 次要版本](MySQL.Concepts.VersionMgmt.md#MySQL.Concepts.VersionMgmt.Supported)。

### Amazon RDS 上的 MySQL 功能支援
<a name="MySQL.Concepts.FeatureSupport.8-4"></a>

對於執行 MySQL 8.4 版或更高版本的資料庫執行個體，Amazon RDS 支援下列新功能：
+ **密碼編譯程式庫** – RDS for MySQL 以 FIPS 140-3 認證的 AWS Libcrypto (AWS-LC) 取代 OpenSSL。如需詳細資訊，請參閱位於 的 AWS-LC GitHub 儲存庫[https://github.com/aws/aws-lc](https://github.com/aws/aws-lc)。
+ **TLS 變更** – RDS for MySQL 僅支援 TLS 1.2 和 TLS 1.3。如需詳細資訊，請參閱[Amazon RDS 對 MySQL 資料庫執行個體的 SSL/TLS 支援](MySQL.Concepts.SSLSupport.md)。
+ **memcached 支援** – MySQL 8.4 不再提供 memcached 介面。如需詳細資訊，請參閱[MySQL memcached 支援](Appendix.MySQL.Options.memcached.md)。
+ **預設身分驗證外掛程式** – 預設身分驗證外掛程式為 `caching_sha2_password`。如需詳細資訊，請參閱[MySQL 預設身分驗證外掛程式](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin)。
+ **`mysqlpump` 用戶端公用程式** – MySQL 8.4 不再提供 `mysqlpump` 用戶端公用程式。如需詳細資訊，請參閱 *AWS 方案指引*中的 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md) 與 [mysqldump 和 mysqlpump](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-large-mysql-mariadb-databases/mysqldump-and-mysqlpump.html)。
+ **受管複寫預存程序** – 使用預存程序來管理為複寫使用者設定了 `caching_sha2_password` 的複寫時，您必須指定 `SOURCE_SSL=1` 以設定 TLS。`caching_sha2_password` 是 RDS for MySQL 8.4 的預設身分驗證外掛程式。
+ **參數行為變更** – MySQL 8.4 的下列參數已變更。
  + `innodb_dedicated_server` – 根據預設，現在會啟用此參數。如需詳細資訊，請參閱[在 MySQL 8.4 中設定緩衝集區大小和重做日誌容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。
  + `innodb_buffer_pool` – 資料庫引擎現在會計算此參數，但您可以覆寫此設定。如需詳細資訊，請參閱[在 MySQL 8.4 中設定緩衝集區大小和重做日誌容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。
  + `innodb_redo_log_capacity` – 此參數現在會控制重做日誌檔案的大小。資料庫引擎現在會計算此參數，但您可以覆寫此設定。如需詳細資訊，請參閱[在 MySQL 8.4 中設定緩衝集區大小和重做日誌容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。
+ **已棄用或已移除參數** – RDS for MySQL 已從 MySQL 8.4 資料庫執行個體的參數群組中移除下列參數。`innodb_redo_log_capacity` 參數現在會控制重做日誌檔案的大小。
  + `innodb_log_file_size`
  + `innodb_log_files_in_group`
+ **參數的新預設值**：下列參數在 MySQL 8.4 資料庫執行個體中有新的預設值：
  + 與效能相關的各種 MySQL 社群參數已變更。如需詳細資訊，請參閱 [MySQL 8.4 自 MySQL 8.0 以來的新功能](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html)。

    建議您在遷移生產執行個體之前，先在 RDS for MySQL 8.4 上測試應用程式的效能。
  + `innodb_purge_threads` – 預設值設定為公式 `LEAST({DBInstanceVCPU/2},4)`，用以防止 InnoDB 歷史記錄清單長度過大。
  + `group_replication_exit_state_action` – 預設值為 `OFFLINE_MODE`，與 MySQL 社群中的預設值相符。如需詳細資訊，請參閱[RDS for MySQL 主動-主動叢集的考量和最佳實務](mysql-active-active-clusters-considerations-limitations.md#mysql-active-active-clusters-considerations)。
  + `binlog_format` – 預設值為 `ROW`，與 MySQL 社群中的預設值相符。您可以修改單一可用區域資料庫執行個體或多可用區域資料庫執行個體的參數，但對於多可用區域資料庫叢集則無法修改。多可用區域資料庫叢集會使用半同步複寫，且在 `binlog_format` 設定為 `MIXED` 或 `STATEMENT` 時，複寫會失敗。
+ **包容性語言變更** – RDS for MySQL 8.4 包含 RDS for MySQL 8.0 中與包容性語言的關鍵字和系統結構描述有關的變更。如需詳細資訊，請參閱[RDS for MySQL 8.4 的包容性語言變更](#mysql-8-4-inclusive-language-changes)。

如需所有 MySQL 8.4 功能和變更的清單，請參閱 MySQL 文件中的 [MySQL 8.4 自 MySQL 8.0 以來的新功能](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html)。

如需未支援的功能清單，請參閱[Amazon RDS 不支援的 MySQL 功能](#MySQL.Concepts.Features)。

## 支援的 RDS for MySQL 儲存引擎
<a name="MySQL.Concepts.Storage"></a>

雖然 MySQL 支援多種功能不盡相同的儲存引擎，但並非所有引擎的復原能力和資料耐用性都經過最佳化設計。Amazon RDS 可完整支援適用於 MySQL 資料庫執行個體的 InnoDB 儲存引擎。時間點還原和快照還原等 Amazon RDS 功能皆需搭配可復原的儲存引擎才能執行，且僅支援 InnoDB 儲存引擎。如需詳細資訊，請參閱[MySQL memcached 支援](Appendix.MySQL.Options.memcached.md)。

聯合儲存引擎目前不支援 Amazon RDS for MySQL。

若結構描述是由使用者建立，則 MyISAM 儲存引擎不支援可靠的復原功能，且還原作業結束後重新啟動 MySQL 時，可能發生資料遺失或毀損等問題，進而導致時間點還原或快照還原功能無法如預期般順利運作。然而，若您仍選擇將 MyISAM 與 Amazon RDS 搭配使用，在某些情況下，快照仍可派上用場。

**注意**  
`mysql` 結構描述中的系統資料表可能位於 MyISAM 儲存引擎中。

如果將現有的 MyISAM 資料表轉換為 InnoDB 資料表，您可以使用 `ALTER TABLE` 命令 (例如，`alter table TABLE_NAME engine=innodb;`)。請記得，MyISAM 和 InnoDB 各有優劣之處，以應用程式執行轉換作業之前，應先完整評估相關影響。

Amazon RDS 不再支援 MySQL 5.1、5.5 和 5.6。但您仍可使用現有的 MySQL 5.1、5.5 和 5.6 快照進行還原作業。當您還原 MySQL 5.1、5.5 或 5.6 快照時，資料庫執行個體會自動升級為 MySQL 5.7。

## Amazon RDS 上的 MySQL 搭配使用 Memcached 與其他選項
<a name="MySQL.Concepts.General.Options"></a>

大部分的 Amazon RDS 資料庫引擎均支援選項群組，讓您可為資料庫執行個體選擇其他功能。RDS for MySQL 資料庫執行個體支援 `memcached` 選項，這是一種簡單的金鑰型快取。如需 `memcached` 和其他選項的詳細資訊，請參閱[MySQL 資料庫執行個體的選項](Appendix.MySQL.Options.md)。如需使用選項群組的相關詳細資訊，請參閱[使用選項群組](USER_WorkingWithOptionGroups.md)。

## Amazon RDS 上 MySQL 的 InnoDB 快取預備
<a name="MySQL.Concepts.InnoDBCacheWarming"></a>

InnoDB 快取預備功能可在資料庫執行個體關閉時，儲存緩衝集區的當前狀態，等到資料庫執行個體啟動時，再使用儲存的資訊重新載入緩衝集區，藉此提升 MySQL 資料庫執行個體的效能。如此一來，系統不必從正常的資料庫使用方式開始為緩衝集區「熱機」，而是透過已知常用查詢的頁面預先載入緩衝集區。儲存緩衝集區資訊的檔案只會存放緩衝集區中的頁面中繼資料，而非頁面本身。因此，該檔案不需要太多儲存空間。檔案大小約為快取大小的 0.2%。例如，若為 64 GiB 的快取，則快取預備檔案大小僅會有 128 MiB。如需使用 InnoDB 快取預備功能的詳細資訊，請參閱 MySQL 文件中的[儲存和還原緩衝集區狀態](https://dev.mysql.com/doc/refman/8.0/en/innodb-preload-buffer-pool.html)。

RDS for MySQL 資料庫執行個體支援 InnoDB 快取預備。若要啟用 InnoDB 快取預備功能，請在資料庫執行個體的參數群組中，將 `innodb_buffer_pool_dump_at_shutdown` 和 `innodb_buffer_pool_load_at_startup` 參數設為 1。變更參數群組中的參數值會影響使用該參數群組的所有 MySQL 資料庫執行個體。若要為特定 MySQL 資料庫執行個體啟用 InnoDB 快取預備功能，您必須為該執行個體另外建立新的參數群組。如需參數群組的相關資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

InnoDB 快取預備功能主要可為使用標準儲存體的資料庫執行個體提供效能方面的好處。若您使用的是 PIOPS 儲存體，一般來說不會察覺到顯著的效能優勢。

**重要**  
如果您的 MySQL 資料庫執行個體沒有正常關閉 (例如容錯移轉期間)，則緩衝集區狀態不會儲存到磁碟中。這種情形下，MySQL 會在資料庫執行個體重新啟動時，載入任何可用的緩衝集區。這不會造成任何損害，只是還原的緩衝集區無法反映緩衝集區在重新啟動之前的最新狀態。為確保您有最新狀態的緩衝集區可在啟動時預備 InnoDB 快取，建議您定期「隨需」傾印緩衝集區。  
您可建立事件，以定期自動傾印緩衝集區。舉例來說，下列陳述式會建立名為 `periodic_buffer_pool_dump` 的事件，每小時傾印緩衝集區一次。  

```
1. CREATE EVENT periodic_buffer_pool_dump 
2. ON SCHEDULE EVERY 1 HOUR 
3. DO CALL mysql.rds_innodb_buffer_pool_dump_now();
```
如需 MySQL 事件的詳細資訊，請參閱 MySQL 文件中的[事件語法](https://dev.mysql.com/doc/refman/8.0/en/events-syntax.html)。

### 隨需傾印與載入緩衝集區
<a name="MySQL.Concepts.InnoDBCacheWarming.OnDemand"></a>

您可「隨需」儲存和載入 InnoDB 快取。
+ 若要將緩衝集區的最新狀態傾印至磁碟，請呼叫 [mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_dump_now) 預存程序。
+ 若要從磁碟載入所儲存的緩衝集區狀態，請呼叫 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_now) 預存程序。
+ 若要取消進行中的載入操作，請呼叫 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_abort) 預存程序。

## RDS for MySQL 8.4 的包容性語言變更
<a name="mysql-8-4-inclusive-language-changes"></a>

RDS for MySQL 8.4 包含 MySQL 8.4 社群版本中與包容性語言的關鍵字和系統結構描述有關的變更。例如，`SHOW REPLICA STATUS` 命令取代了 `SHOW SLAVE STATUS`。

**Topics**
+ [

### 組態參數名稱變更
](#mysql-8-4-inclusive-language-changes-params)
+ [

### 預存程序名稱變更
](#mysql-8-4-inclusive-language-changes-sp)

### 組態參數名稱變更
<a name="mysql-8-4-inclusive-language-changes-params"></a>

下列組態參數在 RDS for MySQL 8.4 中具有新名稱。

為了相容性，您可以使用任一名稱檢查 `mysql` 用戶端中的參數名稱。修改自訂 MySQL 8.4 參數群組中的值時，您只能使用新名稱。如需詳細資訊，請參閱[預設和自訂參數群組](parameter-groups-overview.md#parameter-groups-overview.custom)。


| 要移除的名稱 | 新名稱或偏好名稱 | 
| --- | --- | 
|  `init_slave`  |  `init_replica`  | 
|  `log_slave_updates`  |  `log_replica_updates`  | 
|  `log_slow_slave_statements`  |  `log_slow_replica_statements`  | 
|  `rpl_stop_slave_timeout`  |  `rpl_stop_replica_timeout`  | 
|  `skip_slave_start`  |  `skip_replica_start`  | 
|  `slave_checkpoint_group`  |  `replica_checkpoint_group`  | 
|  `slave_checkpoint_period`  |  `replica_checkpoint_period`  | 
|  `slave_compressed_protocol`  |  `replica_compressed_protocol`  | 
|  `slave_exec_mode`  |  `replica_exec_mode`  | 
|  `slave_load_tmpdir`  |  `replica_load_tmpdir`  | 
|  `slave_max_allowed_packet`  |  `replica_max_allowed_packet`  | 
|  `slave_net_timeout`  |  `replica_net_timeout`  | 
|  `slave_parallel_type`  |  `replica_parallel_type`  | 
|  `slave_parallel_workers`  |  `replica_parallel_workers`  | 
|  `slave_pending_jobs_size_max`  |  `replica_pending_jobs_size_max`  | 
|  `slave_preserve_commit_order`  |  `replica_preserve_commit_order`  | 
|  `slave_skip_errors`  |  `replica_skip_errors`  | 
|  `slave_sql_verify_checksum`  |  `replica_sql_verify_checksum`  | 
|  `slave_transaction_retries`  |  `replica_transaction_retries`  | 
|  `slave_type_conversions`  |  `replica_type_conversions`  | 
|  `sql_slave_skip_counter`  |  `sql_replica_skip_counter`  | 

**注意**  
參數 `replica_allow_batching` 無法使用，因為 Amazon RDS 不支援 NDB 叢集。

### 預存程序名稱變更
<a name="mysql-8-4-inclusive-language-changes-sp"></a>

下列預存程序在 RDS for MySQL 8.4 中具有新名稱。

為了相容性，您可以在初始的 RDS for MySQL 8.4 版本中使用任一名稱。未來版本將移除舊的程序名稱。如需詳細資訊，請參閱[設定、啟動和停止二進位日誌 (binlog) 複寫](mysql-stored-proc-replicating.md)。


| 要移除的名稱 | 新名稱或偏好名稱 | 
| --- | --- | 
|  `mysql.rds_next_master_log`  |  `mysql.rds_next_source_log `  | 
|  `mysql.rds_reset_external_master`  |  `mysql.rds_reset_external_source`  | 
|  `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_set_external_master_with_delay`  |  `mysql.rds_set_external_source_with_delay`  | 
|  `mysql.rds_set_master_auto_position`  |  `mysql.rds_set_source_auto_position`  | 

## Amazon RDS 不支援的 MySQL 功能
<a name="MySQL.Concepts.Features"></a>

Amazon RDS 目前不支援下列 MySQL 功能：
+ 身分驗證外掛程式
+ 登入系統日誌時發生錯誤
+ InnoDB 資料表空間加密
+ NDB 叢集
+ 密碼強度外掛程式
+ 持續的系統變數
+ 重寫器查詢重寫外掛程式
+ 半同步複寫，多可用區域資料庫叢集除外
+ 可傳輸的資料表空間
+ X 外掛程式

為了提供受管理的服務體驗，Amazon RDS 並不會提供資料庫執行個體的殼層存取權。而且會將存取權限制在某些需要進階權限的系統程序和資料表。Amazon RDS 可支援使用任何標準 SQL 用戶端應用程式存取資料庫執行個體上的資料庫。Amazon RDS 不允許使用者利用 Telnet、安全殼層 (SSH) 或 Windows 遠端桌面連線，直接託管資料庫執行個體的存取權。在建立資料庫執行個體時，系統將您指派為該執行個體上所有資料庫的 *db\$1owner*，讓您獲得資料庫層級的所有許可 (用於備份的許可除外)。Amazon RDS 會為您管理備份。

# MySQL on Amazon RDS 版本
<a name="MySQL.Concepts.VersionMgmt"></a>

若為 MySQL，版本編號組織為版本 = X.Y.Z。在 Amazon RDS 術語中，X.Y 代表主要版本，Z 則代表次要版本編號。進行 Amazon RDS 實作時，若主要版本編號有變化 — 例如從 5.7 版更新至 8.0 版，即屬於主要版本變更。如果只有次要版本編號有所變更 (例如從 8.0.32 版變更至 8.0.34 版)，則視為次要版本變更。

**Topics**
+ [

## Amazon RDS 上支援的 MySQL 次要版本
](#MySQL.Concepts.VersionMgmt.Supported)
+ [

## Amazon RDS 上支援的 MySQL 主要版本
](#MySQL.Concepts.VersionMgmt.ReleaseCalendar)
+ [

## RDS for MySQL 的 Amazon RDS 延長支援版本
](#mysql-extended-support-releases)
+ [

## 使用資料庫預覽環境
](#mysql-working-with-the-database-preview-environment)
+ [

## 資料庫預覽環境中的 MySQL 9.5 版
](#mysql-preview-environment-version-9-5)
+ [

## 資料庫預覽環境中的 MySQL 9.4 版
](#mysql-preview-environment-version-9-4)
+ [

## 資料庫預覽環境中的 MySQL 9.3 版
](#mysql-preview-environment-version-9-3)
+ [

## Amazon RDS for MySQL 的已取代版本
](#MySQL.Concepts.DeprecatedVersions)

## Amazon RDS 上支援的 MySQL 次要版本
<a name="MySQL.Concepts.VersionMgmt.Supported"></a>

Amazon RDS 目前支援下列 MySQL 次要版本。

**注意**  
對於次要版本不提供 Amazon RDS 延長支援。

下表顯示 Amazon RDS 目前支援的 MySQL 8.4 次要版本。


| MySQL 引擎版本 | 社群發佈日期 | RDS 發佈日期 | RDS 標準支援結束日期 | 
| --- | --- | --- | --- | 
|  8.4.8  |  2026 年 1 月 20 日  |  2026 年 2 月 3 日  | 2027 年 2 月 3 日 | 
|  8.4.7  |  2025 年 10 月 21 日  |  2025 年 11 月 13 日  | 2026 年 11 月 30 日 | 
|  8.4.6  |  2025 年 7 月 22 日  |  2025 年 8 月 1 日  | 2026 年 9 月 30 日 | 
|  8.4.5  |  2025 年 4 月 15 日  |  2025 年 4 月 29 日  | 2026 年 9 月 30 日 | 
|  8.4.4  |  2025 年 1 月 21 日  |  2025 年 2 月 19 日  | 2026 年 5 月 31 日 | 
|  8.4.3  |  2024 年 10 月 15 日  |  2024 年 11 月 21 日  | 2026 年 5 月 31 日 | 

下表顯示 Amazon RDS 目前支援的 MySQL 8.0 次要版本。

**注意**  
次要版本可能會在主要版本之前結束標準支援。例如，次要版本 8.0.28 在 2024 年 3 月 28 日達到標準支援結束日期，而主要版本 8.0 則在 2026 年 7 月 31 日才達到此日期。RDS 將支援 MySQL 社群在這些日期之間發行的其他 8.0.\$1 次要版本。對於所有主要版本，建議您盡可能頻繁地升級至最新的可用次要版本。


| MySQL 引擎版本 | 社群發佈日期 | RDS 發佈日期 | RDS 標準支援結束日期 | 
| --- | --- | --- | --- | 
|  8.0.45  |  2026 年 1 月 20 日  |  2026 年 2 月 3 日 |  2026 年 7 月 31 日  | 
|  8.0.44  |  2025 年 10 月 21 日  |  2025 年 11 月 13 日 |  2026 年 7 月 31 日  | 
|  8.0.43  |  2025 年 7 月 22 日  |  2025 年 8 月 1 日 |  2026 年 7 月 31 日  | 
|  8.0.42  |  2025 年 4 月 15 日  |  2025 年 4 月 29 日 |  2026 年 7 月 31 日  | 
|  8.0.41  |  2025 年 1 月 21 日  |  2025 年 2 月 19 日 |  2026 年 5 月 31 日  | 
|  8.0.40  |  2024 年 10 月 15 日  |  2024 年 11 月 13 日 | 2026 年 5 月 31 日 | 

下表顯示 Amazon RDS 延長支援提供的 MySQL 5.7 次要版本。

**注意**  
次要版本可能會在主要版本之前結束延長支援。例如，次要版本 5.7.44-RDS.20240529 在 2025 年 9 月達到延長支援結束日期，而主要版本 5.7 則在 2027 年 2 月 28 日才會達到此日期。RDS 將在這些日期之間產生並發行其他 5.7.44-RDS.xxyyzz 次要版本。對於所有主要版本，建議您盡可能頻繁地升級至最新的可用次要版本。


| MySQL 引擎版本 | 社群發佈日期 | RDS 發佈日期 | RDS 延長支援結束日期 | 
| --- | --- | --- | --- | 
|  5.7.44-RDS.20260212\$1  | 不適用 | 2026 年 2 月 26 日 | 2027 年 2 月 28 日 | 
|  5.7.44-RDS.20251212\$1  | 不適用 | 2025 年 12 月 12 日 | 2026 年 12 月 30 日 | 
|  5.7.44-RDS.20250818\$1  | 不適用 | 2025 年 9 月 15 日 | 2026 年 9 月 30 日 | 
|  5.7.44-RDS.20250508\$1  | 不適用 | 2025 年 5 月 20 日 | 2026 年 9 月 30 日 | 
|  5.7.44-RDS.20250213\$1  | 不適用 | 2025 年 3 月 12 日 | 2026 年 9 月 30 日 | 
|  5.7.44-RDS.20250103\$1  | 不適用 | 2025 年 2 月 13 日 | 2026 年 5 月 31 日 | 

\$1 MySQL 社群已淘汰主要版本 5.7，且不會發行新的次要版本。這是 Amazon RDS 發行的次要版本，其中包含 RDS 延長支援所涵蓋的 MySQL 5.7 資料庫適用的重大安全修補程式和錯誤修正。如需這些次要版本的詳細資訊，請參閱 [RDS for MySQL 的 Amazon RDS 延長支援版本](#mysql-extended-support-releases)。如需 RDS 延長支援的詳細資訊，請參閱 [使用 Amazon RDS 的 Amazon RDS 延伸支援](extended-support.md)。

建立新的資料庫執行個體時，您可以指定使用目前支援的任一 MySQL 版本。您可以指定主要版本 (如 MySQL 5.7)，並指定使用主要版本所支援的任一次要版本。若未指定版本，Amazon RDS 會預設使用支援的版本，通常是最新版本。若已指定主要版本，但未指定次要版本，Amazon RDS 會預設使用您指定主要版本的最新次要版本。若要查看支援的版本清單，以及新建立資料庫執行個體的預設值，請執行 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI 命令。

例如，若要列出支援 RDS for MySQL 的引擎版本，請執行下列 CLI 命令：

```
aws rds describe-db-engine-versions --engine mysql --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

預設的 MySQL 版本可能會隨著 AWS 區域而有所不同。若要建立具有特定次要版本的資料庫執行個體，請在建立資料庫執行個體期間指定次要版本。您可以執行下列 AWS CLI 命令 AWS 區域 來判斷 的預設次要版本：

```
aws rds describe-db-engine-versions --default-only --engine mysql --engine-version major_engine_version --region region --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

將 *major-engine-version* 取代為主要引擎版本，並將 *region* 取代為 AWS 區域。例如，下列 AWS CLI 命令會傳回 5.7 主要版本和美國西部 （奧勒岡） AWS 區域 (us-west-2) 的預設 MySQL 次要引擎版本：

```
aws rds describe-db-engine-versions --default-only --engine mysql --engine-version 5.7 --region us-west-2 --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

透過 Amazon RDS，即可控制將 MySQL 執行個體升級至新主要版本的時機，而該版本受 Amazon RDS 支援。您可以維持特定 MySQL 版本的相容性，在部署至生產環境前，先利用您的應用程式測試新版本，並在合適的時間執行主要版本升級。

啟用自動化次要版本升級時，資料庫執行個體將自動升級為新的 MySQL 次要版本，因為它們受到 Amazon RDS 支援。此修補會在您排程的維護時段發生。您可以修改資料庫執行個體，以啟用或停用自動次要版本升級。

若您選擇不要自動排程升級，可以按照更新主要版本的相同程序，手動升級至支援的次要版本。如需相關資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

對於 MySQL 資料庫引擎的主要版本，Amazon RDS 目前支援下列升級：
+ MySQL 5.7 至 MySQL 8.0
+ MySQL 8.0 至 MySQL 8.4

主要版本升級可能牽涉相容性風險，因此系統不會自動執行升級，您必須提出修改資料庫執行個體的請求才行。升級生產用途的執行個體前，應先完整測試升級版本。如需升級 MySQL 資料庫執行個體的相關資訊，請參閱[RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。

您可以建立現有資料庫執行個體的資料庫快照、以資料庫快照還原並建立新的資料庫執行個體，然後啟動新資料庫執行個體的版本升級，藉此在升級前先行測試資料庫執行個體與新版本的相容情形。接著，您就可以放心在升級的複製資料庫執行個體上測試，再決定是否要升級原有的資料庫執行個體。

### Amazon RDS 上的 MySQL 次要版本
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor"></a>

有關 MySQL 社群對於次要版本所做的變更，請參閱 Oracle 網站上的[重大修補程式更新、安全提醒和公告](https://www.oracle.com/security-alerts/)。在**重大修補程式更新**底下，選擇 Oracle 發行次要版本的月份。然後，選擇**受影響的產品和版本**底下的 MySQL 次要版本。

**Topics**
+ [

#### MySQL 8.4.8 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.8)
+ [

#### MySQL 8.4.7 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.7)
+ [

#### MySQL 8.4.6 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.6)
+ [

#### MySQL 8.4.5 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.5)
+ [

#### MySQL 8.4.4 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.4)
+ [

#### MySQL 8.0.45 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.45)
+ [

#### MySQL 8.0.44 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.44)
+ [

#### MySQL 8.0.43 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.43)
+ [

#### MySQL 8.0.42 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.42)
+ [

#### MySQL 8.0.41 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.41)
+ [

#### MySQL 8.0.40 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.40)
+ [

#### MySQL 8.0.39 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.39)
+ [

#### MySQL 8.0.37 版
](#MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.37)

#### MySQL 8.4.8 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.8"></a>

MySQL 8.4.8 版現已在 Amazon RDS 上提供。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 更新了時區資訊，使其基於 `tzdata2025c`。
+ 修正可能導致某些 SQL 陳述式無法記錄在稽核日誌中的問題。

#### MySQL 8.4.7 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.7"></a>

MySQL 8.4.7 版現已在 Amazon RDS 上提供。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

#### MySQL 8.4.6 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.6"></a>

MySQL 8.4.6 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

#### MySQL 8.4.5 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.5"></a>

MySQL 8.4.5 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 更新了時區資訊，使其基於 `tzdata2025b`。

#### MySQL 8.4.4 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.4.4"></a>

MySQL 8.4.4 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 更新了時區資訊，使其基於 `tzdata2025a`。
+ 已修正在執行 Amazon RDS 預存程序 `mysql.rds_set_configuration` 和 `mysql.rds_kill` 時導致定序錯誤的錯誤。

#### MySQL 8.0.45 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.45"></a>

MySQL 8.0.45 版現已在 Amazon RDS 上提供。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 更新了時區資訊，使其基於 `tzdata2025c`。
+ 修正可能導致某些 SQL 陳述式無法記錄在稽核日誌中的問題。

#### MySQL 8.0.44 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.44"></a>

MySQL 8.0.44 版現已在 Amazon RDS 上提供。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

#### MySQL 8.0.43 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.43"></a>

MySQL 8.0.43 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

#### MySQL 8.0.42 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.42"></a>

MySQL 8.0.42 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 更新了時區資訊，使其基於 `tzdata2025b`。

#### MySQL 8.0.41 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.41"></a>

MySQL 8.0.41 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 更新了時區資訊，使其基於 `tzdata2025a`。
+ 已修正在執行 Amazon RDS 預存程序 `mysql.rds_set_configuration` 和 `mysql.rds_kill` 時導致定序錯誤的錯誤。

#### MySQL 8.0.40 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.40"></a>

MySQL 8.0.40 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 已修正在資料庫升級期間導致字元集不相符失敗的錯誤。

#### MySQL 8.0.39 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.39"></a>

MySQL 8.0.39 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 已修正 `sql_log_off` 在 `SESSION_VARIABLES_ADMIN` 權限下無法正常運作的錯誤。
+ 已修正使主要使用者無法為其他資料庫使用者授予 `SESSION_VARIABLE_ADMIN` 權限的錯誤。
+ 已修正在執行 RDS 提供的預存程序時導致定序非法混合的錯誤。

#### MySQL 8.0.37 版
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor.8.0.37"></a>

MySQL 8.0.37 版現已可在 Amazon RDS 上使用。此版本包含由 MySQL 社群和 Amazon RDS 新增的修正和改進。

**新功能和增強功能**
+ 已修正執行的即時 DDL 陳述式若後接 UPDATE 即會導致聲明失敗的錯誤。

## Amazon RDS 上支援的 MySQL 主要版本
<a name="MySQL.Concepts.VersionMgmt.ReleaseCalendar"></a>

RDS for MySQL 主要版本在標準支援下，至少在對應的社群版本生命週期結束前會保持可用。您可以在 RDS 標準支援結束日期之後繼續付費執行主要版本。如需詳細資訊，請參閱 [使用 Amazon RDS 的 Amazon RDS 延伸支援](extended-support.md) 和 [Amazon RDS for MySQL 定價](https://aws.amazon.com/rds/mysql/pricing/)。

您可以使用下列日期來規劃測試和升級週期。

**注意**  
您也可以使用 AWS CLI 或 RDS API，檢視主要引擎版本支援日期的相關資訊。如需詳細資訊，請參閱[在 Amazon RDS 延伸支援中檢視引擎版本的支援日期](extended-support-viewing-support-dates.md)。


| MySQL 主要版本 | 社群發佈日期 | RDS 發佈日期 | 社群生命週期結束日期 | RDS 標準支援結束日期 | RDS 延長支援第 1 年定價開始日期 | RDS 延長支援第 3 年定價開始日期 | RDS 延長支援結束日期 | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  MySQL 8.4  |  2024 年 4 月 30 日  |  2024 年 11 月 21 日  |  2029 年 4 月 30 日  |  2029 年 7 月 31 日  |  2029 年 8 月 1 日  |  2031 年 8 月 1 日  |  2032 年 7 月 31 日  | 
|  MySQL 8.0  |  2018 年 4 月 19 日  |  2018 年 10 月 23 日  |  2026 年 4 月 30 日  |  2026 年 7 月 31 日  |  2026 年 8 月 1 日  |  2028 年 8 月 1 日  |  2029 年 7 月 31 日  | 
|  MySQL 5.7\$1  |  2015 年 10 月 21 日  |  2016 年 2 月 22 日  |  2023 年 10 月 31 日  |  2024 年 2 月 29 日  |  2024 年 3 月 1 日  |  2026 年 3 月 1 日  |  2027 年 2 月 28 日  | 

\$1 MySQL 5.7 目前僅在 RDS 延長支援下提供。如需詳細資訊，請參閱[使用 Amazon RDS 的 Amazon RDS 延伸支援](extended-support.md)。

## RDS for MySQL 的 Amazon RDS 延長支援版本
<a name="mysql-extended-support-releases"></a>

下列內容列出 RDS for MySQL 版本的所有 RDS 延長支援版本。

**Topics**
+ [

### RDS 延長支援 RDS for MySQL 5.7.44-RDS.20260212 版
](#mysql-extended-support-releases-version-5.7.44-RDS.20260212)
+ [

### RDS 延長支援 RDS for MySQL 5.7.44-RDS.20251212 版
](#mysql-extended-support-releases-version-5.7.44-RDS.20251212)
+ [

### RDS 延長支援 RDS for MySQL 5.7.44-RDS.20250818 版
](#mysql-extended-support-releases-version-5.7.44-RDS.20250818)
+ [

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250508 版
](#mysql-extended-support-releases-version-5.7.44-20250508)
+ [

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250213 版
](#mysql-extended-support-releases-version-5.7.44-20250213)
+ [

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250103 版
](#mysql-extended-support-releases-version-5.7.44-20250103)
+ [

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240808 版
](#mysql-extended-support-releases-version-5.7.44-20240808)
+ [

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240529 版
](#mysql-extended-support-releases-version-5.7.44-20240529)
+ [

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240408 版
](#mysql-extended-support-releases-version-5.7.44-20240408)

### RDS 延長支援 RDS for MySQL 5.7.44-RDS.20260212 版
<a name="mysql-extended-support-releases-version-5.7.44-RDS.20260212"></a>

RDS 延長支援 RDS for MySQL 5.7.44-RDS.20260212 版已推出。

**已修正錯誤：**
+ 重新整理用於測試錯誤 22295186 修正的測試憑證。
+ 修正 Blob 資料欄上有字首索引的記憶體流失。

**已修正 CVE：**
+ [CVE-2026-21936](https://nvd.nist.gov/vuln/detail/CVE-2026-21936)
+ [CVE-2026-21968](https://nvd.nist.gov/vuln/detail/CVE-2026-21968)
+ [CVE-2026-21941](https://nvd.nist.gov/vuln/detail/CVE-2026-21941)
+ [CVE-2026-21948](https://nvd.nist.gov/vuln/detail/CVE-2026-21948)

### RDS 延長支援 RDS for MySQL 5.7.44-RDS.20251212 版
<a name="mysql-extended-support-releases-version-5.7.44-RDS.20251212"></a>

RDS 延長支援 RDS for MySQL 5.7.44-RDS.20251212 版已推出。

**已修正錯誤：**
+ 修正緩衝集區大小超過上限時伺服器啟動的問題。
+ 已修正導致伺服器異常結束`INFORMATION_SCHEMA.INNODB_LOCKS`的讀取。
+ 修正 MySQL Test Run (MTR) 中 JUnit 報告支援的問題。
+ 已修正使用 `-DWITH_INNODB_MEMCACHED=ON`選項建置時的編譯問題。
+ 修正錯誤 25182306 的 MySQL Test Run (MTR) 執行問題。

**已修正 CVE：**
+ [CVE-2025-53054](https://nvd.nist.gov/vuln/detail/CVE-2025-53054)
+ [CVE-2025-53044](https://nvd.nist.gov/vuln/detail/CVE-2025-53044)
+ [CVE-2025-53045](https://nvd.nist.gov/vuln/detail/CVE-2025-53045)
+ [CVE-2025-53062](https://nvd.nist.gov/vuln/detail/CVE-2025-53062)
+ [CVE-2025-53040](https://nvd.nist.gov/vuln/detail/CVE-2025-53040)
+ [CVE-2025-53042](https://nvd.nist.gov/vuln/detail/CVE-2025-53042)
+ [CVE-2025-53067](https://nvd.nist.gov/vuln/detail/CVE-2025-53067)

### RDS 延長支援 RDS for MySQL 5.7.44-RDS.20250818 版
<a name="mysql-extended-support-releases-version-5.7.44-RDS.20250818"></a>

RDS 延長支援 RDS for MySQL 5.7.44-RDS.20250818 版已推出。

**已修正錯誤：**
+ 修正當伺服器使用 操作時，查詢重寫外掛程式失敗的問題`autocommit=OFF`。
+ 修正阻止 Debian 和 Ubuntu 組建以無根模式執行的許可問題。
+ 修正錯誤 30875669 的遺失更新。

**已修正 CVE：**
+ [CVE-2025-50082](https://nvd.nist.gov/vuln/detail/CVE-2025-50082)
+ [CVE-2025-50083](https://nvd.nist.gov/vuln/detail/CVE-2025-50083)
+ [CVE-2025-50079](https://nvd.nist.gov/vuln/detail/CVE-2025-50079)
+ [CVE-2025-50084](https://nvd.nist.gov/vuln/detail/CVE-2025-50084)
+ [CVE-2025-50087](https://nvd.nist.gov/vuln/detail/CVE-2025-50087)
+ [CVE-2025-50091](https://nvd.nist.gov/vuln/detail/CVE-2025-50091)
+ [CVE-2025-50101](https://nvd.nist.gov/vuln/detail/CVE-2025-50101)
+ [CVE-2025-50102](https://nvd.nist.gov/vuln/detail/CVE-2025-50102)
+ [CVE-2025-50098](https://nvd.nist.gov/vuln/detail/CVE-2025-50098)
+ [CVE-2025-53023](hhttps://nvd.nist.gov/vuln/detail/CVE-2025-53023)
+ [CVE-2025-50081](https://nvd.nist.gov/vuln/detail/CVE-2025-50081)
+ [CVE-2025-50085](https://nvd.nist.gov/vuln/detail/CVE-2025-50085)
+ [CVE-2025-50077](https://nvd.nist.gov/vuln/detail/CVE-2025-50077)
+ [CVE-2025-50088](https://nvd.nist.gov/vuln/detail/CVE-2025-50088)
+ [CVE-2025-50092](https://nvd.nist.gov/vuln/detail/CVE-2025-50092)
+ [CVE-2025-50099](https://nvd.nist.gov/vuln/detail/CVE-2025-50099)
+ [CVE-2025-50096](https://nvd.nist.gov/vuln/detail/CVE-2025-50096)

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250508 版
<a name="mysql-extended-support-releases-version-5.7.44-20250508"></a>

適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250508 版已推出。

**已修正錯誤：**
+ 修正當 `index_id` 大於最大值 `uint32` 時，虛擬索引在復原後不穩定的問題。
+ 已修正測試因記憶體而失敗的問題。
+ 已修正 `<NAME>Execute</NAME>` 的 `<COMMAND_CLASS>` 為空的問題。
+ 已修正 Compile MySQL 搭配 GCC 14 [noclose 5.7] 的問題。

**已修正 CVE：**
+ [CVE-2025-30682](https://nvd.nist.gov/vuln/detail/CVE-2025-30682)
+ [CVE-2025-30687](https://nvd.nist.gov/vuln/detail/CVE-2025-30687)
+ [CVE-2025-30688](https://nvd.nist.gov/vuln/detail/CVE-2025-30688)
+ [CVE-2025-21581](https://nvd.nist.gov/vuln/detail/CVE-2025-21581)
+ [CVE-2025-21585](https://nvd.nist.gov/vuln/detail/CVE-2025-21585)
+ [CVE-2025-30689](https://nvd.nist.gov/vuln/detail/CVE-2025-30689)
+ [CVE-2025-30722](https://nvd.nist.gov/vuln/detail/CVE-2025-30722)
+ [CVE-2025-21577](https://nvd.nist.gov/vuln/detail/CVE-2025-21577)
+ [CVE-2025-30693](https://nvd.nist.gov/vuln/detail/CVE-2025-30693)
+ [CVE-2025-30695](https://nvd.nist.gov/vuln/detail/CVE-2025-30695)
+ [CVE-2025-30703](https://nvd.nist.gov/vuln/detail/CVE-2025-30703)

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250213 版
<a name="mysql-extended-support-releases-version-5.7.44-20250213"></a>

適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250213 版已推出。

**已修正錯誤：**
+ 已修正 InnoDB 聲明 `result != FTS_INVALID` 失敗的問題。
+ 已修正在 `ALTER TABLE` 操作使用 `INPLACE` 演算法重建 InnoDB 資料表後，空間索引會失效並大範圍損毀的問題。
+ 已修正在 `innobase_get_computed_value` 中產生的資料欄損毀的 `ON DELETE CASCADE`。
+ 已修正在 `row_MySQL_pad_col` 中宣告失敗的問題。
+ 已修正線上 DDL 會導致下列錯誤的問題：`ERROR 1712 (HY000): Index PRIMARY is corrupted`。
+ 已修正 `Item_rollup_sum_switcher::current_arg` 的當機問題。
+ 已修正在 `DROP USER` 上未排清資料庫快取的問題。
+ 已修正 `my_print_help` 中的緩衝區溢位問題。
+ 已修正 `FULLTEXT` 索引將 `FTS_DOC_ID` 限制為 32 位元不帶正負號最大值的 InnoDB 問題。

**已修正 CVE：**
+ [CVE-2025-21497](https://nvd.nist.gov/vuln/detail/CVE-2025-21497)
+ [CVE-2025-21555](https://nvd.nist.gov/vuln/detail/CVE-2025-21555)
+ [CVE-2025-21559](https://nvd.nist.gov/vuln/detail/CVE-2025-21559)
+ [CVE-2025-21490](https://nvd.nist.gov/vuln/detail/CVE-2025-21490)
+ [CVE-2025-21491](https://nvd.nist.gov/vuln/detail/CVE-2025-21491)
+ [CVE-2025-21500](https://nvd.nist.gov/vuln/detail/CVE-2025-21500)
+ [CVE-2025-21501](https://nvd.nist.gov/vuln/detail/CVE-2025-21501)
+ [CVE-2025-21540](https://nvd.nist.gov/vuln/detail/CVE-2025-21540)
+ [CVE-2025-21543](https://nvd.nist.gov/vuln/detail/CVE-2025-21543)
+ [CVE-2025-21520](https://nvd.nist.gov/vuln/detail/CVE-2025-21520)

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250103 版
<a name="mysql-extended-support-releases-version-5.7.44-20250103"></a>

適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20250103 版已推出。

**已修正錯誤：**
+ 已修正在相同交易中捨棄和新增 `FULLTEXT` 索引時的 FTS 清除問題。
+ 已最佳化 MySQL 用戶端中的記憶體配置時間點，以防止任何潛在的洩漏。
+ 已修正在使用 `UNION` 運算子時，結果截斷為 34 位元組的問題。
+ 已修正授權碼中的 `ulong bitmask` 可能造成的超出範圍存取問題。

**已修正 CVE：**
+ [CVE-2024-21230](https://nvd.nist.gov/vuln/detail/CVE-2024-21230)
+ [CVE-2024-21201](https://nvd.nist.gov/vuln/detail/CVE-2024-21201)
+ [CVE-2024-21241](https://nvd.nist.gov/vuln/detail/CVE-2024-21241)
+ [CVE-2024-21203](https://nvd.nist.gov/vuln/detail/CVE-2024-21203)

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240808 版
<a name="mysql-extended-support-releases-version-5.7.44-20240808"></a>

適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240808 版已推出。

**已修正錯誤：**
+ 已修正與字典資料欄索引相關的聲明失敗。
+ 已修正 `is_binlog_cache_empty()` 函數的問題。
+ 已修正 `sql/item.cc` 檔案中的 `heap-use-after-free` 錯誤。
+ 已修正數個空間索引問題 (方法是停用其 `index-only` 讀取)。
+ 已修正 `LOCK_ORDER: CONNECTION_CONTROL` 外掛程式的檢測問題。
+ 已修正執行緒停滯於 `CONNECTION_CONTROL` 外掛程式的問題。
+ 已修正未針對 `PREPARED STATEMENTS` 更新 `PSI_THREAD_INFO` 的問題。
+ 已修正 `innodb_optimize_fulltext_only` 會重複處理 FTS 索引單字的問題。

**已修正 CVE：**
+ [CVE-2024-21177](https://nvd.nist.gov/vuln/detail/CVE-2024-21177)

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240529 版
<a name="mysql-extended-support-releases-version-5.7.44-20240529"></a>

適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240529 版已推出。

**已修正錯誤：**
+ 已修正 `field.cc` 宣告失敗問題 (實作 `fix_after_pullout`)。
+ 已修正為特定 SQL 查詢傳回中繼資料給用戶端時發生的 null 指標失敗。這些查詢在 `SELECT` 子句中包含了動態參數和子查詢。
+ 已修正使用 `GROUP BY` 進行鬆散索引掃描或掃描索引的不連續範圍時產生的錯誤結果。
+ 已修正 MySQL 損毀在持續期間遺失 GTID 資訊的問題。
+ 已修正可能導致 InnoDB 交易無限期停止回應的競爭條件。
+ 已修正群組複寫憑證資訊清除中的一項競爭條件。
+ 已修正並行頁面操作的向後索引掃描問題。
+ 已修正並行案例中的全文檢索搜尋 (FTS) 狀態不一致的問題。
+ 已修正變更緩衝區在刪除資料表時的聲明問題。
+ 已統一各種外掛程式類型呼叫 `deinit` 函數的行為。

**已修正 CVE：**
+ [CVE-2024-20963](https://nvd.nist.gov/vuln/detail/CVE-2024-20963)
+ [CVE-2024-20993](https://nvd.nist.gov/vuln/detail/CVE-2024-20993)
+ [CVE-2024-20998](https://nvd.nist.gov/vuln/detail/CVE-2024-20998)
+ [CVE-2024-21009](https://nvd.nist.gov/vuln/detail/CVE-2024-21009)
+ [CVE-2024-21054](https://nvd.nist.gov/vuln/detail/CVE-2024-21054)
+ [CVE-2024-21055](https://nvd.nist.gov/vuln/detail/CVE-2024-21055)
+ [CVE-2024-21057](https://nvd.nist.gov/vuln/detail/CVE-2024-21057)
+ [CVE-2024-21062](https://nvd.nist.gov/vuln/detail/CVE-2024-21062)
+ [CVE-2024-21008](https://nvd.nist.gov/vuln/detail/CVE-2024-21008)
+ [CVE-2024-21013](https://nvd.nist.gov/vuln/detail/CVE-2024-21013)
+ [CVE-2024-21047](https://nvd.nist.gov/vuln/detail/CVE-2024-21047)
+ [CVE-2024-21087](https://nvd.nist.gov/vuln/detail/CVE-2024-21087)
+ [CVE-2024-21096](https://nvd.nist.gov/vuln/detail/CVE-2024-21096)

### 適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240408 版
<a name="mysql-extended-support-releases-version-5.7.44-20240408"></a>

適用於 RDS for MySQL 的 RDS 延長支援 5.7.44-RDS.20240408 版已推出。

此版本包含下列 CVE 的修補程式：
+ [CVE-2024-20963](https://nvd.nist.gov/vuln/detail/CVE-2024-20963)

## 使用資料庫預覽環境
<a name="mysql-working-with-the-database-preview-environment"></a>

在 2023 年 7 月，Oracle 宣布了 MySQL 的新版本模型。此模型包括兩種類型的版本：創新版本和 LTS 版本。Amazon RDS 使 MySQL 創新版本可在 RDS 預覽環境中使用。若要深入了解 MySQL 創新版本，請參閱 [MySQL 創新和長期支援 (LTS) 版本簡介](https://blogs.oracle.com/mysql/post/introducing-mysql-innovation-and-longterm-support-lts-versions)。

資料庫預覽環境中的 RDS for MySQL 資料庫執行個體是類似於其他 RDS for MySQL 執行個體的功能。不過，您無法將資料庫預覽環境用於生產工作負載。

預覽環境具有下列限制：
+ Amazon RDS 會在您建立資料庫執行個體後 60 天將其全部刪除，也會一併刪除任何備份和快照。
+ 您只能使用一般用途 SSD 和佈建 IOPS SSD 儲存裝置。
+ 您無法從 支援 資料庫執行個體取得協助。相反地，您可以將問題發佈至 AWS受管問答社群 [AWS re：Post](https://repost.aws/tags/TAsibBK6ZeQYihN9as4S_psg/amazon-relational-database-service)。
+ 您無法將資料庫執行個體的快照複製到生產環境。

預覽版支援下列選項。
+ 您可以使用 db.m6i、db.r6i、db.m6g、db.m5、db.t3、db.r6g 和 db.r5 資料庫執行個體類別建立資料庫執行個體。如需 RDS 執行個體類別的詳細資訊，請參閱[ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。
+ 您可以同時使用單一可用區域和多可用區域部署。
+ 您可以使用標準 MySQL 傾印和載入函數，從資料庫預覽環境匯出資料庫，或將資料庫匯入至資料庫預覽環境。

### 資料庫預覽環境中不支援的功能
<a name="mysql-preview-environment-exclusions"></a>

資料庫預覽環境中無法使用下列功能：
+ 跨區域快照複製
+ 跨區域僅供讀取複本
+ RDS Proxy

### 在資料庫預覽環境中建立新的資料庫執行個體
<a name="mysql-create-db-instance-in-preview-environment"></a>

您可以使用 AWS 管理主控台 AWS CLI、 或 RDS API，在資料庫預覽環境中建立資料庫執行個體。

#### 主控台
<a name="mysql-create-db-instance-in-preview-environment.CON"></a>

**在資料庫預覽環境中建立資料庫執行個體**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 從導覽窗格中選擇 **Dashboards (儀表板)**。

1. 在**儀表板**頁面中，找出**資料庫預覽環境**區段，如下圖所示。  
![\[Amazon RDS 主控台中包含連結的資料庫預覽環境區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/preview-environment-dashboard.png)

   您可以直接導覽至[資料庫預覽環境](https://us-east-2.console.aws.amazon.com/rds-preview/home?region=us-east-2#)。在繼續之前，您必須確認並接受限制。  
![\[資料庫預覽環境服務協議對話方塊，以確認限制。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/preview-environment-console.png)

1. 若要建立 RDS for MySQL 資料庫執行個體，請遵循與建立任何 Amazon RDS 資料庫執行個體相同的程序。如需詳細資訊，請參閱 [建立資料庫執行個體](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating) 中的 [主控台](USER_CreateDBInstance.md#USER_CreateDBInstance.CON) 程序。

#### AWS CLI
<a name="mysql-create-db-instance-in-preview-environment.CLI"></a>

若要使用 AWS CLI，在資料庫預覽環境中建立執行個體，請使用下列端點。

```
rds-preview.us-east-2.amazonaws.com
```

若要建立 RDS for MySQL 資料庫執行個體，請遵循與建立任何 Amazon RDS 資料庫執行個體相同的程序。如需詳細資訊，請參閱 [建立資料庫執行個體](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating) 中的 [AWS CLI](USER_CreateDBInstance.md#USER_CreateDBInstance.CLI) 程序。

#### RDS API
<a name="mysql-create-db-instance-in-preview-environment.API"></a>

若要使用 RDS API，在資料庫預覽環境中建立執行個體，請使用下列端點。

```
rds-preview.us-east-2.amazonaws.com
```

若要建立 RDS for MySQL 資料庫執行個體，請遵循與建立任何 Amazon RDS 資料庫執行個體相同的程序。如需詳細資訊，請參閱 [建立資料庫執行個體](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating) 中的 [RDS API](USER_CreateDBInstance.md#USER_CreateDBInstance.API) 程序。

## 資料庫預覽環境中的 MySQL 9.5 版
<a name="mysql-preview-environment-version-9-5"></a>

MySQL 9.5 版現已在 Amazon RDS 資料庫預覽環境中提供。MySQL 9.5 版包含數個改進，如 [ MySQL 9.5.0 中的變更中所述。](https://dev.mysql.com/doc/relnotes/mysql/9.5/en/news-9-5-0.html)

如需資料庫預覽環境的相關資訊，請參閱 [使用資料庫預覽環境](#mysql-working-with-the-database-preview-environment)。若要從主控台存取預覽環境，請選取 [https://console.aws.amazon.com/rds-preview/](https://console.aws.amazon.com/rds-preview/)。

## 資料庫預覽環境中的 MySQL 9.4 版
<a name="mysql-preview-environment-version-9-4"></a>

MySQL 9.4 版現已在 Amazon RDS 資料庫預覽環境中提供。MySQL 9.4 版包含數個改進，如 [ MySQL 9.4.0 中的變更中所述。](https://dev.mysql.com/doc/relnotes/mysql/9.4/en/news-9-4-0.html)

如需資料庫預覽環境的相關資訊，請參閱 [使用資料庫預覽環境](#mysql-working-with-the-database-preview-environment)。若要從主控台存取預覽環境，請選取 [https://console.aws.amazon.com/rds-preview/](https://console.aws.amazon.com/rds-preview/)。

## 資料庫預覽環境中的 MySQL 9.3 版
<a name="mysql-preview-environment-version-9-3"></a>

MySQL 9.3 版現已可在 Amazon RDS 資料庫預覽環境中使用。MySQL 9.3 版包含 [MySQL 9.3.0 中的變更](https://dev.mysql.com/doc/relnotes/mysql/9.3/en/news-9-3-0.html)所述的數個改善項目。

如需資料庫預覽環境的相關資訊，請參閱 [使用資料庫預覽環境](#mysql-working-with-the-database-preview-environment)。若要從主控台存取預覽環境，請選取 [https://console.aws.amazon.com/rds-preview/](https://console.aws.amazon.com/rds-preview/)。

## Amazon RDS for MySQL 的已取代版本
<a name="MySQL.Concepts.DeprecatedVersions"></a>

Amazon RDS for MySQL 5.1、5.5 和 5.6 版已被取代。

在資料庫預覽環境中，Amazon RDS for MySQL 9.1 和 9.2 版已棄用。

如需適用於 MySQL 的 Amazon RDS 淘汰政策相關資訊，請參閱 [Amazon RDS 常見問答集](https://aws.amazon.com/rds/faqs/)。

# 連線至您的 MySQL 資料庫執行個體
<a name="USER_ConnectToInstance"></a>

 您必須建立資料庫執行個體，才能連接至執行 MySQL 資料庫引擎的資料庫執行個體。如需相關資訊，請參閱「[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)」。當 Amazon RDS 佈建您的資料庫執行個體後，您就可以使用任何標準 MySQL 用戶端應用程式或公用程式來連接至執行個體。在連線字串中，請指定來自資料庫執行個體端點的 DNS 地址做為 host 參數，並指定來自資料庫執行個體端點的連接埠號碼做為 port 參數。

若要向 RDS 資料庫執行個體進行身分驗證，您可以使用 MySQL 和 AWS Identity and Access Management (IAM) 資料庫身分驗證的其中一個身分驗證方法：
+ 若要了解如何使用 MySQL 的其中一個身分驗證方法向 MySQL 進行驗證，請參閱 MySQL 文件中的身分[身分驗證方法](https://dev.mysql.com/doc/internals/en/authentication-method.html)。
+ 若要了解如何使用 IAM 資料庫身分驗證向 MySQL 進行驗證，請參閱[適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。

您可以使用 MySQL 命令列用戶端之類的工具，以連線至 MySQL 資料庫執行個體。如需使用 MySQL 命令列用戶端的詳細資訊，請參閱 MySQL 文件中的 [mysql – MySQL 命令列用戶端](https://dev.mysql.com/doc/refman/8.0/en/mysql.html)。您可以用來連接的一個 GUI 應用程式是 MySQL Workbench。如需詳細資訊，請參閱[下載 MySQL Workbench](http://dev.mysql.com/downloads/workbench/) 頁面。如需安裝 MySQL (包括 MySQL 命令列用戶端) 的資訊，請參閱[安裝和升級 MySQL](https://dev.mysql.com/doc/refman/8.0/en/installing.html)。

若要從其 Amazon VPC 之外連線至資料庫執行個體，資料庫執行個體必須可公開存取、必須使用資料庫執行個體之安全群組的傳入規則授予存取權，且必須符合其他要求。如需詳細資訊，請參閱 [無法連線至 Amazon RDS 資料庫執行個體](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

您可以在與 MySQL 資料庫執行個體的連線上使用 Secure Sockets Layer (SSL) 或 Transport Layer Security (TLS) 加密。如需相關資訊，請參閱[Amazon RDS 對 MySQL 資料庫執行個體的 SSL/TLS 支援](MySQL.Concepts.SSLSupport.md)。如果您使用 AWS Identity and Access Management (IAM) 資料庫身分驗證，請確保使用 SSL/TLS 連線。如需相關資訊，請參閱[適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。

您也可以從 Web 伺服器連接至資料庫執行個體。如需詳細資訊，請參閱 [教學：建立 Web 伺服器和 Amazon RDS 資料庫執行個體](TUT_WebAppWithRDS.md)。

**注意**  
如需連接至 MariaDB 資料庫執行個體的相關資訊，請參閱 [連線至您的 MariaDB 資料庫執行個體](USER_ConnectToMariaDBInstance.md)。

若要尋找並連線至 RDS for MySQL 資料庫執行個體，請參閱下列主題。

**Topics**
+ [

# 尋找 RDS for MySQL 資料庫執行個體的連線資訊
](USER_ConnectToInstance.EndpointAndPort.md)
+ [

# 安裝 MySQL 命令列用戶端
](mysql-install-cli.md)
+ [

# 從 MySQL 命令列用戶端連線 (未加密)
](USER_ConnectToInstance.CLI.md)
+ [

# 從 MySQL Workbench 連線
](USER_ConnectToInstance.MySQLWorkbench.md)
+ [

# 使用 AWS JDBC 驅動程式、 AWS Python 驅動程式和適用於 MySQL 的 AWS ODBC 驅動程式連線至 RDS for MySQL
](MySQL.Connecting.Drivers.md)
+ [

# 對 MySQL 資料庫執行個體的連線進行故障診斷
](USER_ConnectToInstance.Troubleshooting.md)

# 尋找 RDS for MySQL 資料庫執行個體的連線資訊
<a name="USER_ConnectToInstance.EndpointAndPort"></a>

資料庫執行個體的連線資訊包括其端點、連接埠，以及有效的資料庫使用者，例如主要使用者。例如，假設端點值為 `mydb.123456789012.us-east-1.rds.amazonaws.com`。在此情況下，連接埠值為 `3306`，資料庫使用者為 `admin`。藉由此資訊，您可以在連線字串中指定下列值：
+ 對於主機或主機名稱或 DNS 名稱，請指定 `mydb.123456789012.us-east-1.rds.amazonaws.com`。
+ 對於連接埠，指定 `3306`。
+ 對於使用者，請指定 `admin`。

若要連線到資料庫執行個體，請針對 MySQL 資料庫引擎使用任何用戶端。例如，您可以使用 MySQL 命令列用戶端或 MySQL 工作台。

若要尋找資料庫執行個體的連線資訊，您可以使用 AWS 管理主控台、 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令或 Amazon RDS API [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作來列出其詳細資訊。

## 主控台
<a name="USER_ConnectToInstance.EndpointAndPort.Console"></a>

**在 中尋找資料庫執行個體的連線資訊 AWS 管理主控台**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Databases** (資料庫) 以顯示資料庫執行個體的清單。

1. 選擇 MySQL 資料庫執行個體名稱以顯示其詳細資訊。

1. 在 **Connectivity & security (連線能力和安全性)** 索引標籤上，複製該端點。另外，請記下連接埠號碼。您需要同時有端點和連接埠號碼，才能連線至資料庫執行個體。  
![\[Amazon RDS 主控台中的資料庫執行個體的端點和連接埠。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/endpoint-port.png)

1. 如果您需要尋找主要使用者名稱，請選擇 **Configuration** (組態) 索引標籤並檢視 **Master username** (主要使用者名稱) 值。

## AWS CLI
<a name="USER_ConnectToInstance.EndpointAndPort.CLI"></a>

若要使用 尋找 MySQL 資料庫執行個體的連線資訊 AWS CLI，請執行 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令。在呼叫中，查詢資料庫執行個體 ID、端點、連接埠和主要使用者名稱。

針對 Linux、macOS 或 Unix：

```
aws rds describe-db-instances \
  --filters "Name=engine,Values=mysql" \
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

在 Windows 中：

```
aws rds describe-db-instances ^
  --filters "Name=engine,Values=mysql" ^
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

輸出內容應如下所示：

```
[
    [
        "mydb1",
        "mydb1.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ],
    [
        "mydb2",
        "mydb2.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ]
]
```

## RDS API
<a name="USER_ConnectToInstance.EndpointAndPort.API"></a>

若要使用 Amazon RDS API 尋找資料庫執行個體的連線資訊，請呼叫 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作。在輸出中，尋找端點地址、端點連接埠和主要使用者名稱的值。

# 安裝 MySQL 命令列用戶端
<a name="mysql-install-cli"></a>

大多數的 Linux 發行版均包括 MariaDB 用戶端，而不是 Oracle MySQL 用戶端。若要在 Amazon Linux 2023 上安裝 MySQL 命令列用戶端，請執行下列命令：

```
sudo dnf install mariadb105
```

若要在 Amazon Linux 2 上安裝 MySQL 命令列用戶端，請執行下列命令：

```
sudo yum install mariadb
```

若要在大多數以 Debian 為基礎的 Linux 發行版上安裝 MySQL 命令列用戶端，請執行下列命令：

```
apt-get install mariadb-client
```

若要檢查 MySQL 命令列用戶端的版本，請執行下列命令：

```
mysql --version
```

若要讀取目前用戶端版本的 MySQL 文件，請執行下列命令：

```
man mysql
```

# 從 MySQL 命令列用戶端連線 (未加密)
<a name="USER_ConnectToInstance.CLI"></a>

**重要**  
僅當用戶端和伺服器位於同一 VPC 且網路受信任時，才使用未加密的 MySQL 連線。如需使用加密連線的詳細資訊，請參閱 [使用 SSL/TLS 從 MySQL 命令列用戶端連線至 Amazon RDS 上的 MySQL 資料庫執行個體 (加密)](USER_ConnectToInstanceSSL.CLI.md)。

若要使用 MySQL 命令列用戶端連線至資料庫執行個體，請在命令提示字元中輸入下列命令。在 -h 參數中，換成您的資料庫執行個體的 DNS 名稱 (端點)。在 -P 參數中，換成您的資料庫執行個體的連接埠。對於 -u 參數，請以有效資料庫使用者取代使用者名稱，例如主要使用者。出現提示時，輸入主要使用者密碼。

```
mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com -P 3306 -u mymasteruser -p
```

輸入使用者的密碼之後，您應該會看到類似如下的輸出。

```
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9738
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
```

# 從 MySQL Workbench 連線
<a name="USER_ConnectToInstance.MySQLWorkbench"></a>

**若要從 MySQL Workbench 連線**

1. 在 [下載 MySQL Workbench](http://dev.mysql.com/downloads/workbench/) 的地方下載並安裝 MySQL Workbench。

1. 開啟 MySQL Workbench。  
![\[MySQL Workbench 中的歡迎畫面。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/mysql-workbench-main.png)

1. 從 **Database (資料庫)**，選擇 **Manage Connections (管理連線)**。

1. 在 **Manage Server Connections (管理伺服器連線視窗)** 中，選擇 **New (新增)**。

1. 在 **Connect to Database (連線到資料庫) **的視窗中，輸入下列資訊：
   + **Stored Connection (儲存的連線)** – 輸入連線的名稱，例如 **MyDB**。
   + **Hostname (主機名稱)** – 輸入資料庫執行個體端點。
   + **Port (連接埠)** – 輸入資料庫執行個體使用的連接埠。
   + **Username** (使用者名稱) – 輸入資料庫使用者有效的使用者名稱，例如主要使用者。
   + **Password (密碼)** – 選用，選擇 **Store in Vault (儲存於保存庫)** 然後輸入並儲存使用者密碼。

   視窗看起來類似如下：  
![\[MySQL Workbench 中的 [管理伺服器連線] 視窗。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/mysql-workbench-connect.png)

   您可以使用 MySQL Workbench 的功能來自訂連線。例如，您可以使用 **SSL** 索引標籤來設定 SSL/TLS 連線。如需使用 MySQL Workbench 的詳細資訊，請參閱 [MySQL Workbench 文件](https://dev.mysql.com/doc/workbench/en/)。使用 SSL/TLS 加密連至 MySQL 資料庫執行個體的用戶端連線。請參閱 [在 Amazon RDS 上使用 SSL/TLS 加密對 MySQL 資料庫執行個體的用戶端連線](mysql-ssl-connections.md)。

1. 選用，選擇 **Test Connection (測試連線)** 以確認成功連線到資料庫執行個體。

1. 選擇**關閉**。

1. 從 **Database (資料庫)**，選擇 **Connect to Database (連線到資料庫)**。

1. 從 **Stored Connection (已儲存的連線)**，選擇您的連線。

1. 選擇**確定**。

# 使用 AWS JDBC 驅動程式、 AWS Python 驅動程式和適用於 MySQL 的 AWS ODBC 驅動程式連線至 RDS for MySQL
<a name="MySQL.Connecting.Drivers"></a>

使用 AWS JDBC 驅動程式、 AWS Python 驅動程式和 AWS ODBC MySQL 驅動程式連線至 RDS for MySQL 資料庫執行個體。如需詳細資訊，請參閱下列主題。

**Topics**
+ [

## 使用 Amazon Web Services (AWS) JDBC 驅動程式連線至 RDS for MySQL
](#MySQL.Connecting.JDBCDriver)
+ [

## 使用 Amazon Web Services (AWS) Python 驅動程式連線至 RDS for MySQL
](#MySQL.Connecting.PythonDriver)
+ [

## 使用 Amazon Web Services (AWS) ODBC Driver for MySQL 連線至 RDS for MySQL
](#USER_ConnectToInstance.ODBCDriverMySQL)

## 使用 Amazon Web Services (AWS) JDBC 驅動程式連線至 RDS for MySQL
<a name="MySQL.Connecting.JDBCDriver"></a>

Amazon Web Services (AWS) JDBC 驅動程式設計為進階 JDBC 包裝函式。此包裝函式是現有 JDBC 驅動程式的補充和延伸功能。驅動器與社群 MySQL Connector/J 驅動程式和社群 MariaDB Connector/J 驅動程式相容。

若要安裝 AWS JDBC 驅動程式，請附加 AWS JDBC 驅動程式 .jar 檔案 （位於應用程式 `CLASSPATH`)，並保留對個別社群驅動程式的參考。更新個別的連線 URL 字首，如下所示：
+ `jdbc:mysql://` 至 `jdbc:aws-wrapper:mysql://`
+ `jdbc:mariadb://` 至 `jdbc:aws-wrapper:mariadb://`

如需 AWS JDBC 驅動程式的詳細資訊和完整的使用說明，請參閱 [Amazon Web Services (AWS) JDBC 驅動程式 GitHub 儲存庫](https://github.com/awslabs/aws-advanced-jdbc-wrapper)。

## 使用 Amazon Web Services (AWS) Python 驅動程式連線至 RDS for MySQL
<a name="MySQL.Connecting.PythonDriver"></a>

Amazon Web Services (AWS) Python 驅動程式設計為進階 Python 包裝函式。此包裝函式是開放原始碼 Psycopg 驅動程式的補充和延伸功能。 AWS Python 驅動程式支援 Python 3.8 版和更高版本。您可以使用 `pip` 命令以及`psycopg`開放原始碼`aws-advanced-python-wrapper`套件來安裝套件。

如需 AWS Python 驅動程式的詳細資訊和完整的使用說明，請參閱 [Amazon Web Services (AWS) Python Driver GitHub 儲存庫](https://github.com/awslabs/aws-advanced-python-wrapper)。

## 使用 Amazon Web Services (AWS) ODBC Driver for MySQL 連線至 RDS for MySQL
<a name="USER_ConnectToInstance.ODBCDriverMySQL"></a>

 AWS ODBC Driver for MySQL 是用戶端驅動程式，專為 RDS for MySQL 的高可用性而設計。驅動程式可以與 MySQL Connector/ODBC 驅動程式一起存在，並與相同的工作流程相容。

如需有關 AWS ODBC Driver for MySQL 的詳細資訊，以及安裝和使用它的完整說明，請參閱 [Amazon Web Services (AWS) ODBC Driver for MySQL](https://github.com/aws/aws-mysql-odbc) GitHub 儲存庫。

# 對 MySQL 資料庫執行個體的連線進行故障診斷
<a name="USER_ConnectToInstance.Troubleshooting"></a>

無法連接至新的資料庫執行個體有兩個常見原因：
+ 建立資料庫執行個體所用的安全群組，未授權從執行 MySQL 應用程式或公用程式的裝置或 Amazon EC2 執行個體進行連線。資料庫執行個體必須擁能會授權連線的 VPC 安全群組。如需詳細資訊，請參閱[Amazon VPC 和 Amazon RDS](USER_VPC.md)。

  您可以新增或編輯安全群組中的傳入規則。針對 **Source (來源)**，選擇 **My IP (我的 IP)**。此舉允許透過您的瀏覽器中偵測到的 IP 地址存取資料庫執行個體。
+ 資料庫執行個體是使用預設連接埠 3306 來建立，而公司的防火牆規則禁止從公司網路中的裝置連接至該連接埠。若要避免此失敗情況，請以不同的連接埠重新建立執行個體。

如需連線問題的詳細資訊，請參閱 [無法連線至 Amazon RDS 資料庫執行個體](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

# 保護 MySQL 資料庫執行個體連線的安全
<a name="securing-mysql-connections"></a>

您可以實作健全的安全措施，保護 MySQL 資料庫執行個體不受未經授權的存取和潛在威脅影響。在安全群組、SSL/TLS 加密和 IAM 資料庫身分驗證的搭配運作下，可為 MySQL 資料庫執行個體建立多層連線安全機制。這些安全控制可協助您達到合規需求、防止資料外洩，以及維護應用程式和資料庫之間的安全通訊管道。您可以藉由加密傳輸中的資料、限制對特定 IP 範圍的存取，以及透過 IAM 角色 (而非資料庫密碼) 管理使用者身分驗證，來保護 MySQL 資料庫執行個體。

MySQL 資料庫執行個體的安全性有三個受管層級：
+ AWS Identity and Access Management 會控管能在資料庫執行個體上執行 Amazon RDS 管理動作的對象。當您使用 IAM 登入資料連線至 AWS 時，IAM 帳戶必須具備能授予所需許可的 IAM 政策，才能執行 Amazon RDS 管理操作。如需詳細資訊，請參閱 [Amazon RDS 的 Identity and access management](UsingWithRDS.IAM.md)。
+ 建立資料庫執行個體時，您可使用 VPC 安全群組控管哪些裝置和 Amazon EC2 執行個體可以開啟與端點和資料庫執行個體連接埠的連線。您可以使用 Secure Sockets Layer (SSL) 和 Transport Layer Security (TLS) 建立這些連線。此外，貴公司的防火牆規則可控管在公司內執行的裝置是否可開啟與資料庫執行個體的連線。
+ 若要驗證 MySQL 資料庫執行個體的登入資訊與權限，您可採取下列任一方式，或搭配使用多種方法：
  + 您可採用與 MySQL 獨立執行個體相同的驗證方式。`CREATE USER`、`RENAME USER`、`GRANT`、`REVOKE` 及 `SET PASSWORD` 等命令的運作方式與現場部署資料庫所使用的命令相同，會直接修改資料庫結構描述資料表。不過，直接修改資料庫結構描述資料表並非最佳實務，此外不支援從 RDS for MySQL 8.0.36 版開始。如需詳細資訊，請參閱 MySQL 文件中的[存取控制和帳戶管理](https://dev.mysql.com/doc/refman/8.0/en/access-control.html)。
  + 您也可以使用 IAM 資料庫身分驗證。透過 IAM 資料庫身分驗證，您可以使用 IAM 使用者或 IAM 角色以及身分驗證字符，驗證您的資料庫執行個體。*身分驗證字符*是不重複的值，由 Signature 第 4 版簽署程序所產生。使用 IAM 資料庫身分驗證，便可利用相同的登入資料控管您 AWS 資源與資料庫的存取情形。如需詳細資訊，請參閱 [適用於 MariaDB、MySQL 和 PostgreSQL 的 IAM 資料庫身分驗證](UsingWithRDS.IAMDBAuth.md)。
  + 另一種選擇是 RDS for MySQL 適用的 Kerberos 身分驗證。資料庫執行個體可和 AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) 搭配使用，啟用 Kerberos 身分驗證。使用者向加入信任網域的 MySQL 資料庫執行個體進行身分驗證時，會轉送身分驗證請求。轉送的請求會前往您使用 Directory Service 建立的網域目錄。如需詳細資訊，請參閱 [對 Amazon RDS for MySQL 使用 Kerberos 身分驗證](mysql-kerberos.md)。

 在您建立 Amazon RDS 資料庫執行個體後，主要使用者具有下列預設權限：


| 引擎版本 | 系統權限 | 資料庫角色 | 
| --- | --- | --- | 
|  RDS for MySQL 8.4.3 版和更高版本  |  `GRANT SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`,`INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `FLUSH_OPTIMIZER_COSTS`, `FLUSH_PRIVILEGES`, `FLUSH_STATUS`, `FLUSH_TABLES`, `FLUSH_USER_RESOURCES`, `ROLE_ADMIN`, `SENSITIVE_VARIABLES_OBSERVER`, `SESSION_VARIABLES_ADMIN`, `SET_ANY_DEFINER`, `SHOW_ROUTINE`, `XA_RECOVER_ADMIN`  |  `rds_superuser_role` 如需 `rds_superuser_role` 的相關資訊，請參閱 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)。  | 
|  RDS for MySQL 8.0.36 版和更高版本  |  `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION SLAVE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `CREATE ROLE`, `DROP ROLE`, `APPLICATION_PASSWORD_ADMIN`, `ROLE_ADMIN`, `SET_USER_ID`, `XA_RECOVER_ADMIN`  |  `rds_superuser_role` 如需 `rds_superuser_role` 的相關資訊，請參閱 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)。  | 
|  低於 8.0.36 的 RDS for MySQL 版本  |  `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `RELOAD`, `PROCESS`, `REFERENCES`, `INDEX`, `ALTER`, `SHOW DATABASES`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `REPLICATION CLIENT`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `CREATE USER`, `EVENT`, `TRIGGER`, `REPLICATION SLAVE`  |  無  | 

**注意**  
雖然您可刪除資料庫執行個體上的主要使用者，但不建議這麼做。若要重新建立主要使用者，請使用 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作或執行 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令，然後以適當參數指定新的主要使用者密碼。若執行個體中不存在此主要使用者，系統會以指定的密碼建立主要使用者。

為了提供各資料庫執行個體管理服務，建立資料庫執行個體時，系統會一併建立 `rdsadmin` 使用者。若企圖移除、重新命名 `rdsadmin` 帳戶或變更其密碼或權限，皆會導致系統發生錯誤。

請限制使用標準 `kill` 和 `kill_query` 命令，藉此允許資料庫執行個體的管理操作。此外，本服務還提供 Amazon RDS 命令 `rds_kill` 與 `rds_kill_query`，讓您能結束資料庫執行個體上的使用者工作階段或查詢。

# RDS for MySQL 的密碼驗證
<a name="MySQL.Concepts.PasswordValidationPlugin"></a>

MySQL 提供更安全的 `validate_password` 外掛程式。外掛程式使用您 MySQL 資料庫執行個體的資料庫參數中的參數，強制採用密碼政策。執行 MySQL 5.7、8.0 和 8.4 版的資料庫執行個體支援外掛程式。如需 `validate_password` 外掛程式詳細資訊，請參閱 MySQL 文件中的[密碼驗證外掛程式](https://dev.mysql.com/doc/refman/5.7/en/validate-password.html)。

**啟用 MySQL 資料庫執行個體的 `validate_password` 外掛程式**

1. 連接至 MySQL 資料庫執行個體，然後執行下列命令：

   ```
   INSTALL PLUGIN validate_password SONAME 'validate_password.so';                    
   ```

1. 在資料庫執行個體使用的資料庫參數群組中設定外掛程式參數。

   如需參數詳細資訊，請參閱 MySQL 文件中的 [ 密碼驗證外掛程式選項和變數 ](https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html)。

   如需修改資料庫執行個體參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

1. 重新啟動資料庫執行個體。

啟用 `validate_password` 外掛程式後，請重新設定現有密碼，以符合新驗證政策。

您的 MySQL 資料庫執行個體會處理 Amazon RDS 的密碼驗證。若要變更密碼，請先透過 AWS 管理主控台、CLI `modify-db-instance` 命令或 `ModifyDBInstance` API 操作提交密碼更新請求。RDS 最初接受您的請求，即使密碼不符合您的政策。RDS 接著會以非同步方式處理請求。只有在密碼符合您定義的政策時，才會更新 MySQL 資料庫執行個體中的密碼。如果密碼不符合這些政策，RDS 會保留現有的密碼並記錄錯誤事件。

```
    Unable to reset your password. Error information: Password failed to meet validation rules.            
```

如需 Amazon RDS 事件的詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。

# 在 Amazon RDS 上使用 SSL/TLS 加密對 MySQL 資料庫執行個體的用戶端連線
<a name="mysql-ssl-connections"></a>

Secure Sockets Layer (SSL) 是一種產業標準通訊協定，可保護用戶端與伺服器之間的網路連線。SSL 3.0 版之後，名稱已變更為 Transport Layer Security (TLS)。Amazon RDS 支援在 MySQL 資料庫執行個體上啟用 SSL/TLS 加密。使用 SSL/TLS，您可以加密應用程式用戶端與 MySQL 資料庫執行個體之間的連接。所有 AWS 區域 for MySQL 都提供 SSL/TLS 支援。

透過 Amazon RDS，您可以使用 SSL/TLS 加密 MySQL 資料庫執行個體的用戶端連線、要求 MySQL 資料庫執行個體的所有連線都必須使用 SSL/TLS，以及使用 SSL/TLS 從 MySQL 命令列用戶端連線 (加密)，藉以保護傳輸中的資料。以下幾節提供在 Amazon RDS 上為 MySQL 資料庫執行個體設定和使用 SSL/TLS 加密的指引。

**Topics**
+ [

# Amazon RDS 對 MySQL 資料庫執行個體的 SSL/TLS 支援
](MySQL.Concepts.SSLSupport.md)
+ [

# Amazon RDS 上的特定使用者帳戶連線至 MySQL 資料庫執行個體時需要 SSL/TLS
](mysql-ssl-connections.require-ssl-users.md)
+ [

# Amazon RDS 上所有的 MySQL 資料庫執行個體連線都需要 SSL/TLS
](mysql-ssl-connections.require-ssl.md)
+ [

# 使用 SSL/TLS 從 MySQL 命令列用戶端連線至 Amazon RDS 上的 MySQL 資料庫執行個體 (加密)
](USER_ConnectToInstanceSSL.CLI.md)

# Amazon RDS 對 MySQL 資料庫執行個體的 SSL/TLS 支援
<a name="MySQL.Concepts.SSLSupport"></a>

當 Amazon RDS 佈建執行個體時，Amazon RDS 會建立 SSL/TLS 憑證，並將該憑證安裝在資料庫執行個體上。憑證由憑證授權機構簽署。SSL/TLS 憑證會以通用名稱 (CN) 加入資料庫執行個體端點，讓 SSL/TLS 憑證免於遭受詐騙攻擊。

Amazon RDS 建立的 SSL/TLS 憑證是可信任的根實體，應可適用於大多數情況，但若您的應用程式不接受憑證鏈結，則可能無法使用。若您的應用程式不接受憑證鏈結，請嘗試使用中繼憑證連線至您的 AWS 區域。例如，您必須使用中繼憑證，以 SSL/TLS 連線至 AWS GovCloud (US) 區域。

如需有關下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。如需在使用 SSL/TLS 搭配 MySQL 的詳細資訊，請參閱 [將應用程式更新為使用新的 SSL/TLS 憑證來連線至 MySQL 資料庫執行個體](ssl-certificate-rotation-mysql.md)。

對於 MySQL 8.0 版和較低版本，Amazon RDS for MySQL 會使用 OpenSSL 進行安全連線。對於 MySQL 8.4 版和更高版本，Amazon RDS for MySQL 會使用 AWS-LC。TLS 支援情形取決於 MySQL 版本。下表顯示 MySQL 版本的 TLS 支援。


| MySQL 版本 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 
| --- | --- | --- | --- | --- | 
|  MySQL 8.4  |  不支援  |  不支援  |  支援  |  支援  | 
|  MySQL 8.0  |  不支援  |  不支援  |  支援  |  支援  | 
|  MySQL 5.7  |  支援  |  支援  |  支援  |  不支援  | 

# Amazon RDS 上的特定使用者帳戶連線至 MySQL 資料庫執行個體時需要 SSL/TLS
<a name="mysql-ssl-connections.require-ssl-users"></a>

指定的使用者帳戶在 Amazon RDS 上連線至您的 MySQL 資料庫執行個體時，您可以要求 SSL/TLS 加密。保護敏感資訊不受未經授權的存取或攔截影響，對於強制執行重視資料機密性的安全政策至關重要。

若要對特定使用者的帳戶要求 SSL/TLS 連線，請根據您的 MySQL 版本使用下列其中一個陳述式，要求使用者帳戶 `encrypted_user` 必須採用 SSL/TLS 連線。

若要這麼做，請使用下列陳述式。

```
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
```

如需使用 MySQL 進行 SSL/TLS 連線的詳細資訊，請參閱 MySQL 文件中的[使用加密連線](https://dev.mysql.com/doc/refman/8.0/en/encrypted-connections.html)。

# Amazon RDS 上所有的 MySQL 資料庫執行個體連線都需要 SSL/TLS
<a name="mysql-ssl-connections.require-ssl"></a>

使用 `require_secure_transport` 參數來要求使用者與 MySQL 資料庫執行個體的所有連線都使用 SSL/TLS。依預設，`require_secure_transport` 參數設為 `OFF`。您可以將 `require_secure_transport` 參數設為 `ON`，以要求對資料庫執行個體的連線使用 SSL/TLS。

您可以更新資料庫執行個體的資料庫參數群組，以設定 `require_secure_transport` 參數值。您不需要重新啟動資料庫執行個體，變更即可生效。

當資料庫執行個體的 `require_secure_transport` 參數設為 `ON` 時，如果可以建立加密的連線，則資料庫用戶端即可連線到該資料庫叢集。否則，類似下列內容的錯誤訊息會傳回至用戶端：

```
MySQL Error 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
```

如需有關設定參數的詳細資訊，請參閱 [修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

如需 `require_secure_transport` 參數的詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_require_secure_transport)。

# 使用 SSL/TLS 從 MySQL 命令列用戶端連線至 Amazon RDS 上的 MySQL 資料庫執行個體 (加密)
<a name="USER_ConnectToInstanceSSL.CLI"></a>

`mysql` 用戶端程式參數會根據您所使用的 MySQL 或 MariaDB 版本而略有不同。

若要找出您擁有的版本，請執行具有 `--version` 選項的 `mysql` 命令。在以下範例中，輸出顯示了用戶端程式是來自 MariaDB。

```
$ mysql --version
mysql  Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1
```

大多數 Linux 發行版本，例如 Amazon Linux、CentOS、SUSE 和 Debian 都用 MariaDB 取代 MySQL，而且發行版本中的 `mysql` 版是來自 MariaDB。

若要使用 SSL/TLS 連線到資料庫執行個體，請執行以下步驟：

**使用 MySQL 命令列用戶端搭配 SSL/TLS 連接至資料庫執行個體**

1. 下載適用於所有 的根憑證 AWS 區域。

   如需有關下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

1. 使用 MySQL 命令列用戶端搭配 SSL/TLS 加密連接至資料庫執行個體。在 `-h` 參數中，將 DNS 名稱 (端點) 取代為您的資料庫執行個體。在 `--ssl-ca` 參數中，取代 SSL/TLS 憑證檔名稱。在 `-P` 參數中，取代為您的資料庫執行個體連接埠。在 `-u` 參數中，請以有效資料庫使用者取代使用者名稱，例如主要使用者。出現提示時，輸入主要使用者密碼。

   下列範例顯示如何對於 MySQL 5.7 用戶端更新的版本使用 `--ssl-ca` 參數啟動用戶端：

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p
   ```

   若要要求 SSL/TLS 連線根據 SSL/TLS 憑證中的端點來驗證資料庫執行個體端點，請輸入下列命令：

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=VERIFY_IDENTITY -P 3306 -u myadmin -p
   ```

   下列範例顯示如何對於 MariaDB 用戶端更新的版本使用 `--ssl-ca` 參數啟動用戶端：

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
   ```

1. 出現提示時，輸入主要使用者密碼。

您將會看到類似下列的輸出。

```
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9738
Server version: 8.0.28 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
```

# 將應用程式更新為使用新的 SSL/TLS 憑證來連線至 MySQL 資料庫執行個體
<a name="ssl-certificate-rotation-mysql"></a>

自 2023 年 1 月 13 日起，Amazon RDS 已發佈新的憑證認證機構 (CA) 憑證，使用 Secure Socket Layer 或 Transport Layer Security (SSL/TLS) 來連線至 RDS 資料庫執行個體。接下來，您可以找到更新應用程式使用新憑證的相關資訊。

本主題可協助您判斷任何用戶端應用程式是否使用 SSL/TLS 連線至您的資料庫執行個體。若是如此，您可以進一步檢查那些應用程式是否需要驗證憑證才能連線。

**注意**  
有些應用程式設定為只有在成功驗證伺服器上的憑證時，才能連線至 MySQL 資料庫執行個體。對於這些應用程式，您必須更新用戶端應用程式信任存放區來包含新的 CA 憑證。  
您可以指定下列 SSL 模式：`disabled`、`preferred` 及 `required`。當您使用 `preferred` SSL 模式且 CA 憑證不存在或不是最新版本時，連線會回退至不使用 SSL 且不加密的狀況下進行連線。  
我們建議您避免使用 `preferred` 模式。在 `preferred` 模式中，如果連線遇到無效憑證，則會停止使用加密並繼續使用未加密連線。

更新用戶端應用程式信任存放區中的 CA 憑證之後，您就可以在資料庫執行個體輪換憑證。強烈建議先在開發或預備環境中測試這些步驟，再於生產環境中實作。

如需憑證輪換的詳細資訊，請參閱[輪換您的 SSL/TLS 憑證](UsingWithRDS.SSL-certificate-rotation.md)。如需下載憑證的詳細資訊，請參閱[使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。如需對 MySQL 資料庫執行個體使用 SSL/TLS 的資訊，請參閱[Amazon RDS 對 MySQL 資料庫執行個體的 SSL/TLS 支援](MySQL.Concepts.SSLSupport.md)。

**Topics**
+ [

## 判斷任何應用程式是否使用 SSL 連線至 MySQL 資料庫執行個體
](#ssl-certificate-rotation-mysql.determining-server)
+ [

## 判斷用戶端是否需要驗證憑證才能連線
](#ssl-certificate-rotation-mysql.determining-client)
+ [

## 更新應用程式信任存放區
](#ssl-certificate-rotation-mysql.updating-trust-store)
+ [

## 建立 SSL 連線的 Java 程式碼範例
](#ssl-certificate-rotation-mysql.java-example)

## 判斷任何應用程式是否使用 SSL 連線至 MySQL 資料庫執行個體
<a name="ssl-certificate-rotation-mysql.determining-server"></a>

如果您使用 Amazon RDS for MySQL 5.7、8.0 或 8.4 版，且效能結構描述已啟用，請執行下列查詢，以檢查連線是否使用 SSL/TLS。如需啟用效能結構描述的資訊，請參閱 MySQL 文件中的[效能結構描述快速入門](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-quick-start.html)。

```
mysql> SELECT id, user, host, connection_type 
       FROM performance_schema.threads pst 
       INNER JOIN information_schema.processlist isp 
       ON pst.processlist_id = isp.id;
```

在此輸出範例中，可看到您自己的工作階段 (`admin`) 和以 `webapp1` 登入的應用程式都使用 SSL。

```
+----+-----------------+------------------+-----------------+
| id | user            | host             | connection_type |
+----+-----------------+------------------+-----------------+
|  8 | admin           | 10.0.4.249:42590 | SSL/TLS         |
|  4 | event_scheduler | localhost        | NULL            |
| 10 | webapp1         | 159.28.1.1:42189 | SSL/TLS         |
+----+-----------------+------------------+-----------------+
3 rows in set (0.00 sec)
```

## 判斷用戶端是否需要驗證憑證才能連線
<a name="ssl-certificate-rotation-mysql.determining-client"></a>

您可以檢查 JDBC 用戶端和 MySQL 用戶端是否需要驗證憑證才能連線。

### JDBC
<a name="ssl-certificate-rotation-mysql.determining-client.jdbc"></a>

以下 MySQL Connector/J 8.0 範例指出一種方式來檢查應用程式的 JDBC 連線屬性，以判斷是否需要有效憑證才能成功連線。如需 MySQL 的所有 JDBC 連線選項的詳細資訊，請參閱 MySQL 文件中的[組態屬性](https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html)。

使用 MySQL Connector/J 8.0 時，如果連線屬性的 `sslMode` 設定為 `VERIFY_CA` 或 `VERIFY_IDENTITY`，則需要以資料庫伺服器憑證來驗證 SSL 連線，如下列範例所示。

```
Properties properties = new Properties();
properties.setProperty("sslMode", "VERIFY_IDENTITY");
properties.put("user", DB_USER);
properties.put("password", DB_PASSWORD);
```

**注意**  
如果您使用 MySQL Java Connector v5.1.38 或更高版本，或 MySQL Java Connector v8.0.9 或更高版本來連線至您的資料庫，即使您尚未明確設定應用程式在連線到資料庫時使用 SSL/TLS，這些用戶端驅動程式會預設為使用 SSL/TLS。此外，使用 SSL/TLS 時，它們會執行部分憑證驗證，如果資料庫伺服器憑證已過期，則無法連線。

### MySQL
<a name="ssl-certificate-rotation-mysql.determining-client.mysql"></a>

以下 MySQL 用戶端範例指出兩種方式來檢查指令碼的 MySQL 連線，以判斷是否需要有效憑證才能成功連線。如需 MySQL 用戶端所有連線選項的詳細資訊，請參閱 MySQL 文件中的[加密連線的用戶端組態](https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html#using-encrypted-connections-client-side-configuration)。

使用 MySQL Client 5.7 版或更高版本時，如果您將 `--ssl-mode` 選項指定為 `VERIFY_CA` 或 `VERIFY_IDENTITY`，則需要以伺服器 CA 憑證來驗證 SSL 連線，如下列範例所示。

```
mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-mode=VERIFY_CA                
```

## 更新應用程式信任存放區
<a name="ssl-certificate-rotation-mysql.updating-trust-store"></a>

如需為 MySQL 應用程式更新信任存放區的資訊，請參閱 MySQL 文件中的[安裝 SSL 憑證](https://dev.mysql.com/doc/mysql-monitor/8.0/en/mem-ssl-installation.html)。

如需下載根憑證的資訊，請參閱 [使用 SSL/TLS 加密與資料庫執行個體或叢集的連線](UsingWithRDS.SSL.md)。

如需匯入憑證的範例指令碼，請參閱 [將憑證匯入信任存放區的範例指令碼](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

**注意**  
更新信任存放區時，除了新增憑證，您還可以保留舊憑證。

如果您在應用程式中使用 mysql JDBC 驅動程式，請在應用程式中設定下列屬性。

```
System.setProperty("javax.net.ssl.trustStore", certs);
System.setProperty("javax.net.ssl.trustStorePassword", "password");
```

啟動應用程式時，設定下列屬性。

```
java -Djavax.net.ssl.trustStore=/path_to_trust_store/MyTruststore.jks -Djavax.net.ssl.trustStorePassword=my_trust_store_password com.companyName.MyApplication        
```

**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

## 建立 SSL 連線的 Java 程式碼範例
<a name="ssl-certificate-rotation-mysql.java-example"></a>

下列程式碼範例示範如何使用 JDBC 設定 SSL 連線，以驗證伺服器憑證。

```
public class MySQLSSLTest {
     
        private static final String DB_USER = "username";
        private static final String DB_PASSWORD = "password";
        // This trust store has only the prod root ca.
        private static final String TRUST_STORE_FILE_PATH = "file-path-to-trust-store";
        private static final String TRUST_STORE_PASS = "trust-store-password";
            
        public static void test(String[] args) throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
                    
            System.setProperty("javax.net.ssl.trustStore", TRUST_STORE_FILE_PATH);
            System.setProperty("javax.net.ssl.trustStorePassword", TRUST_STORE_PASS);
            
            Properties properties = new Properties();
            properties.setProperty("sslMode", "VERIFY_IDENTITY");
            properties.put("user", DB_USER);
            properties.put("password", DB_PASSWORD);
            
     
            Connection connection = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                connection = DriverManager.getConnection("jdbc:mysql://mydatabase.123456789012.us-east-1.rds.amazonaws.com:3306",properties);
                stmt = connection.createStatement();
                rs=stmt.executeQuery("SELECT 1 from dual");
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                    }
                }
                if (stmt != null) {
                   try {
                        stmt.close();
                    } catch (SQLException e) {
                   }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;
        }
    }
```

**重要**  
在確定了資料庫連線使用 SSL/TLS 並已更新應用程式信任存放區之後，您可以將資料庫更新為使用 rds-ca-rsa2048-g1 憑證。如需說明，請參閱[透過修改資料庫執行個體或叢集來更新憑證授權機構憑證](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating)中的步驟 3。  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

# 對 Amazon RDS for MySQL 使用 Kerberos 身分驗證
<a name="mysql-kerberos"></a>

 您可以使用 Kerberos 身分驗證來在使用者連線到您的 MySQL 資料庫執行個體時對其進行身分驗證。資料庫執行個體使用 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD) 來啟用 Kerberos 身分驗證。使用者向加入信任網域的 MySQL 資料庫執行個體進行身分驗證時，會轉送身分驗證請求。轉送的請求會移至您用來建立的網域目錄Directory Service。

 將您的所有登入資料保留在相同目錄可以節省您的時間和精力。透過這種方式，這樣您就有一個集中的位置來存放及管理多個資料庫執行個體的登入資料。使用目錄也可以改善您的整體安全性描述檔。

## 區域和版本可用性
<a name="mysql-kerberos-setting-up.RegionVersionAvailability"></a>

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域 而有所不同。如需使用 Amazon RDS 搭配 Kerberos 身分驗證的版本和區域可用性的詳細資訊，請參閱 [支援 Amazon RDS 中 Kerberos 身分驗證的區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.md)。

## MySQL 資料庫執行個體設定 Kerberos 身分驗證概觀
<a name="mysql-kerberos-setting-up-overview"></a>

 如要針對 MySQL 資料庫執行個體設定 Kerberos 身分驗證，請完成下列一般步驟，稍後會有這方面的詳細說明：

1.  使用 AWS Managed Microsoft AD建立 AWS Managed Microsoft AD目錄。您可以使用 AWS 管理主控台、 AWS CLI或 Directory Service來建立目錄。如需執行此作業的詳細資訊，請參閱《 *AWS Directory Service管理指南*》中的[建立AWS Managed Microsoft AD目錄](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html)。

1.  建立使用 受管 IAM 政策 的 AWS Identity and Access Management(IAM) 角色`AmazonRDSDirectoryServiceAccess`。該角色允許 Amazon RDS 對您的目錄進行呼叫。

    若要讓 角色允許存取，必須在AWS 區域AWS您帳戶的 中啟用 AWS Security Token Service(AWS STS) 端點。 AWS STS端點預設會在所有 中處於作用中狀態AWS 區域，而且您可以使用它們，而不需要任何進一步的動作。如需詳細資訊，請參閱《*IAM 使用者指南*》中的在 [AWS STS中啟用和停用AWS 區域](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate) 。

1.  使用 Microsoft Active Directory 工具在 AWS Managed Microsoft AD目錄中建立和設定使用者。如需有關在 Active Directory 中建立使用者的詳細資訊，請參閱[《 管理指南》中的管理AWS受管 Microsoft AD 中的使用者和群組](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)。 *AWS Directory Service*

1.  建立或修改 MySQL 資料庫執行個體。如果您在建立請求中使用 CLI 或 RDS API，請使用 `Domain` 參數指定網域識別符。使用您在建立目錄時產生的 `d-*` 識別符，以及您建立的角色名稱。

    如果您修改了現有的 MySQL 資料庫執行個體以使用 Kerberos 身分驗證，將設定資料庫執行個體的網域和 IAM 角色參數。在與網域目錄相同的 VPC 中尋找資料庫執行個體。

1.  使用 Amazon RDS 主要使用者登入資料來連線到 MySQL 資料庫執行個體。使用 `CREATE USER` 子句 `IDENTIFIED WITH 'auth_pam'` 在 MySQL 中建立使用者。您透過這種方式建立的使用者可以使用 Kerberos 身分驗證登入 MySQL 資料庫執行個體。

## 為 MySQL 資料庫執行個體設定 Kerberos 身分驗證
<a name="mysql-kerberos-setting-up"></a>

 您可以使用 AWS Managed Microsoft AD來設定 MySQL 資料庫執行個體的 Kerberos 身分驗證。如要設定 Kerberos 身分驗證，您可以採取下列步驟。

### 步驟 1：使用 建立目錄AWS Managed Microsoft AD
<a name="mysql-kerberos-setting-up.create-directory"></a>

Directory Service在 AWS雲端中建立全受管 Active Directory。當您建立 AWS Managed Microsoft AD目錄時， 會代表您Directory Service建立兩個網域控制站和網域名稱系統 (DNS) 伺服器。目錄伺服器是在 VPC 的不同子網路中建立。此備援有助於確保即使發生故障，您仍然可以存取目錄。

 當您建立 AWS Managed Microsoft AD目錄時， 會代表您Directory Service執行下列任務：
+  在 VPC 內設定 Active Directory。
+  建立含有使用者名稱 Admin 與指定密碼的目錄管理員帳戶。您可以使用此帳戶來管理目錄。
**注意**  
 請務必儲存此密碼。Directory Service不會儲存它。您可以重設此密碼，但是無法擷取此密碼。
+  建立目錄控制器的安全群組。

 當您啟動 時AWS Managed Microsoft AD， 會AWS建立組織單位 (OU)，其中包含目錄的所有物件。此 OU 有您在建立目錄時所輸入的 NetBIOS 名稱，且位於根網域中。網域根由 擁有和管理AWS。

 使用AWS Managed Microsoft AD目錄建立的管理員帳戶具有 OU 最常見管理活動的許可：
+  建立、更新或刪除使用者 
+  將資源 (例如檔案或列印伺服器) 新增至您的網域，然後對您 OU 中的使用者指派這些資源的許可 
+  建立額外的 OU 和容器 
+  委派授權 
+  從 Active Directory 資源回收筒還原已刪除的物件 
+  在 Active Directory Web 服務上執行 AD 和 DNS Windows PowerShell 模組 

 管理員帳戶也有權執行下列全網域活動：
+  管理 DNS 組態 (新增、移除或更新記錄、區域和轉寄站) 
+  檢視 DNS 事件日誌 
+  檢視安全事件日誌 

**使用 建立目錄AWS Managed Microsoft AD**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/directoryservicev2/](https://console.aws.amazon.com/directoryservicev2/) 開啟 Directory Service主控台。

1.  在導覽窗格中，選擇 **Directories** (目錄)，然後選擇 **Set up directory** (設定目錄)。

1.  選擇 **AWS Managed Microsoft AD**。 AWS Managed Microsoft AD是您目前可與 Amazon RDS 搭配使用的唯一選項。

1.  輸入下列資訊：  
**目錄 DNS 名稱**  
 目錄的完全合格名稱，例如 **corp.example.com**。  
**目錄 NetBIOS 名稱**  
 目錄的簡短名稱，例如：**CORP**。  
**目錄描述**  
 (選用) 目錄的描述。  
**管理員密碼**  
 目錄管理員的密碼。目錄建立程序會建立含有使用者名稱 Admin 與這組密碼的管理員帳戶。  
 目錄管理員密碼不得包含 "admin" 字組。密碼區分大小寫，長度須為 8 至 64 個字元。至少須有一位字元屬於以下四種類型中的三類：  
   +  小寫字母 (a–z) 
   +  大寫字母 (A–Z) 
   +  數字 (0–9) 
   +  非英數字元 (\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**Confirm password (確認密碼)**  
 重新輸入的管理員密碼。

1. 選擇**下一步**。

1.  在 **Networking (聯網)** 區段輸入以下資訊，然後選擇 **Next (下一步)**。  
**VPC**  
 目錄的 VPC。在相同的 VPC 中建立 MySQL 資料庫執行個體。  
**子網路**  
 目錄伺服器的子網路。這兩個子網路必須位於不同的可用區域。

1.  檢閱目錄資訊，並進行必要的變更。若資訊無誤，請選擇 **Create directory (建立目錄)**。  
![\[在Directory Service主控台中建立目錄時的檢閱和建立視窗。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

 建立目錄需要幾分鐘的時間。成功建立時，**Status (狀態)** 值會變更為 **Active (作用中)**。

 如要查看您目錄的資訊，請在目錄清單中選擇目錄名稱。請記下 **Directory ID (目錄 ID)**，因為您在建立或修改 MySQL 資料庫執行個體時將需要這個值。

![\[Directory Service主控台中具有目錄 ID 的目錄詳細資訊區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


### 步驟 2：建立供 Amazon RDS 使用的 IAM 角色
<a name="mysql-kerberos-setting-up.CreateIAMRole"></a>

若要讓 Amazon RDS Directory Service為您呼叫 ，`AmazonRDSDirectoryServiceAccess`需要使用 受管 IAM 政策的 IAM 角色。此角色允許 Amazon RDS 呼叫 Directory Service。

使用 建立資料庫執行個體AWS 管理主控台且主控台使用者具有 `iam:CreateRole`許可時，主控台會自動建立此角色。在此情況下，角色名稱為 `rds-directoryservice-kerberos-access-role`。否則，您必須手動建立 IAM 角色。當您建立此 IAM 角色時，請選擇 `Directory Service`，然後將 AWS受管政策連接至`AmazonRDSDirectoryServiceAccess`該角色。

如需為服務建立 IAM 角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以將許可委派給 AWS服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**注意**  
用於 Windows Authentication for RDS for SQL Server 的 IAM 角色不可用於 RDS for MySQL。

您可以選擇性地建立具有必要許可的政策，而不是使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess`。在此情況下，IAM 角色必須有以下 IAM 信任政策。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "directoryservice.rds.amazonaws.com",
          "rds.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

此角色也須具有下列 IAM 角色政策：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "ds:DescribeDirectories",
        "ds:AuthorizeApplication",
        "ds:UnauthorizeApplication",
        "ds:GetAuthorizedApplicationDetails"
      ],
    "Effect": "Allow",
    "Resource": "*"
    }
  ]
}
```

------

### 步驟 3：建立和設定使用者
<a name="mysql-kerberos-setting-up.create-users"></a>

 您可以使用 Active Directory 使用者和運算集區來建立使用者。這個工具是 Active Directory Domain Services 和 Active Directory 輕量型目錄服務工具的一部分。使用者代表具有目錄存取權的個人或實體。

 若要在 Directory Service目錄中建立使用者，您必須連線到以 Microsoft Windows 為基礎的 Amazon EC2 執行個體。此執行個體必須是 Directory Service目錄的成員，並以具有建立使用者權限的使用者身分登入。如需詳細資訊，請參閱*《AWS Managed Microsoft AD Directory Service 管理指南》*中的[管理 AWS 中的使用者和群組](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/creating_ad_users_and_groups.html)。

### 步驟 4：建立或修改 MySQL 資料庫執行個體
<a name="mysql-kerberos-setting-up.create-modify"></a>

建立或修改 MySQL 資料庫執行個體以搭配您的目錄使用。您可以使用主控台、CLI 或 RDS API，將資料庫執行個體與目錄建立關聯。您可採用下列其中一種方式來這麼做：
+ 使用主控台、[ create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI 命令，或 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API 操作，建立新的 MySQL 資料庫執行個體。

  如需說明，請參閱「[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)」。
+ 使用主控台、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI 命令，或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作，修改現有的 MySQL 資料庫執行個體。

  如需說明，請參閱「[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)」。
+ 使用主控台、[restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI 命令，或 [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API 操作，從資料庫快照還原 MySQL 資料庫執行個體。

  如需說明，請參閱「[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)」。
+ 使用主控台、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI 命令，或 [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API 操作，將 MySQL 資料庫執行個體還原至某個時間點。

  如需說明，請參閱「[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)」。

僅有 VPC 中的 MySQL 資料庫執行個體支援 Kerberos 身分驗證。資料庫執行個體可在與目錄相同的 VPC 中，或在不同 VPC 中。資料庫執行個體必須使用允許目錄 VPC 內傳入的安全群組，如此資料庫執行個體才能與目錄通訊。

使用主控台建立、修改或還原資料庫執行個體時，請在 **Database authentication** (資料庫身分驗證) 區段中選擇 **Password and Kerberos authentication** (密碼和 Kerberos 身分驗證)。選擇 **Browse Directory (瀏覽目錄)** 並選取目錄，或是選擇 **Create a new directory (建立新目錄)**。

![\[在 Amazon RDS 主控台中選取含有密碼和 Kerberos 身分驗證的資料庫身分驗證區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/kerberos-authentication.png)


當您使用 AWS CLI或 RDS API 時，請將資料庫執行個體與目錄建立關聯。資料庫執行個體需要下列參數，才能使用您建立的網域目錄：
+ 針對 `--domain` 參數，使用您建立目錄時產生的網域識別碼 ("d-\$1" 識別碼)。
+ 針對 `--domain-iam-role-name` 參數，使用您建立的規則，其會使用受管 IAM 政策 `AmazonRDSDirectoryServiceAccess`。

 例如，下列 CLI 命令會修改資料庫執行個體來使用目錄。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier mydbinstance \
    --domain d-ID \
    --domain-iam-role-name role-name
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier mydbinstance ^
    --domain d-ID ^
    --domain-iam-role-name role-name
```

**重要**  
如果您修改資料庫執行個體，以啟用 Kerberos 身分驗證，請在進行變更後重新啟動資料庫執行個體。

### 步驟 5：建立 Kerberos 身分驗證 MySQL 登入
<a name="mysql-kerberos-setting-up.create-logins"></a>

 使用 Amazon RDS 主要使用者登入資料來連線到 MySQL 資料庫執行個體，方法與其他任何的資料庫執行個體相同。資料庫執行個體會加入AWS Managed Microsoft AD網域。因此，您可以從您網域中的 Active Directory 使用者佈建 MySQL 登入和使用者。資料庫許可會透過標準 MySQL 許可管理，並從這些登入授予及撤銷。

 您可以允許 Active Directory 使用者與 MySQL 進行身分驗證。若要執行此作業，請先使用 Amazon RDS 主要使用者登入資料連線到 MySQL 資料庫執行個體，方法與其他任何的資料庫執行個體相同。登入之後，請執行下列命令，在 MySQL 中建立使用 PAM (插入式驗證模組) 於外部進行身分驗證的使用者。將 `testuser` 取代成使用者名稱。

```
CREATE USER 'testuser'@'%' IDENTIFIED WITH 'auth_pam';
```

 來自您網域的使用者 (人員和應用程式兩者) 現在可以使用 Kerberos 身分驗證從加入網域的用戶端機器連線至資料庫執行個體。

**重要**  
強烈建議用戶端在使用 PAM 身分驗證時使用 SSL/TLS 連線。如果他們未使用 SSL/TLS 連線，在某些情況下，密碼可能會以純文字形式傳送。若要要求 AD 使用者使用 SSL/TLS 加密連線，請執行下列命令 (請將 `testuser` 取代為使用者名稱)：  

```
ALTER USER 'testuser'@'%' REQUIRE SSL;
```
如需詳細資訊，請參閱[Amazon RDS 對 MySQL 資料庫執行個體的 SSL/TLS 支援](MySQL.Concepts.SSLSupport.md)。

## 管理網域中的資料庫執行個體
<a name="mysql-kerberos-managing"></a>

 您可以使用 CLI 或 RDS API 來管理資料庫執行個體，以及其與受管 Active Directory 的關係。例如，您可以與適用於 Kerberos 身分驗證的 Active Directory 建立關聯，也可以解除關聯 Active Directory 來停用 Kerberos 身分驗證。您也可以將要由某個 Active Directory 於外部進行身分識別的資料庫執行個體移至另一個 Active Directory。

 例如，使用 Amazon RDS API，您可以執行下列動作：
+  如要重新嘗試為失敗的成員資格啟用 Kerberos 身分驗證，請使用 `ModifyDBInstance` API 操作並指定目前成員資格的目錄 ID。
+  如要更新成員資格的 IAM 角色名稱，請使用 `ModifyDBInstance` API 操作並指定目前成員資格的目錄 ID，以及新的 IAM 角色。
+  停用資料庫執行個體上的 Kerberos 身分驗證，使用 `ModifyDBInstance` API 操作並指定 `none` 做為網域參數。
+  如要在網域之間移動資料庫執行個體，請使用 `ModifyDBInstance` API 操作，並指定新網域的網域識別符做為網域參數。
+  如要列出每個資料庫執行個體的成員資格，請使用 `DescribeDBInstances` API 操作。

### 了解網域成員資格
<a name="mysql-kerberos-managing.understanding"></a>

 在您建立或修改資料庫執行個體之後，該執行個體會成為網域的成員。您可以執行 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) CLI 命令，來檢視資料庫執行個體的網域成員資格狀態。資料庫執行個體的狀態可以是下列其中一個：
+  `kerberos-enabled` – 資料庫執行個體已啟用 Kerberos 身分驗證。
+  `enabling-kerberos` – AWS正在在此資料庫執行個體上啟用 Kerberos 身分驗證。
+  `pending-enable-kerberos` – 啟用 Kerberos 身分驗證的過程正在此資料庫執行個體上遭到擱置。
+  `pending-maintenance-enable-kerberos` – AWS將在下一個排定的維護時段嘗試在資料庫執行個體上啟用 Kerberos 身分驗證。
+  `pending-disable-kerberos` – 停用 Kerberos 身分驗證的過程正在此資料庫執行個體上遭到擱置。
+  `pending-maintenance-disable-kerberos` – AWS將嘗試在下一個排定的維護時段停用資料庫執行個體上的 Kerberos 身分驗證。
+  `enable-kerberos-failed` – 有一個組態問題已禁止 AWS 在資料庫執行個體上啟用 Kerberos 身分驗證。請在重新發出資料庫執行個體修改命令之前檢查並修正您的組態。
+  `disabling-kerberos` – AWS正在停用此資料庫執行個體上的 Kerberos 身分驗證。

 由於網路連線問題或 IAM 角色不正確，請求啟用 Kerberos 身分驗證可能失敗。例如，假設您建立了資料庫執行個體或修改了現有的資料庫執行個體，並且嘗試啟用 Kerberos 身分驗證失敗。如果發生這種情況，請重新發出修改命令，或修改新建立的資料庫執行個體以加入網域。

## 使用 Kerberos 身分驗證連線至 MySQL
<a name="mysql-kerberos-connecting"></a>

 如要使用 Kerberos 身分驗證連線至 MySQL，您必須使用 Kerberos 身分驗證類型登入。

 如要建立您可以使用 Kerberos 身分驗證連線的資料庫使用者，請在 `IDENTIFIED WITH` 陳述式上使用 `CREATE USER` 子句。如需說明，請參閱「[步驟 5：建立 Kerberos 身分驗證 MySQL 登入](#mysql-kerberos-setting-up.create-logins)」。

為了避免錯誤，請使用 MariaDB `mysql` 用戶端。您可以在 [https://downloads.mariadb.org/](https://downloads.mariadb.org/) 下載 MariaDB 軟體。

在命令提示字元中，連線至與 MySQL 資料庫執行個體相關聯的其中一個端點。遵循 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md) 中的一般程序。當系統提示您輸入密碼時，請輸入與該使用者名稱相關聯的 Kerberos 密碼。

## 還原 MySQL 資料庫執行個體並新增至網域
<a name="mysql-kerberos-restoring"></a>

 您可以還原資料庫快照或為 MySQL 資料庫執行個體完成時間點還原，然後將其新增至網域。還原資料庫執行個體後，請使用 [步驟 4：建立或修改 MySQL 資料庫執行個體](#mysql-kerberos-setting-up.create-modify) 中說明的程序來修改資料庫執行個體，將資料庫執行個體新增到網域。

## Kerberos 身分驗證 MySQL 限制
<a name="mysql-kerberos.limitations"></a>

 下列限制適用於 MySQL 的 Kerberos 身分驗證：
+ 僅AWS Managed Microsoft AD支援 。不過，您可以將 RDS for MySQL 資料庫執行個體加入至相同 AWS 區域 中，不同帳戶所擁有的共用受管 Microsoft AD 網域。
+  啟用功能後，您必須重新啟動資料庫執行個體。
+  網域名稱長度不能超過 61 個字元。
+  您無法同時啟用 Kerberos 身分驗證和 IAM 身分驗證。為您的 MySQL 資料庫執行個體選擇一種身分驗證方法或另一種。
+  啟用功能後，請勿修改資料庫執行個體連接埠。
+  請勿搭配僅供讀取複本使用 Kerberos 身分驗證。
+ 如果您已針對使用 Kerberos 驗證的 MySQL 資料庫執行個體開啟自動次要版本升級，則必須關閉 Kerberos 驗證，然後在自動升級之後重新開啟該執行個體。如需自動次要版本升級的詳細資訊，請參閱 [RDS for MySQL 的自動次要版本升級](USER_UpgradeDBInstance.MySQL.Minor.md)。
+  如要在啟用此功能的情況下刪除資料庫執行個體，請先停用功能。若要執行此作業，請對資料庫執行個體執行 `modify-db-instance` CLI 命令，然後為 `none` 參數指定 `--domain`。

   如果您使用 CLI 或 RDS API 來刪除啟用此功能的資料庫執行個體，則預期會有延遲。
+ RDS for MySQL 不支援透過內部部署或自我託管 AD 與 AWS Managed Microsoft AD 之間的樹系信任進行 Kerberos 身分驗證。

# 使用 Amazon RDS Optimized Reads 改善 RDS for MySQL 的查詢效能
<a name="rds-optimized-reads"></a>

您可以使用 Amazon RDS Optimized Reads，為 RDS for MySQL 實現更快的查詢處理。使用 RDS Optimized Reads 的 RDS for MySQL 資料庫執行個體或多可用區域資料庫叢集，相較於不使用它的情況，查詢處理速度最高可以快上 2 倍。

**Topics**
+ [

## RDS Optimized Reads 的概觀
](#rds-optimized-reads-overview)
+ [

## RDS Optimized Reads 的使用案例
](#rds-optimized-reads-use-cases)
+ [

## RDS Optimized Reads 的最佳實務
](#rds-optimized-reads-best-practices)
+ [

## 使用 RDS Optimized Reads
](#rds-optimized-reads-using)
+ [

## 監控使用 RDS Optimized Reads 的資料庫執行個體
](#rds-optimized-reads-monitoring)
+ [

## RDS Optimized Reads 的限制
](#rds-optimized-reads-limitations)

## RDS Optimized Reads 的概觀
<a name="rds-optimized-reads-overview"></a>

當您使用已開啟 RDS Optimized Reads 的 RDS for MySQL 資料庫執行個體或多可用區域資料庫叢集時，其可透過使用執行個體儲存體實現更快的查詢效能。*執行個體儲存體*為資料庫執行個體或多可用區域資料庫叢集提供暫時的區塊層級儲存空間。儲存體位於實際連接至主機伺服器的非揮發性記憶體儲存裝置 (NVMe) 固態硬碟 (SSD) 中。此儲存體已針對低延遲、高隨機 I/O 效能，以及高循序讀取輸送量進行最佳化。

當資料庫執行個體或多可用區域資料庫叢集使用資料庫執行個體類別搭配執行個體儲存體 (例如 db.m5d 或 db.m6gd) 時，預設會開啟 RDS Optimized Reads。使用 RDS Optimized Reads，部分臨時物件會存放在執行個體儲存體上。這些暫存物件包括內部暫存檔、內部磁碟上暫存資料表、記憶體對應檔案，以及二進位日誌 (binlog) 快取檔案。如需執行個體儲存體的詳細資訊，請參閱《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》**中的 [Amazon EC2 執行個體儲存體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)。

在 MySQL 中產生臨時物件以進行查詢處理的工作負載，可以利用執行個體儲存體來加快查詢處理速度。這種類型的工作負載包括涉及排序、雜湊彙總、高負載聯結、一般資料表運算式 (CTE) 的查詢，以及未編製索引之資料欄上的查詢。無論用於持久性 Amazon EBS 儲存體的儲存體組態為何，這些執行個體儲存體都會提供更高的 IOPS 和效能。因為 RDS Optimized Reads 將臨時物件上的操作卸載至執行個體儲存體，所以持久性儲存體 (Amazon EBS) 的每秒讀寫次數 (IOPS)或輸送量現在可以用於持久性物件上的操作。這些操作包括一般資料檔案讀取和寫入，以及背景引擎操作，例如排清和插入緩衝區合併。

**注意**  
手動和自動 RDS 快照都只包含持久性物件的引擎檔案。在執行個體儲存體中建立的臨時物件不會包含在 RDS 快照集中。

## RDS Optimized Reads 的使用案例
<a name="rds-optimized-reads-use-cases"></a>

如果您的工作負載嚴重依賴臨時物件 (例如內部資料表或檔案) 進行其查詢執行，則您可以從開啟 RDS Optimized Reads 中獲益。下列使用案例為 RDS Optimized Reads 的候選項目：
+ 使用複雜的一般資料表運算式 (CTE)、衍生資料表和群組操作來執行分析查詢的應用程式
+ 使用未最佳化查詢提供大量讀取流量的僅供讀取複本
+ 執行涉及複雜作業之隨需或動態報告查詢的應用程式，例如搭配 `GROUP BY` 和 `ORDER BY` 子句的查詢
+ 使用內部暫存資料表進行查詢處理的工作負載

  您可以監控引擎狀態變數 `created_tmp_disk_tables`，以判斷在資料庫執行個體上建立的磁碟型暫存資料表數目。
+ 直接或在程序中建立大型暫存資料表以儲存中繼結果的應用程式
+ 對未編製索引之資料欄執行分組或排序的資料庫查詢

## RDS Optimized Reads 的最佳實務
<a name="rds-optimized-reads-best-practices"></a>

請使用 RDS Optimized Reads 的下列最佳實務：
+ 針對唯讀查詢新增重試邏輯，以防這些查詢在執行期間由於執行個體儲存體已滿而失敗。
+ 使用 CloudWatch 指標 `FreeLocalStorage` 監控執行個體儲存體上的可用儲存空間。如果執行個體儲存體由於資料庫執行個體的工作負載而達到其限制，請修改資料庫執行個體，以使用較大的資料庫執行個體類別。
+ 當您的資料庫執行個體有足夠的記憶體，但仍達到執行個體儲存體或多可用區域資料庫叢集的儲存限制時，請增加 `binlog_cache_size` 值以在記憶體中維護工作階段特定的 binlog 項目。此組態可防止將 binlog 項目寫入至磁碟上的暫存 binlog 快取檔案。

  `binlog_cache_size` 參數是工作階段特有的。您可以變更每個新工作階段的值。此參數的設定可以在尖峰工作負載期間增加資料庫執行個體的記憶體使用率。因此，請考慮根據您應用程式的工作負載模式和資料庫執行個體上的可用記憶體來增加參數值。
+ 對於 MySQL 8.0 版和較低版本，請使用 `binlog_format` 參數的預設值 `MIXED`。根據交易的大小，將 `binlog_format` 設為 `ROW` 可能會在執行個體儲存體上產生大型 binlog 快取檔案。對於 MySQL 8.4 和更高版本，請使用 `binlog_format` 參數的預設值 `ROW`。
+ 將 [internal\$1tmp\$1mem\$1storage\$1engine](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_internal_tmp_mem_storage_engine) 參數設為 `TempTable`，然後設定 [temptable\$1max\$1mmap](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_temptable_max_mmap) 參數，以符合執行個體儲存體上可用儲存體的大小。
+ 避免在單一交易中執行大量變更。這些類型的交易可能會在執行個體儲存體上產生大型 binlog 快取檔案，並在執行個體儲存體已滿時產生問題。請考慮將寫入分割成多個小型交易，以將 binlog 快取檔案使用的儲存體減至最少。
+ 將 `ABORT_SERVER` 的預設值用於 `binlog_error_action` 參數。這樣做可避免在啟用備份的資料庫執行個體上進行二進位記錄時發生問題。

## 使用 RDS Optimized Reads
<a name="rds-optimized-reads-using"></a>

當您在單一可用區域資料庫執行個體部署、多可用區域資料庫執行個體部署或多可用區域資料庫叢集部署中，佈建具有下列其中一個資料庫執行個體類別的 RDS for MySQL 資料庫執行個體時，資料庫執行個體會自動使用 RDS Optimized Reads。

若要開啟 RDS Optimized Reads，請執行下列其中一項：
+ 使用其中一個資料庫執行個體類別，建立 RDS for MySQL 資料庫執行個體或多可用區域資料庫叢集。如需詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
+ 修改現有的 RDS for MySQL 資料庫執行個體或多可用區域資料庫叢集，以使用其中一個資料庫執行個體類別。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

RDS Optimized Reads 適用於支援其中一或多個具有本機 NVMe SSD 儲存體的資料庫執行個體類別之所有 AWS 區域 RDS。如需資料庫執行個體類別的相關資訊，請參閱 [ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

資料庫執行個體類別的可用性因 AWS 區域而異。若要判斷特定的 AWS 區域 是否支援資料庫執行個體類別，請參閱 [在 中判斷資料庫執行個體類別支援 AWS 區域](Concepts.DBInstanceClass.RegionSupport.md)。

如果您不想要使用 RDS Optimized Reads，請修改資料庫執行個體或多可用區域資料庫叢集，以便其不使用支援該功能的資料庫執行個體類別。

## 監控使用 RDS Optimized Reads 的資料庫執行個體
<a name="rds-optimized-reads-monitoring"></a>

您可以透過下列 CloudWatch 指標，監控使用 RDS Optimized Reads 的資料庫執行個體：
+ `FreeLocalStorage`
+ `ReadIOPSLocalStorage`
+ `ReadLatencyLocalStorage`
+ `ReadThroughputLocalStorage`
+ `WriteIOPSLocalStorage`
+ `WriteLatencyLocalStorage`
+ `WriteThroughputLocalStorage`

這些指標提供可用執行個體儲存體、IOPS 和輸送量的相關資料。如需這些指標的詳細資訊，請參閱 [Amazon RDS 的 Amazon CloudWatch 執行個體層級指標](rds-metrics.md#rds-cw-metrics-instance)。

## RDS Optimized Reads 的限制
<a name="rds-optimized-reads-limitations"></a>

下列限制適用於 RDS Optimized Reads：
+ 下列版本支援 RDS Optimized Reads:
  + RDS for MySQL 8.0.28 版和更高的主要與次要版本

  如需 RDS for MySQL 版本的相關資訊，請參閱 [MySQL on Amazon RDS 版本](MySQL.Concepts.VersionMgmt.md)。
+ 您無法在支援 RDS Optimized Reads 的資料庫執行個體類別上，將臨時物件的位置變更為持久性儲存體 (Amazon EBS)。
+ 在資料庫執行個體上啟用二進位記錄時，交易大小上限受執行個體儲存體的大小限制。在 MySQL 中，任何需要儲存體超過 `binlog_cache_size` 寫入交易值的工作階段，都會變更為暫存 binlog 快取檔案，這些檔案是在執行個體儲存體上建立的。
+ 執行個體儲存體已滿時，交易會失敗。

# 使用 RDS Optimized Writes 改善 MySQL 的寫入效能
<a name="rds-optimized-writes"></a>

您可以使用 RDS Optimized Writes for MySQL 來改善寫入交易的效能。當您的 RDS for MySQL 資料庫使用 RDS Optimized Writes 時，它可以實現高達兩倍的寫入交易輸送量。

**Topics**
+ [

## RDS Optimized Writes 的概觀
](#rds-optimized-writes-overview)
+ [

## 使用 RDS Optimized Writes
](#rds-optimized-writes-using)
+ [

## 在現有資料庫上啟用 RDS Optimized Writes
](#rds-optimized-writes-modify-enable)
+ [

## RDS Optimized Writes 的限制
](#rds-optimized-writes-limitations)

## RDS Optimized Writes 的概觀
<a name="rds-optimized-writes-overview"></a>

當您開啟 RDS Optimized Writes 時，您的 RDS for MySQL 資料庫只會在將資料排清至持久性儲存體時寫入一次，而不需要雙寫緩衝區。資料庫會繼續為可靠的資料庫交易提供 ACID 屬性保護，以及改善的效能。

關聯式資料庫 (例如 MySQL) 為可靠的資料庫交易提供不可分割性、一致性、隔離和耐久性的 *ACID 屬性*。為了協助提供這些屬性，MySQL 會使用稱為*雙寫緩衝區*的資料儲存區域，防止部分頁面寫入錯誤。當資料庫正在更新頁面時發生硬體故障 (例如停電) 時，就會發生這些錯誤。MySQL 資料庫可以偵測部分頁面寫入，並使用雙寫緩衝區中的頁面複本進行復原。雖然這項技術可提供保護，但也會產生額外的寫入操作。如需 MySQL 雙寫緩衝區的詳細資訊，請參閱 MySQL 文件中的[雙寫緩衝區](https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html)。

開啟 RDS Optimized Reads 後，您的 RDS for MySQL 資料庫只會在將資料排清至持久性儲存體時寫入一次，而不需使用雙寫緩衝區。如果您在 RDS for MySQL 資料庫上執行大量寫入工作負載，則 RDS Optimized Reads 很有用。具有大量寫入工作負載的資料庫範例包括支援數位支付、金融交易和遊戲應用程式的資料庫。

這些資料庫會在使用 AWS Nitro 系統的資料庫執行個體類別上執行。由於這些系統中的硬體組態，資料庫可以在一個步驟中可靠且持久地將 16 KiB 頁面直接寫入至資料檔案。 AWS Nitro 系統讓 RDS Optimized Writes 成為可能。

您可以設定新的資料庫參數 `rds.optimized_writes`，以控制 RDS for MySQL 資料庫的 RDS Optimized Writes 功能。在 RDS for MySQL 8.0 版和 RDS for MySQL 8.4 版的資料庫參數群組中存取此參數。請使用下列值設定參數：
+ `AUTO` – 開啟 RDS Optimized Writes (如果資料庫支援它)。關閉 RDS Optimized Writes (如果資料庫不支援它)。此設定是預設值。
+ `OFF` – 關閉 RDS Optimized Writes，即使資料庫支援它也一樣。

如果您的現有資料庫具有不支援 RDS Optimized Writes 的引擎版本、資料庫執行個體類別和/或檔案系統格式，則您可以透過建立藍/綠部署來啟用此功能。如需詳細資訊，請參閱[在現有資料庫上啟用 RDS Optimized Writes](#rds-optimized-writes-modify-enable)。

如果您將設定為使用 RDS Optimized Writes 的 RDS for MySQL 資料庫遷移至不支援此功能的資料庫執行個體類別，RDS 會自動關閉資料庫的 RDS Optimized Writes。

當 RDS Optimized Writes 關閉時，資料庫會使用 MySQL 雙寫緩衝區。

若要判斷 RDS for MySQL 資料庫是否使用 RDS Optimized Writes，請檢視資料庫 `innodb_doublewrite` 參數目前的值。如果資料庫使用 RDS Optimized Writes，則此參數會設為 `FALSE` (`0`)。

## 使用 RDS Optimized Writes
<a name="rds-optimized-writes-using"></a>

當您使用 RDS 主控台 AWS CLI、 或 RDS API 建立 RDS for MySQL 資料庫時，可以開啟 RDS Optimized Writes。在資料庫建立期間滿足下列兩個條件時，RDS Optimized Writes 會自動開啟：
+ 您指定一個支援 RDS Optimized Writes 的資料庫引擎版本和資料庫執行個體類別。
  + RDS for MySQL 8.0.30 版和更新版本支援 RDS Optimized Writes。如需 RDS for MySQL 版本的相關資訊，請參閱 [MySQL on Amazon RDS 版本](MySQL.Concepts.VersionMgmt.md)。
  + 使用下列資料庫執行個體類別的 RDS for MySQL 資料庫支援 RDS Optimized Writes：
    + db.m7i
    + db.m7g
    + db.m6g
    + DB.m6gd
    + db.m6i
    + db.m5
    + db.m5d
    + db.r7i
    + db.r7g
    + db.r6g
    + db.r6gd
    + db.r6i
    + db.r5
    + db.r5b
    + db.r5d
    + db.x2idn
    + db.x2iedn

    如需資料庫執行個體類別的相關資訊，請參閱 [ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

    資料庫執行個體類別可用性會有所不同 AWS 區域。若要判斷特定 是否支援資料庫執行個體類別 AWS 區域，請參閱 [在 中判斷資料庫執行個體類別支援 AWS 區域](Concepts.DBInstanceClass.RegionSupport.md)。

    若要將資料庫升級為支援 RDS Optimized Writes 的資料庫執行個體類別，您可以建立藍/綠部署。如需詳細資訊，請參閱[在現有資料庫上啟用 RDS Optimized Writes](#rds-optimized-writes-modify-enable)。
+ 在與資料庫相關聯的參數群組中，`rds.optimized_writes` 參數設為 `AUTO`。在預設參數群組中，此參數一律設為 `AUTO`。

如果您想要使用支援 RDS Optimized Writes 的資料庫引擎版本和資料庫執行個體類別，但不想要使用此功能，則請在建立資料庫時指定自訂參數群組。在此參數群組中，將 `rds.optimized_writes` 參數設為 `OFF`。如果您想要資料庫稍後使用 RDS Optimized Writes，則可以將參數設為 `AUTO` 將其開啟。如需建立自訂參數群組和設定參數的相關資訊，請參閱 [Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

如需建立資料庫執行個體的相關資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。

### 主控台
<a name="rds-optimized-writes-using-console"></a>

使用 RDS 主控台建立 RDS for MySQL 資料庫時，您可以篩選支援 RDS Optimized Writes 的資料庫引擎版本和資料庫執行個體類別。開啟篩選條件後，您可以從可用的資料庫引擎版本和資料庫執行個體類別中進行選擇。

若要選擇支援 RDS 最佳化寫入的資料庫引擎版本，請在 **Engine version** (引擎版本) 中篩選支援它的 RDS for MySQL 資料庫引擎版本，然後選擇版本。

![\[為引擎版本開啟了 Amazon RDS Optimized Writes 篩選條件的引擎選項區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-version-filter.png)


在 **Instance configuration** (執行個體組態) 區段中，篩選支援 RDS Optimized Writes 的資料庫執行個體類別，然後選擇資料庫執行個體類別。

![\[為資料庫執行個體類別開啟了 Amazon RDS Optimized Writes 篩選條件的執行個體組態區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-class-filter.png)


在做出這些選擇之後，您可以選擇其他符合您需求的設定，並使用主控台完成建立 RDS for MySQL 資料庫。

### AWS CLI
<a name="rds-optimized-writes-using-cli"></a>

若要使用 建立資料庫執行個體 AWS CLI，請執行 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 命令。確定 `--engine-version` 和 `--db-instance-class` 值支援 RDS Optimized Writes。此外，確定與資料庫執行個體相關聯的參數群組已將 `rds.optimized_writes` 參數設為 `AUTO`：此範例會將預設參數群組與資料庫執行個體建立關聯。

**Example 建立使用 RDS Optimized Writes 的資料庫執行個體**  
針對 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine mysql \
4.     --engine-version 8.0.30 \
5.     --db-instance-class db.r5b.large \
6.     --manage-master-user-password \
7.     --master-username admin \
8.     --allocated-storage 200
```
在 Windows 中：  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine mysql ^
4.     --engine-version 8.0.30 ^
5.     --db-instance-class db.r5b.large ^
6.     --manage-master-user-password ^
7.     --master-username admin ^
8.     --allocated-storage 200
```

### RDS API
<a name="rds-optimized-writes-using-api"></a>

您可以使用 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 操作，建立資料庫執行個體。使用此操作時，確定 `EngineVersion` 和 `DBInstanceClass` 值支援 RDS Optimized Writes。此外，確定與資料庫執行個體相關聯的參數群組已將 `rds.optimized_writes` 參數設為 `AUTO`：

## 在現有資料庫上啟用 RDS Optimized Writes
<a name="rds-optimized-writes-modify-enable"></a>

為了修改現有的 RDS for MySQL，以開啟 RDS Optimized Writes，必須已使用支援的資料庫引擎版本和資料庫執行個體類別建立資料庫。此外，必須在 2022 年 11 月 27 日發行 RDS Optimized Writes *之後*建立了資料庫，因為所需的基礎檔案系統組態與發行之前所建立之資料庫的組態不相容。如果符合這些條件，您可以透過將 `rds.optimized_writes` 參數設定為 `AUTO` 來開啟 RDS Optimized Writes。

如果*未*使用支援的引擎版本、執行個體類別或檔案系統組態，來建立您的資料庫，您可以使用 RDS 藍/綠部署遷移至支援的組態。建立藍/綠部署時，請執行以下動作：
+ 選取**在綠色資料庫上啟用 Optimized Writes**，然後指定支援 RDS Optimized Writes 的引擎版本和資料庫執行個體。如需受支援引擎版本和執行個體類別的清單，請參閱 [使用 RDS Optimized Writes](#rds-optimized-writes-using)。
+ 在**儲存體**下，選擇**升級儲存體檔案系統組態**。此選項會將資料庫升級為相容的基礎檔案系統組態。

建立藍/綠部署時，如果將 `rds.optimized_writes` 參數設定為 `AUTO`，則會在綠色環境上自動啟用 RDS Optimized Writes。然後，您可以轉換藍/綠部署，將綠色環境提升至新的生產環境。

如需詳細資訊，請參閱[在 Amazon RDS 中建立藍/綠部署](blue-green-deployments-creating.md)。

## RDS Optimized Writes 的限制
<a name="rds-optimized-writes-limitations"></a>

當您從快照還原 RDS for MySQL 資料庫時，只有在下列所有條件都滿足時，才能開啟資料庫的 RDS Optimized Writes：
+ 快照集是從支援 RDS Optimized Writes 的資料庫建立的。
+ 快照是從發佈 RDS Optimized Writes *之後*所建立的資料庫中建立的。
+ 快照還原至支援 RDS Optimized Writes 的資料庫。
+ 還原的資料庫與將 `rds.optimized_writes` 參數設為 `AUTO` 的參數群組相關聯。

# RDS for MySQL 資料庫引擎的升級
<a name="USER_UpgradeDBInstance.MySQL"></a>

當 Amazon RDS 支援新版本的資料庫引擎時，您可以將資料庫執行個體升級為新版本。MySQL 資料庫有兩種升級︰主要版本升級和次要版本升級。

**主要版本升級**  
*主要版本升級* 可能包含與現有應用程式回溯不相容的資料庫變更。因此，您必須手動執行資料庫執行個體的主要版本升級。您可以修改資料庫執行個體，啟動主要版本升級。在您執行主要的版本升級之前，建議您依照 [RDS for MySQL 的主要版本升級](USER_UpgradeDBInstance.MySQL.Major.md) 中的指示操作。  
對於多可用區域資料庫執行個體部署的主要版本升級，Amazon RDS 會同時升級主要和待命複本。在升級完成之前，您的資料庫執行個體將無法使用。對於多可用區域資料庫叢集部署的主要版本升級，Amazon RDS 會逐一升級叢集成員執行個體。  
您可以使用藍/綠部署，將主要版本升級所需的停機時間降至最低。如需詳細資訊，請參閱[使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

**次要版本升級**  
*次要版本升級*僅包含與現有應用程式回溯相容的變更。您可以修改資料庫執行個體，手動啟動次要版本升級。或者，您也可以在建立或修改資料庫執行個體時啟用**自動次要版本升級**選項。這麼做代表 Amazon RDS 會在測試並核准新版本後自動升級您的資料庫執行個體。如需執行升級的相關資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。  
當您執行多可用區域資料庫叢集的次要版本升級時，Amazon RDS 會逐一升級讀取器資料庫執行個體。然後，其中一個讀取器資料庫執行個體會切換為新的寫入器資料庫執行個體。Amazon RDS 接著會升級舊的寫入器執行個體 (現在是讀取器執行個體)。  
多可用區域資料庫*執行個體*部署的次要版本升級停機時間可能持續數分鐘。多可用區域資料庫叢集通常可將次要版本升級的停機時間縮短到約 35 秒。與 RDS Proxy 搭配使用時，您可以進一步將停機時間縮短至一秒或更短。如需詳細資訊，請參閱[Amazon RDS Proxy ](rds-proxy.md)。或者，您可以使用開放原始碼資料庫代理，例如 [ProxySQL](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/)、[PgBouncer](https://aws.amazon.com/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/) 或 [AWS 進階 JDBC 包裝函式驅動程式](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/)。

Amazon RDS 也支援升級推展政策，以管理跨多個資料庫資源和 的自動次要版本升級 AWS 帳戶。如需詳細資訊，請參閱[使用 AWS Organizations 升級推展政策進行自動次要版本升級](RDS.Maintenance.AMVU.UpgradeRollout.md)。

如果 MySQL 資料庫執行個體使用僅供讀取複本，您就必須在升級來源執行個體之前，先升級所有僅供讀取複本。

**Topics**
+ [

## MySQL 升級考量
](#USER_UpgradeDBInstance.MySQL.Considerations)
+ [

## 尋找有效的升級目標
](#USER_UpgradeDBInstance.MySQL.FindingTargets)
+ [

# MySQL 版本號碼
](USER_UpgradeDBInstance.MySQL.VersionID.md)
+ [

# RDS for MySQL 中的 RDS 版本號碼
](USER_UpgradeDBInstance.MySQL.rds.version.md)
+ [

# RDS for MySQL 的主要版本升級
](USER_UpgradeDBInstance.MySQL.Major.md)
+ [

# 測試 RDS for MySQL 升級
](USER_UpgradeDBInstance.MySQL.UpgradeTesting.md)
+ [

## 升級 MySQL 資料庫執行個體
](#USER_UpgradeDBInstance.MySQL.Upgrading)
+ [

# RDS for MySQL 的自動次要版本升級
](USER_UpgradeDBInstance.MySQL.Minor.md)
+ [

# 使用僅供讀取複本在升級 RDS for MySQL 資料庫時減少停機時間
](USER_UpgradeDBInstance.MySQL.ReducedDowntime.md)
+ [

# 使用事件監控 RDS for MySQL 引擎升級
](USER_UpgradeDBInstance.MySQL.Monitoring.md)

## MySQL 升級考量
<a name="USER_UpgradeDBInstance.MySQL.Considerations"></a>

Amazon RDS 在升級過程中會建立兩個以上的資料庫快照。Amazon RDS 在進行任何升級變更*之前*，最多會建立兩個資料庫執行個體快照。如果升級對資料庫沒有用處，您可以還原其中一個快照，以建立執行舊版本的資料庫執行個體。升級完成時，Amazon RDS 會建立資料庫執行個體的另一個快照。無論 是否 AWS Backup 管理資料庫執行個體的備份，Amazon RDS 都會拍攝這些快照。

**注意**  
只在您將資料庫執行個體的備份保留期設為大於 0 的數字時，Amazon RDS 才會建立資料庫快照。若要變更備份保留期，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

升級完成之後，您就無法回復至前一版的資料庫引擎。如果您想要回到前一版，請還原第一個建立的資料庫快照，以建立新的資料庫執行個體。

您可以控制何時將資料庫執行個體升級至 Amazon RDS 支援的新版本。這一層控制協助您維持與特定資料庫版本的相容性，並且先在您的應用程式上測試新版本，再部署於生產環境。準備好時，您就可以在最適合排程的時間執行版本升級。

如果資料庫執行個體使用讀取複寫，您就必須在升級來源執行個體之前，先升級所有僅供讀取複本。

## 尋找有效的升級目標
<a name="USER_UpgradeDBInstance.MySQL.FindingTargets"></a>

當您使用 AWS 管理主控台 來升級資料庫執行個體時，會顯示資料庫執行個體的有效升級目標。您也可以執行下列 AWS CLI 命令來識別資料庫執行個體的有效升級目標：

針對 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
  --engine mysql \
  --engine-version version_number \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

在 Windows 中：

```
aws rds describe-db-engine-versions ^
  --engine mysql ^
  --engine-version version_number ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

例如，若要識別 MySQL 8.0.28 版資料庫執行個體的有效升級目標，請執行下列 AWS CLI 命令：

針對 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
  --engine mysql \
  --engine-version 8.0.28 \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

在 Windows 中：

```
aws rds describe-db-engine-versions ^
  --engine mysql ^
  --engine-version 8.0.28 ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

# MySQL 版本號碼
<a name="USER_UpgradeDBInstance.MySQL.VersionID"></a>

RDS for MySQL 資料庫引擎的版本編號順序為 *major.minor.patch.YYYYMMDD* 或 *major.minor.patch* 格式，例如 8.0.33.R2.20231201 或 5.7.44。使用的格式取決於 MySQL 引擎版本。如需 RDS 延長支援版本編號的詳細資訊，請參閱 [Amazon RDS 延伸支援版本命名](extended-support-versions.md#extended-support-naming)。

**主要**  
主要引擎版本號碼是整數和版本號碼的第一個小數部分，例如 8.0。主要版本升級會增加版本號碼的主要部分。例如，從 *5.7*.44 升級至 8.0.33 是主要版本升級，其中 *5.7* 和 *8.0* 是主要版本號碼。

**minor**  
次要版本號碼是版本號碼的第三部分，例如 8.0.33 中的 33。

**patch**  
修補程式是版本號碼的第四部分，例如 8.0.33.R2 中的 R2。RDS 修補程式版本中包含發行後新增到次要版本的重要錯誤修正。

**YYYYMMDD**  
日期是版本號碼的第五部分，例如 8.0.33.R2.20231201 中的 20231201。RDS 含日期的版本中包含發佈後新增到次要版本的重要錯誤修正。其中不包含任何可能變更引擎行為的修正。

下表說明 RDS for MySQL 8.4 版的命名配置。


| 8.4 次要版本 | 命名配置 | 
| --- | --- | 
|  ≥ 3  |  新的資料庫執行個體會使用 *major.minor.patch.YYMMDD*，例如 8.4.3.R2.20241201。 現有的資料庫執行個體可能會使用 *major.minor.patch* (例如 8.4.3.R2)，直到您下一次的主要或次要版本升級。 | 

下表說明 RDS for MySQL 8.0 版的命名配置。


| 8.0 次要版本 | 命名配置 | 
| --- | --- | 
|  ≥ 33  |  新的資料庫執行個體會使用 *major.minor.patch.YYMMDD*，例如 8.0.33.R2.20231201。 現有的資料庫執行個體可能會使用 *major.minor.patch* (例如 8.0.33.R2)，直到您下一次的主要或次要版本升級。  | 
|  < 33  |  現有的資料庫執行個體會使用 *major.minor.patch*，例如 8.0.32.R2。  | 

下表說明 RDS for MySQL 5.7 版的命名配置。


| 5.7 次要版本 | 命名配置 | 
| --- | --- | 
|  ≥ 42  |  新的資料庫執行個體會使用 *major.minor.patch.YYMMDD*，例如 5.7.42.R2.20231201。 現有的資料庫執行個體可能會使用 *major.minor.patch* (例如 5.7.42.R2)，直到您下一次的主要或次要版本升級。  | 

# RDS for MySQL 中的 RDS 版本號碼
<a name="USER_UpgradeDBInstance.MySQL.rds.version"></a>

RDS 版本號碼會使用 `major.minor.patch` 或 `major.minor.patch.YYYYMMDD` 命名配置。Amazon RDS 延長支援版本會使用 *minor-RDS.YYYYMMDD* 次要版本命名配置。

RDS 修補程式版本中包含發行後新增到次要版本的重要錯誤修正。RDS 日期版本 (*YYYYMMDD*) 是安全性修補程式。安全性修補程式不包含任何可能變更引擎行為的修正。如需 RDS 延長支援版本編號的詳細資訊，請參閱 [Amazon RDS 延伸支援版本命名](extended-support-versions.md#extended-support-naming)。

您可以透過下列 SQL 查詢找出 RDS for MySQL 資料庫的 RDS 版本號碼：

```
mysql> select mysql.rds_version();
```

例如，查詢 RDS for MySQL 8.0.34 資料庫，會傳回下列輸出：

```
+---------------------+
| mysql.rds_version() |
+---------------------+
| 8.0.34.R2.20231201  |
+---------------------+
1 row in set (0.01 sec)
```

# RDS for MySQL 的主要版本升級
<a name="USER_UpgradeDBInstance.MySQL.Major"></a>

對於 MySQL 資料庫引擎的主要版本，Amazon RDS 支援以下的就地升級：
+ MySQL 5.7 至 MySQL 8.0
+ MySQL 8.0 至 MySQL 8.4

**注意**  
您只能以最新一代和當代資料庫執行個體類別來建立 MySQL 5.7、8.0 和 8.4 版資料庫執行個體。  
在某些情況下，您會想要將在前代資料庫執行個體類別上執行的資料庫執行個體升級至使用較高 MySQL 引擎版本的資料庫執行個體。在這些情況下，先將資料庫執行個體修改為使用最新一代的資料庫執行個體類別。在您這麼做後，您就可以將資料庫執行個體修改為使用較高的 MySQL 資料庫引擎版本。如需 Amazon RDS 資料庫執行個體類別的相關資訊，請參閱[ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

**Topics**
+ [

## MySQL 主要版本升級概觀
](#USER_UpgradeDBInstance.MySQL.Major.Overview)
+ [

## 升級的預先檢查
](#USER_UpgradeDBInstance.MySQL.Prechecks)
+ [

## 在升級失敗後復原
](#USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure)

## MySQL 主要版本升級概觀
<a name="USER_UpgradeDBInstance.MySQL.Major.Overview"></a>

主要版本升級 可能包含與現有應用程式回溯不相容的資料庫變更。因此，Amazon RDS 不會自動套用主要版本升級；您必須手動修改資料庫執行個體。我們建議您在將任何升級套用至生產執行個體之前，先進行完整測試。

若要執行主要版本升級，請先執行任何可用的作業系統更新。作業系統完成更新後，請依序升級至各個主要版本，例如，5.7 升級至 8.0，8.0 再升級至 8.4。如需有關升級 RDS for MySQL 多可用區域資料庫叢集的資訊，請參閱 [升級 Amazon RDS 多可用區域資料庫叢集的引擎版本](multi-az-db-clusters-upgrading.md)。2014 年 4 月 24 日以前所建立的 MySQL 資料庫執行個體會顯示可用的作業系統更新，直到套用更新為止。如需作業系統更新的相關資訊，請參閱[將更新套用至資料庫執行個體](USER_UpgradeDBInstance.Maintenance.md#USER_UpgradeDBInstance.OSUpgrades)。

在 MySQL 的主要版本升級期間，Amazon RDS 會視需求執行 MySQL 二進位檔 `mysql_upgrade`，進而升級資料表。此外，在主要版本升級期間，Amazon RDS 還會清空 `slow_log` 與 `general_log` 資料表。若要保留日誌資訊，請在主要版本升級之前儲存日誌內容。

MySQL 主要版本升級通常在大約 10 分鐘內完成。由於資料庫執行個體類別的大小，或因為執行個體未遵循[Amazon RDS 的最佳實務](CHAP_BestPractices.md)中的特定操作準則，有些升級可能會較久。如果您從 Amazon RDS 主控台升級資料庫執行個體，資料庫執行個體的狀態會指出升級何時完成。如果您使用 AWS Command Line Interface (AWS CLI) 升級，請使用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令並檢查 `Status`值。

## 升級的預先檢查
<a name="USER_UpgradeDBInstance.MySQL.Prechecks"></a>

Amazon RDS 會在升級之前執行預先檢查，確認是否有不相容的情形。這類不相容會根據要升級的 MySQL 版本而有所不同。

前置檢查所含的部分檢查是隨附於 MySQL 的項目，另一些則是由 Amazon RDS 團隊特別設計。如需 MySQL 提供的前置檢查相關資訊，請參閱[升級檢查程式公用程式](https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-shell-utilities-upgrade.html)。

前置檢查會在系統將資料庫執行個體停止以進行升級前執行，意即前置檢查執行期間不會造成任何停機時間。如果預先檢查找到不相容，Amazon RDS 會在資料庫執行個體停止前自動取消升級。Amazon RDS 也會為不相容產生事件。如需 Amazon RDS 事件的詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。

Amazon RDS 會在日誌檔 `PrePatchCompatibility.log` 中記錄每個不相容的相關詳細資訊。在多數情況下，日誌項目包含修正不相容的 MySQL 文件連結。如需檢視日誌檔案的詳細資訊，請參閱[檢視並列出資料庫日誌檔案](USER_LogAccess.Procedural.Viewing.md)。

基於預先檢查的特性，這些檢查會分析資料庫中的物件。此分析會耗用資源，並增加升級完成的時間。

**Topics**
+ [

### 從 MySQL 8.0 升級至 8.4 的前置檢查
](#USER_UpgradeDBInstance.MySQL.80to84Prechecks)
+ [

### 從 MySQL 5.7 升級到 8.0 的前置檢查
](#USER_UpgradeDBInstance.MySQL.57to80Prechecks)

### 從 MySQL 8.0 升級至 8.4 的前置檢查
<a name="USER_UpgradeDBInstance.MySQL.80to84Prechecks"></a>

MySQL 8.4 有許多與 MySQL 8.0 不相容的地方。這些不相容可能會在從 MySQL 8.0 升級至 MySQL 8.4 期間發生問題。因此，您可能需要為資料庫做一些準備，才能順利完成升級。以下是這些不相容問題的一般清單：
+ 資料表不能使用過時的資料類型或函數。
+ 觸發條件不能有遺漏或空白的 DEFINER，或是無效的建立內容。
+ 不能違反關鍵字或保留字的規定。MySQL 8.4 中可能會保留一些先前未保留的關鍵字。

  如需詳細資訊，請參閱 MySQL 文件中的 [Keywords and Reserved Words](https://dev.mysql.com/doc/refman/8.4/en/keywords.html) (關鍵字與保留字)。
+ MySQL 8.0 `mysql` 系統資料庫中的資料表名稱不得與 MySQL 8.4 資料字典所使用的資料表名稱相同。
+ 不能在 `sql_mode` 系統變數設定中定義過時的 SQL 模式。
+ 資料表或預存程序的個別 `ENUM` 或 `SET` 資料欄元素長度皆不得超過 255 個字元，也不能超過 1020 位元組。
+ MySQL 8.0 安裝程式不可使用 MySQL 8.4 未支援的功能。

  如需詳細資訊，請參閱 MySQL 文件中的 [MySQL 8.4 中移除的功能](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html#mysql-nutshell-removals)。
+ 外部索引鍵的限制條件名稱不得超過 64 個字元。
+ 有關 Unicode 增強支援，請檢閱下列資訊：
  + 請考慮將使用 `utf8mb3` 字元集的物件轉換成使用 `utf8mb4` 字元集，因為 `utf8mb3` 字元集已棄用。
  + `utf8mb4` 目前是 `utf8` 字元集的別名，因此請考慮使用 `utf8` 做為字元集參考，而不是 `utf8mb3`。如果可能，請先將 `utf8` 變更為 `utf8mb4`，然後升級您的資料庫。
  + 由於較舊的用戶端可能會收到 `utf8mb3` 不明的字元集錯誤，在升級資料庫之前，請先升級資料庫用戶端。

  如需詳細資訊，請參閱 MySQL 文件中的 [The utf8mb3 character set (3-byte UTF-8 unicode encoding)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)。

  若要變更字元集，您可以手動執行資料庫的備份、還原和複寫。或者，您可以使用 Amazon RDS 藍/綠部署。如需詳細資訊，請參閱[使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

當您開始從 MySQL 8.0 升級至 8.4 時，Amazon RDS 會自動執行預先檢查，以偵測這些不相容問題。如需升級至 MySQL 8.4 的相關資訊，請參閱 MySQL 文件中的[升級 MySQL](https://dev.mysql.com/doc/refman/8.4/en/upgrading.html)。

系統會強制執行這些前置檢查，您無法選擇略過這些檢查。前置檢查提供以下優勢：
+ 升級期間可避免非預期的停機時間。
+ 出現不相容情況時，Amazon RDS 即會防止系統進行升級，並提供相關日誌讓您了解。如此，您就可以使用這些日誌來減少不相容情況，為資料庫做好升級至 MySQL 8.4 的準備。如需移除不相容的詳細資訊，請參閱 MySQL 文件中的[準備您的安裝進行升級](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)。

### 從 MySQL 5.7 升級到 8.0 的前置檢查
<a name="USER_UpgradeDBInstance.MySQL.57to80Prechecks"></a>

MySQL 8.0 與 MySQL 5.7 有許多不相容的地方。這些不相容可能會在從 MySQL 5.7 升級至 MySQL 8.0 期間發生問題。因此，您可能需要為資料庫做一些準備，才能順利完成升級。以下是這些不相容問題的一般清單：
+ 資料表不能使用過時的資料類型或函數。
+ 不能有孤立的 \$1.frm 檔案。
+ 觸發條件不能有遺漏或空白的 DEFINER，或是無效的建立內容。
+ 分割資料表所使用的儲存引擎皆需提供原生分割支援。
+ 不能違反關鍵字或保留字的規定。MySQL 8.0 中可能會保留一些先前未保留的關鍵字。

  如需詳細資訊，請參閱 MySQL 文件中的 [Keywords and Reserved Words](https://dev.mysql.com/doc/refman/8.0/en/keywords.html) (關鍵字與保留字)。
+ MySQL 5.7 `mysql` 系統資料庫中的資料表名稱不得與 MySQL 8.0 資料字典所使用的資料表名稱相同。
+ 不能在 `sql_mode` 系統變數設定中定義過時的 SQL 模式。
+ 資料表或預存程序的個別 `ENUM` 或 `SET` 資料欄元素長度皆不得超過 255 個字元，也不能超過 1020 位元組。
+ 升級至 MySQL 8.0.13 或更新版本前，共用 InnoDB 資料表空間中不能存在資料表分割區。
+ MySQL 8.0.12 或較舊版本中的查詢和預存程式皆不得對 `ASC` 子句使用 `DESC` 或 `GROUP BY` 限定詞。
+ MySQL 5.7 安裝程式不能使用 MySQL 8.0 未支援的功能。

  如需詳細資訊，請參閱 MySQL 文件中的 [Features Removed in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) (MySQL 8.0 中移除的功能)。
+ 外部索引鍵的限制條件名稱不得超過 64 個字元。
+ 有關 Unicode 增強支援，請檢閱下列資訊：
  + 請考慮將使用 `utf8mb3` 字元集的物件轉換成使用 `utf8mb4` 字元集，因為 `utf8mb3` 字元集已棄用。
  + `utf8mb4` 目前是 `utf8` 字元集的別名，因此請考慮使用 `utf8` 做為字元集參考，而不是 `utf8mb3`。如果可能，請先將 `utf8` 變更為 `utf8mb4`，然後升級您的資料庫。
  + 由於較舊的用戶端可能會收到 `utf8mb3` 不明的字元集錯誤，在升級資料庫之前，請先升級資料庫用戶端。

  如需詳細資訊，請參閱 MySQL 文件中的 [The utf8mb3 character set (3-byte UTF-8 unicode encoding)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)。

  若要變更字元集，您可以手動執行資料庫的備份、還原和複寫。或者，您可以使用 Amazon RDS 藍/綠部署。如需詳細資訊，請參閱[使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

當您開始從 MySQL 5.7 升級到 8.0 時，Amazon RDS 會自動執行前置檢查，以偵測這些不相容問題。如需升級至 MySQL 8.0 的相關資訊，請參閱 MySQL 文件中的 [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) (升級 MySQL)。

系統會強制執行這些前置檢查，您無法選擇略過這些檢查。前置檢查提供以下優勢：
+ 升級期間可避免非預期的停機時間。
+ 出現不相容情況時，Amazon RDS 即會防止系統進行升級，並提供相關日誌讓您了解。如此，您就可以使用這些日誌來減少不相容情況，為資料庫做好升級至 MySQL 8.0 的準備。如需移除不相容問題的詳細資訊，請參閱 MySQL 文件中的[準備您的安裝進行升級](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)，以及[升級至 MySQL 8.0？ 這裡是您需要知道的事項...](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)。

## 在升級失敗後復原
<a name="USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure"></a>

當您將資料庫執行個體從 MySQL 5.7 版升級至 MySQL 8.0 版，或從 MySQL 8.0 版升級至 8.4 版時，升級可能會失敗。特別是，如果資料字典包含預先檢查未擷取的不相容性，則可能會失敗。在此情況下，資料庫無法在新的 MySQL 8.0 或 8.4 版中成功啟動。此時，Amazon RDS 會轉返升級執行的變更。復原後，MySQL 資料庫執行個體會執行原始版本：
+ MySQL 8.0 版 (從 MySQL 8.4 復原)
+ MySQL 5.7 版 (從 MySQL 8.0 復原)

升級失敗且轉返後，Amazon RDS 會產生具有事件 ID RDS-EVENT-0188 的事件。

通常，之所以升級失敗，是因為資料庫執行個體中的資料庫與目標 MySQL 版本之間的中繼資料存在不相容。升級失敗時，您可以在 `upgradeFailure.log` 檔案中檢視這些不相容性的詳細資訊。請先解決不相容性，然後嘗試再次升級。

在升級嘗試和轉返失敗期間，您的資料庫執行個體會重新啟動。任何擱置的參數變更都會在重新啟動期間套用，並在轉返後持續存在。

如需升級至 MySQL 8.0 的詳細資訊，請參閱 MySQL 文件中的下列主題：
+ [準備進行升級的裝置](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)
+ [升級至 MySQL 8.0？ 以下是您需要知道的內容.](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)..

如需升級至 MySQL 8.4 的詳細資訊，請參閱 MySQL 文件中的[準備您的安裝進行升級](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)。

# 測試 RDS for MySQL 升級
<a name="USER_UpgradeDBInstance.MySQL.UpgradeTesting"></a>

對資料庫執行個體執行主要版本升級之前，請完整測試資料庫，了解是否與新版本相容。此外，請完整測試可存取資料庫的所有應用程式，了解是否與新版本相容。建議您採用下列程序。

**測試主要版本升級**

1. 檢閱新版本資料庫引擎的升級文件，了解是否有可能影響資料庫或應用程式的相容性問題：
   +  [MySQL 5.7 的變更](http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html) 
   +  [MySQL 8.0 的變更](http://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) 
   + [MySQL 8.4 的變更](http://dev.mysql.com/doc/refman/8.4/en/upgrading-from-previous-series.html) 

1. 如果資料庫執行個體是自訂資料庫參數群組的成員，請以現有設定建立新的資料庫參數群組 (與新的主要版本相容)。在升級測試執行個體時，指定新的資料庫參數群組，讓升級測試確保該參數群組可順利運作。如需建立資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

1. 針對要升級的資料庫執行個體建立資料庫快照。如需詳細資訊，請參閱 [為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。

1. 還原資料庫快照，以建立新的測試資料庫執行個體。如需詳細資訊，請參閱 [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

1. 使用如下詳述的其中一種方法，修改這個新的測試資料庫執行個體，以升級到新版本。如果您在步驟 2 建立新的參數群組，請指定該參數群組。

1. 評估升級的執行個體所使用的儲存體，以決定升級是否需要更多儲存體。

1. 對升級的資料庫執行個體儘可能進行越多次品質保證測試，以確保資料庫和應用程式搭配新版本可以正常運作。實作任何必要的新測試，以評估您在步驟 1 發現的任何相容性問題所帶來的影響。測試所有預存程序和函數。將應用程式的測試版本指向升級的資料庫執行個體。

1. 如果通過所有測試，就可以對生產資料庫執行個體進行升級。在確認一切都沒問題之前，建議您在資料庫執行個體上不要允許寫入操作。

## 升級 MySQL 資料庫執行個體
<a name="USER_UpgradeDBInstance.MySQL.Upgrading"></a>

如需有關手動或自動升級 MySQL 資料庫執行個體的資訊，請參閱[升級資料庫執行個體 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

# RDS for MySQL 的自動次要版本升級
<a name="USER_UpgradeDBInstance.MySQL.Minor"></a>

如果您在建立或修改資料庫執行個體時指定下列設定，則可以讓資料庫執行個體自動升級。
+ 已啟用 **Auto minor version upgrade (自動次要版本升級)** 設定。
+ **Backup retention period (備份保留期間)** 設定大於 0。

在 AWS 管理主控台 中，這些設定位於 **Additional configuration** (其他組態) 下。下圖顯示 **Auto minor version upgrade** (自動次要版本升級) 設定。

![\[Amazon RDS 主控台中選取了啟用自動次要版本升級的維護區段。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/amvu.png)


如需這些設定的詳細資訊，請參閱 [資料庫執行個體的設定](USER_ModifyInstance.Settings.md)。

針對某些 AWS 區域 中的某些 RDS for MySQL 主要版本，RDS 會將一個次要版本指定為自動升級版本。次要版本經過測試，並由 Amazon RDS 核准之後，在您的維護時段期間，會自動發生次要版本升級。RDS 不會自動將較新發行的次要版本設定為自動升級版本。在 RDS 指派較新的自動升級版本之前，會考慮數個準則，例如下列：
+ 已知安全性問題
+ MySQL 社群版本中的錯誤
+ 從發行次要版本以來的整體機群穩定性

您可以執行下列 AWS CLI 命令，判斷特定 AWS 區域 中的指定 MySQL 次要版本目前的自動次要升級目標版本。

針對 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
--engine mysql \
--engine-version minor_version \
--region region \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output text
```

針對 Windows：

```
aws rds describe-db-engine-versions ^
--engine mysql ^
--engine-version minor_version ^
--region region ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output text
```

例如，下列 AWS CLI 命令會判斷美國東部 (俄亥俄) AWS 區域 (us-east-2) 中 MySQL 次要版本 8.0.11 的自動次要升級目標。

針對 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
--engine mysql \
--engine-version 8.0.11 \
--region us-east-2 \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output table
```

針對 Windows：

```
aws rds describe-db-engine-versions ^
--engine mysql ^
--engine-version 8.0.11 ^
--region us-east-2 ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output table
```

輸出類似如下。

```
----------------------------------
|    DescribeDBEngineVersions    |
+--------------+-----------------+
|  AutoUpgrade |  EngineVersion  |
+--------------+-----------------+
|  False       |  8.0.15         |
|  False       |  8.0.16         |
|  False       |  8.0.17         |
|  False       |  8.0.19         |
|  False       |  8.0.20         |
|  False       |  8.0.21         |
|  True        |  8.0.23         |
|  False       |  8.0.25         |
+--------------+-----------------+
```

在此範例中，此 `AutoUpgrade` 值 是 `True` (若為 MySQL 版本 8.0.23)。因此，自動次要升級目標是 MySQL 版本 8.0.23，其已在輸出中反白顯示。

如果符合下列準則，在維護時段期間會自動升級 MySQL 資料庫執行個體：
+ 已啟用 **Auto minor version upgrade (自動次要版本升級)** 設定。
+ **Backup retention period (備份保留期間)** 設定大於 0。
+ 資料庫執行個體執行的次要資料庫引擎版本小於目前的自動升級次要版本。

如需詳細資訊，請參閱 [自動升級次要引擎版本](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades)。

# 使用僅供讀取複本在升級 RDS for MySQL 資料庫時減少停機時間
<a name="USER_UpgradeDBInstance.MySQL.ReducedDowntime"></a>

在大多數情況下，藍/綠部署是升級 MySQL 資料庫執行個體時減少停機時間的最佳選項。如需詳細資訊，請參閱 [使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。

如果您無法使用藍/綠部署，且您的 MySQL 資料庫執行個體目前與生產應用程式搭配使用，您可以使用下列程序來升級資料庫執行個體的資料庫版本。此程序可降低應用程式的停機時間。

透過使用僅供讀取複本，您可以提前執行大部分的維護步驟，並將實際中斷期間的必要變更降到最低。使用此技術，您可以測試和準備新的資料庫執行個體，而無需對現有的資料庫執行個體進行任何變更。

以下程序顯示從 MySQL 5.7 版升級至 MySQL 8.0 版的範例。您可以使用同樣的一般步驟升級到其他的主要版本。您可以使用同樣的一般步驟升級到其他的主要版本。

**注意**  
當您從 MySQL 5.7 版升級至 MySQL 8.0 版，或從 MySQL 8.0 版升級至 MySQL 8.4 版時，請先完成預先檢查，再執行升級。如需詳細資訊，請參閱[從 MySQL 5.7 升級到 8.0 的前置檢查](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.57to80Prechecks)及[從 MySQL 8.0 升級至 8.4 的前置檢查](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.80to84Prechecks)。

**在資料庫執行個體處於使用中的情況下升級 MySQL 資料庫**

1. 登入 AWS 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 建立 MySQL 5.7 資料庫執行個體的僅供讀取複本。此程序建立資料庫的可升級副本。資料庫執行個體的其他僅供讀取複本也可能存在。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您要升級的資料庫執行個體。

   1. 在 **Actions** (動作) 中選擇 **Create read replica** (建立僅供讀取複本)。

   1. 在僅供讀取複本的 **DB instance identifier** (資料庫執行個體識別碼) 中提供一個值，並確定 **DB instance class** (資料庫執行個體類別) 和其他設定符合您的 MySQL 5.7 資料庫執行個體。

   1. 選擇 **Create read replica (建立僅供讀取複本)**。

1. (選用) 當僅供讀取複本已建立且**狀態**顯示為**可用**時，請將僅供讀取複本轉換為多可用區域部署，並啟用備份。

   根據預設，僅供讀取複本會在停用備份的情況下建立。由於僅供讀取複本最終會成為生產資料庫執行個體，因此最佳實務是設定多可用區域部署並啟用備份。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛建立的僅供讀取複本。

   1. 選擇 **Modify (修改)**。

   1. 針對**多可用區域部署**，選擇**建立待命執行個體**。

   1. 對於 **Backup Retention Period** (備份保留期)，選擇非零正值 (例如 3 天)，然後選擇 **Continue** (繼續)。

   1. 在 **Scheduling of modifications** (修改排程) 中，選擇 **Apply immediately** (立即套用)。

   1. 選擇 **Modify DB instance (修改資料庫執行個體)**。

1. 僅供讀取複本的 **Status (狀態)** 顯示為 **Available (可用)** 時，請將僅供讀取複本升級至 MySQL 8.0：

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛建立的僅供讀取複本。

   1. 選擇 **Modify (修改)**。

   1. 在 **DB engine version (資料庫引擎版本)** 中，選擇升級到 MySQL 8.0 版，然後選擇 **Continue (繼續)**。

   1. 在 **Scheduling of modifications** (修改排程) 中，選擇 **Apply immediately** (立即套用)。

   1. 選擇 **Modify DB instance (修改資料庫執行個體)** 以開始升級。

1. 當升級完成且 **Status (狀態)** 顯示為 **Available (可用)** 時，請確認升級的僅供讀取複本已和來源 MySQL 5.7 資料庫執行個體維持在相同的最新狀態。若要驗證，請連線至僅供讀取複本並執行 `SHOW REPLICA STATUS` 命令。如果 `Seconds_Behind_Master` 欄位是 `0`，表示複寫是最新狀態。
**注意**  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

1. (選擇性) 建立僅供讀取複本的僅供讀取複本。

   如果您希望資料庫執行個體在提升為獨立資料庫執行個體後擁有僅供讀取複本，您可以立即建立僅供讀取複本。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛升級的僅供讀取複本。

   1. 在 **Actions** (動作) 中選擇 **Create read replica** (建立僅供讀取複本)。

   1. 在僅供讀取複本的 **DB instance identifier** (資料庫執行個體識別碼) 中提供一個值，並確定 **DB instance class** (資料庫執行個體類別) 和其他設定符合您的 MySQL 5.7 資料庫執行個體。

   1. 選擇 **Create read replica (建立僅供讀取複本)**。

1. (選擇性) 為僅供讀取複本設定自訂資料庫參數群組。

   如果您希望資料庫執行個體在提升為獨立資料庫執行個體後使用自訂參數群組，您現在可以建立資料庫參數群組，並將其與僅供讀取複本建立關聯。

   1. 建立 MySQL 8.0 的自訂資料庫參數群組。如需說明，請參閱「[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)」。

   1. 修改您想要在剛才建立的資料庫參數群組中變更的參數。如需說明，請參閱「[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)」。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇僅供讀取複本。

   1. 選擇 **Modify (修改)**。

   1. 對於 **DB parameter group (資料庫參數群組)**，請選擇您剛才建立的 MySQL 8.0 資料庫參數群組，然後選擇 **Continue (繼續)**。

   1. 在 **Scheduling of modifications** (修改排程) 中，選擇 **Apply immediately** (立即套用)。

   1. 選擇 **Modify DB instance (修改資料庫執行個體)** 以開始升級。

1. 將 MySQL 8.0 僅供讀取複本變成獨立資料庫執行個體。
**重要**  
當 MySQL 8.0 僅供讀取複本提升為獨立資料庫執行個體時，就不再是 MySQL 5.7 資料庫執行個體的複本。建議在維護時段提升 MySQL 8.0 僅供讀取複本，因為此時來源 MySQL 5.7 資料庫執行個體處於唯讀模式，且所有寫入操作都已暫停。提升完成時，您可以將寫入操作導向已升級的 MySQL 8.0 資料庫執行個體，以確保不會遺漏任何寫入操作。  
此外，在提升 MySQL 8.0 僅供讀取複本之前，建議您在 MySQL 8.0 僅供讀取複本上執行所有必要的資料定義語言 (DDL) 操作。範例是建立索引。此方法可避免 MySQL 8.0 僅供讀取複本在提升之後效能降低。若要提升僅供讀取複本，請使用以下程序。

   1. 在主控台中，選擇 **Databases** (資料庫)，然後選擇您剛升級的僅供讀取複本。

   1. 針對 **Actions** (動作)，選擇 **Promote** (提升)。

   1. 選擇 **Yes (是)**，對僅供讀取複本執行個體啟用自動備份。如需詳細資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

   1. 選擇 **Continue (繼續)**。

   1. 選擇 **Promote Read Replica** (提升僅供讀取複本)。

1. 您現在已升級 MySQL 資料庫的版本。此時，您可以將應用程式導向至新的 MySQL 8.0 資料庫執行個體。

# 使用事件監控 RDS for MySQL 引擎升級
<a name="USER_UpgradeDBInstance.MySQL.Monitoring"></a>

當您升級 RDS for MySQL 資料庫的引擎版本時，Amazon RDS 會在程序的每個階段發出特定事件。若要追蹤升級進度，您可以檢視或訂閱這些事件。

 如需 RDS 事件的詳細資訊，請參閱 [監控 Amazon RDS 事件](working-with-events.md)。

如需引擎升級期間發生之特定 Amazon RDS 事件的詳細資訊，請參閱 [ Amazon RDS 事件類別和事件訊息](USER_Events.Messages.md)。

# 升級 MySQL 資料庫快照引擎版本
<a name="mysql-upgrade-snapshot"></a>

利用 Amazon RDS，您可以為您的 MySQL 資料庫執行個體建立儲存體磁碟區資料庫快照。建立資料庫快照時，該快照會基於您的資料庫執行個體使用的引擎版本。您可以升級資料庫快照的引擎版本。

對於 RDS for MySQL，您可以將 5.7 版快照升級至 8.0 版，或將 8.0 版快照升級至 8.4 版。您可以升級加密或未加密的資料庫快照。

若要檢視 RDS for MySQL 資料庫快照的可用引擎版本，請使用下列 AWS CLI 範例。

```
aws rds describe-db-engine-versions --engine mysql --include-all --engine-version example-engine-version --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

如果您沒有看到快照的結果，則您的引擎版本可能已棄用。如果您的引擎版本已棄用，建議您升級到最新的主要版本升級目標，或升級到該版本的其他可用升級目標之一。如需詳細資訊，請參閱[RDS for MySQL 不支援引擎版本的資料庫快照升級選項](mysql-upgrade-snapshot.upgrade-options.md)。

還原升級至新引擎版本的資料庫快照之後，務必測試升級已成功。如需主要版本升級的詳細資訊，請參閱[RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。若要了解如何還原資料庫快照，請參閱[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

**注意**  
您無法升級在自動備份程序期間建立的自動資料庫快照。

您可以使用 AWS 管理主控台 AWS CLI或 RDS API 升級資料庫快照。

------
#### [ Console ]

若要使用 升級資料庫快照引擎版本 AWS 管理主控台，請使用下列程序。

**升級資料庫快照**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Snapshots (快照)**。

1. 選擇您要升級的快照。

1. 針對 **Actions (動作)**，選擇 **Upgrade snapshot (升級快照)**。**Upgrade snapshot (升級快照)** 頁面隨即出現。

1. 選擇要升級到的 **New engine version (新引擎版本)**。

1. 選擇 **Save changes (儲存變更)** 以升級快照。

   升級程序期間，此資料庫快照的所有快照動作會停用。同時，資料庫快照狀態會從**可用**變更為**升級中**，然後在完成時變更為**作用中**。如果資料庫快照因為快照損毀問題而無法升級，狀態會變更為**無法使用**。您無法從此狀態復原快照。
**注意**  
如果資料庫升級失敗，快照會轉返至原始版本的原始狀態。

------
#### [ AWS CLI ]

若要將資料庫快照升級至新的資料庫引擎版本，請執行 AWS CLI [modify-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-snapshot.html) 命令。

**選項**
+ `--db-snapshot-identifier` – 要升級的資料庫快照識別碼。識別符必須是唯一的 Amazon Resource Name (ARN)。如需詳細資訊，請參閱 [Amazon RDS 中的 Amazon Resource Name (ARN)](USER_Tagging.ARN.md)。
+ `--engine-version` – 資料庫快照會以此引擎版本為目標進行升級。

**Example**  
針對 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-snapshot \
2. 
3.     --db-snapshot-identifier my_db_snapshot \
4.     --engine-version new_version
```
在 Windows 中：  

```
1. aws rds modify-db-snapshot ^
2.     --db-snapshot-identifier my_db_snapshot ^
3.     --engine-version new_version
```

------
#### [ Amazon RDS API ]

若要將資料庫快照升級為新的資料庫引擎版本，請呼叫 RDS API [ModifyDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBSnapshot.html) 作業。

**Parameters**
+ `DBSnapshotIdentifier` – 要升級的資料庫快照識別碼。識別符必須是唯一的 Amazon Resource Name (ARN)。如需詳細資訊，請參閱 [Amazon RDS 中的 Amazon Resource Name (ARN)](USER_Tagging.ARN.md)。
+ `EngineVersion` – 資料庫快照會以此引擎版本為目標進行升級。

------

# RDS for MySQL 不支援引擎版本的資料庫快照升級選項
<a name="mysql-upgrade-snapshot.upgrade-options"></a>

下表顯示您可以從 RDS for MySQL 資料庫快照不支援的引擎版本升級至哪些引擎版本。

**注意**  
您可能需要多次升級資料庫快照，才能升級至您選擇的引擎版本。


| 資料庫快照引擎版本 | 可用於升級的引擎版本 | 
| --- | --- | 
| 5.5.8 |  5.5.62、5.6.51  | 
| 5.5.12 |   5.5.62、5.6.51  | 
| 5.5.20 |  5.5.62、5.6.51  | 
| 5.5.23 |  5.5.62、5.6.51  | 
| 5.5.25a |  5.5.62、5.6.51  | 
| 5.5.27 |  5.5.62、5.6.51  | 
| 5.5.31 |  5.5.62、5.6.51  | 
| 5.5.33 |  5.5.62、5.6.51  | 
| 5.5.37 |  5.5.62、5.6.51  | 
| 5.5.38 |  5.5.62、5.6.51  | 
| 5.5.40 |  5.5.62、5.6.51  | 
| 5.5.40a |  5.5.62、5.6.51  | 
| 5.5.40b |  5.5.62、5.6.51  | 
| 5.5.41 |  5.5.62、5.6.51  | 
| 5.5.42 |  5.5.62、5.6.51  | 
| 5.5.59 |  5.5.62、5.6.51  | 
| 5.6.12 |  5.6.51、5.7.44  | 
| 5.6.13 |  5.6.51、5.7.44  | 
| 5.6.17 |  5.6.51、5.7.44  | 
| 5.6.19 |  5.6.51、5.7.44  | 
| 5.6.19a |  5.6.51、5.7.44  | 
| 5.6.19b |  5.6.51、5.7.44  | 
| 5.6.21 |  5.6.51、5.7.44  | 
| 5.6.21b |  5.6.51、5.7.44  | 
| 5.6.22 |  5.6.51、5.7.44  | 
| 5.6.23 |  5.6.51、5.7.44  | 
| 5.6.27 |  5.6.51、5.7.44  | 
| 5.6.27a |  5.6.51、5.7.44  | 
| 5.7.10 |  5.7.44、5.7.44-rds.20240408、5.7.44-rds.20240529、5.7.44-rds.20250103、5.7.44-rds.20250213、8.0.32、8.0.33、8.0.34、8.0.35、8.0.36、8.0.37、8.0.39、8.0.40、8.0.41  | 
| 5.7.11 |  5.7.44、5.7.44-rds.20240408、5.7.44-rds.20240529、5.7.44-rds.20250103、5.7.44-rds.20250213、8.0.32、8.0.33、8.0.34、8.0.35、8.0.36、8.0.37、8.0.39、8.0.40、8.0.41  | 
| 5.7.12 |  5.7.44、5.7.44-rds.20240408、5.7.44-rds.20240529、5.7.44-rds.20250103、5.7.44-rds.20250213、8.0.32、8.0.33、8.0.34、8.0.35、8.0.36、8.0.37、8.0.39、8.0.40、8.0.41  | 

# 將資料匯入至 Amazon RDS for MySQL 資料庫執行個體
<a name="MySQL.Procedural.Importing.Other"></a>

您可使用多種不同技術，將資料匯入 RDS for MySQL 資料庫執行個體。最佳方法取決於多種因素：
+ 資料來源
+ 資料量
+ 一次性匯入或持續性
+ 停機時間

 如要連同資料一起遷移應用程式，則務必考量停機時間。

下表列出將資料匯入 RDS for MySQL 資料庫執行個體的各種技術：


| 來源 | 資料量 | 一次性或持續性 | 應用程式停機時間 | 技術 | 其他資訊 | 
| --- | --- | --- | --- | --- | --- | 
|  現場部署或 Amazon EC2 上的現有 MySQL 資料庫  |  任何  |  一次性  |  一些  |  建立現場部署資料庫的備份、將其存放於 Amazon S3，然後將備份檔案還原至執行 MySQL 的新 Amazon RDS 資料庫執行個體。  |  [將備份還原至 Amazon RDS for MySQL 資料庫執行個體](MySQL.Procedural.Importing.md)  | 
|  現場部署或 Amazon EC2 上的現有 MySQL 資料庫  |  任何  |  持續性  |  極小  |  使用現有 MySQL 資料庫為複寫來源以設定複寫。  |  [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md) [以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md)  | 
|  任何現有資料庫  |  任何  |  一次性或持續性  |  極小  |  使用 AWS Database Migration Service 以最少的停機時間遷移資料庫，對於許多資料庫資料庫引擎，則繼續持續複寫。  |  《AWS Database Migration Service 使用者指南》**中的[什麼是 AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 和[使用與 MySQL 相容的資料庫作為 AWS DMS的目標](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)   | 
|  現有的 MySQL 資料庫執行個體  |  任何  |  一次性或持續性  |  極小  |  為持續複寫建立僅供讀取複本。升級僅供讀取複本，以便一次性建立新的資料庫執行個體。  |  [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)  | 
|  現有的 MySQL 資料庫  |  小型  |  一次性  |  一些  | 使用命令列公用程式，直接將資料複製到您的 MySQL 資料庫執行個體。 |  [從外部 MySQL 資料庫將資料匯入至 Amazon RDS for MySQL 資料庫執行個體](mysql-importing-data-external-database.md)  | 
|  未存放在現有資料庫的資料  |  中型  |  一次性  |  一些  | 建立一般檔案，並使用 MySQL LOAD DATA LOCAL INFILE 陳述式將其匯入。 |  [匯入任何 Amazon RDS for MySQL 資料庫執行個體來源的資料](mysql-importing-data-any-source.md)  | 

**注意**  
`mysql` 系統資料庫包含登入資料庫執行個體與存取資料所需的身分驗證和授權資訊。卸除、更改、重新命名或截斷資料庫執行個體中 `mysql` 資料庫的資料表、資料或其他內容，可能會導致發生錯誤，造成無法存取資料庫執行個體與資料的情形。如果發生這種情況，您可以使用 命令從快照 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)還原資料庫執行個體。您可以使用 命令來復原資料庫執行個體 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)。

# MySQL 的資料匯入考量
<a name="MySQL.Procedural.Importing.Advanced"></a>

下列內容包含有關將資料載入 MySQL 的技術資訊。此內容的目標是熟悉 MySQL 伺服器架構的使用者。

## 二進位記錄
<a name="MySQL.Procedural.Importing.Advanced.Log"></a>

啟用二進位記錄可降低資料載入效能，且相較於停用的記錄，最多需要額外四倍的磁碟空間。用於載入資料的交易大小會直接影響系統效能和磁碟空間需求 - 較大的交易需要更多資源。

## 交易大小
<a name="MySQL.Procedural.Importing.Advanced.Size"></a>

交易大小會影響 MySQL 資料載入的下列層面：
+ 資源耗用
+ 磁碟空間使用率
+ 繼續程序
+ 復原時間
+ 輸入格式 (一般檔案或 SQL)

本節會說明交易大小如何影響二進位日誌，並解釋為何要在大型資料載入期間停用此功能。您可以設定 Amazon RDS 自動備份保留期間，藉此啟用及停用二進位記錄。非零的數值會啟用二進位日誌，而零則會停用此功能。如需詳細資訊，請參閱[Backup retention period (備份保留期間)](USER_WorkingWithAutomatedBackups.BackupRetention.md)。

我們也會說明大型交易對 InnoDB 的影響，以及為何需要盡量縮減交易大小的原因。

### 小型交易
<a name="MySQL.Procedural.Importing.Advanced.Log.Small"></a>

若為小型交易，二進位日誌會將載入資料所需的磁碟寫入次數加倍。此效果會嚴重降低其他資料庫作業階段的效能，並增加載入資料所需的時間。經歷的降級部分取決於下列因素：
+ 上傳率
+ 載入期間發生的其他資料庫活動
+ Amazon RDS 資料庫執行個體的容量

二進位日誌在完成備份及移除前，也會佔用與載入資料量約莫相等的磁碟空間。Amazon RDS 會頻繁備份並移除二進位日誌，盡可能避免這種情況。

### 大型交易
<a name="MySQL.Procedural.Importing.Advanced.Log.Large"></a>

對於大型交易，二進位日誌記錄會將 IOPS 和磁碟用量增加三倍，原因如下：
+ 二進位日誌快取會將交易資料暫時存放在磁碟上。
+ 此快取會隨著交易大小而增加，這會耗用磁碟空間。
+ 當交易 (遞交或轉返) 完成時，系統會將快取複製到二進位日誌。

此程序會建立三份資料副本：
+ 原始資料
+ 磁碟上的快取
+ 最終二進位日誌項目

每個寫入作業都會產生額外的 IO，進一步影響效能。

因此，相較於停用的記錄，二進位記錄需要三倍的磁碟空間。例如，將 10 GiB 的資料載入為單一交易會建立三個複本：
+ 資料表資料的 10 GiB
+ 二進位日誌快取為 10 GiB
+ 二進位日誌檔案為 10 GiB

所需的暫存磁碟空間總計為 30 GiB。

重要的磁碟空間考量：
+ 快取檔案會持續存在，直到工作階段結束或新的交易建立另一個快取為止。
+ 二進位日誌會保留到備份為止，可能會長時間保留 20 GiB (快取和日誌)。

如果您使用 `LOAD DATA LOCAL INFILE` 載入資料，則資料復原會建立第四個複本，以防必須從載入之前進行的備份中復原資料庫。復原期間，MySQL 會擷取二進位日誌的資料，放入一般檔案中。MySQL 接著會執行 `LOAD DATA LOCAL INFILE`。根據上述範例，此復原需要 40 GiB 的總暫存磁碟空間，或是資料表、快取、日誌和本機檔案各 10 GiB。如果沒有至少 40 GiB 的可用磁碟空間，則復原會失敗。

### 最佳化大型資料負載
<a name="MySQL.Procedural.Importing.AnySource.Advanced.Disable"></a>

對於大型資料載入，請停用二進位記錄，以減少額外負荷和磁碟空間需求。您可以將備份保留期設定為 0，以停用二進位記錄。載入完成後，將備份保留期還原至適當的非零值。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md) 和設定資料表中的[備份保留期間](USER_ModifyInstance.Settings.md)。

**注意**  
如果資料庫執行個體是僅供讀取複本的來源資料庫執行個體，則不可將備份保留期設為 0。

載入資料之前，建議您建立資料庫快照。如需詳細資訊，請參閱[管理手動備份](USER_ManagingManualBackups.md)。

## InnoDB
<a name="MySQL.Procedural.Importing.Advanced.InnoDB"></a>

下列復原記錄和復原選項的相關資訊支援將 InnoDB 交易保持為小型，以最佳化資料庫效能。

### 了解 InnoDB 復原記錄
<a name="MySQL.Procedural.Importing.Advanced.InnoDB.Undo"></a>

復原是一種記錄機制，可啟用交易復原，並支援多版本並行控制 (MVCC)。

MySQL 5.7 和較低版本的復原日誌存放在 InnoDB 系統資料表空間 (通常是 ibdata1) 中，並且會保留到清除執行緒將其移除為止。因此，大型資料載入交易可能會造成系統資料工作表變得無比龐大並佔用磁碟空間，且若未重新重建資料庫，將無法回收這些空間。

對於所有 MySQL 版本，清除執行緒都必須等待移除任何復原日誌，直到最舊的作用中交易提交或復原為止。如果資料庫在載入期間同時處理其他交易，則即使這些交易皆已提交，且沒有其他交易需要因為 MVCC 而復原，這些復原也會累積在系統資料表空間中，並且無法移除。在這種情況下，包括唯讀交易在內的所有交易都會變慢。此速度變慢是因為所有交易都會存取任何交易 (而不只是載入交易) 變更的所有資料列。實際上，交易必須掃描復原日誌，避免長時間執行的載入交易在復原日誌清除期間遭到清除。這會影響存取修改資料列的任何作業之效能。

### InnoDB 交易復原選項
<a name="MySQL.Procedural.Importing.Advanced.InnoDB.Rollback"></a>

雖然 InnoDB 最佳化遞交作業，但大型交易復原速度緩慢。為了加快復原速度，請執行時間點復原或還原資料庫快照。如需詳細資訊，請參閱[時間點復原](USER_PIT.md)及[還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

## 資料匯入格式
<a name="MySQL.Procedural.Importing.Advanced.InputFormat"></a>

MariaDB 支援兩種資料匯入格式：一般檔案和 SQL。檢閱每個格式的相關資訊，以判斷符合您個人需求的最佳選項。

### 一般檔案
<a name="MySQL.Procedural.Importing.Advanced.InputFormat.FlatFiles"></a>

對於小型交易，使用 `LOAD DATA LOCAL INFILE` 載入一般檔案。相較於使用 SQL，此資料匯入格式可提供下列優點：
+ 較少網路流量
+ 降低資料傳輸成本
+ 減少資料庫處理開銷
+ 更快的處理速度

`LOAD DATA LOCAL INFILE` 會將整個一般檔案載入為一筆交易。將個別檔案的大小保持為小型，以獲得下列優點：
+ **繼續執行功能** – 輕鬆追蹤哪些檔案已載入完成。如果載入期間發生問題，您可以從中止的地方繼續工作。有些資料可能需要重新傳輸到 Amazon RDS，但若使用小型檔案，要重新傳輸的內容就可以減至最少。
+ **平行資料載入** – 如果您有足夠的 IOPS 和網路頻寬進行單一檔案載入，則平行載入可以節省時間。
+ **負載率控制 **– 如果您的資料負載對其他程序造成負面影響，您可以透過增加檔案之間的間隔來控制負載率。

大型交易會減少使用 `LOAD DATA LOCAL INFILE` 匯入資料的優點。當您無法將大量資料分解為較小型的檔案時，請考慮使用 SQL。

### SQL
<a name="MySQL.Procedural.Importing.Advanced.InputFormat.SQL"></a>

SQL 具備一項一般檔案所缺乏的主要優點，亦即您可輕鬆將交易大小維持在較小的狀態。不過，SQL 載入的時間可能會較一般檔案長得多。此外，在失敗之後，很難判斷要繼續的位置，您無法重新啟動 mysqldump 檔案。如果在載入 mysqldump 檔案時發生錯誤，您必須修改或替換檔案，才能繼續載入。或者，替代方案是在修正失敗原因後，還原至載入前的時間點，然後重新傳送檔案。如需詳細資訊，請參閱[時間點復原](USER_PIT.md)。

## 將 Amazon RDS 資料庫快照用於資料庫檢查點
<a name="MySQL.Procedural.Importing.Advanced.Checkpoints"></a>

如果您載入資料的時間很長 (例如數小時或數天) 而沒有二進位記錄，請使用資料庫快照來提供資料安全的定期檢查點。每個資料庫快照都會建立資料庫執行個體的一致複本，以做為系統故障或資料損毀事件期間的復原點。由於資料庫快照速度很快，經常檢查點對負載效能的影響極小。您可以刪除先前的資料庫快照，而不會影響資料庫耐久性或復原功能。如需資料庫快照的詳細資訊，請參閱 [管理手動備份](USER_ManagingManualBackups.md)。

## 縮短資料庫載入時間
<a name="MySQL.Procedural.Importing.Advanced.LoadTime"></a>

以下是縮短載入時間的其他秘訣：
+ 在將資料載入 MySQL 資料庫之前，先建立所有次要索引。與其他資料庫系統不同，MySQL 會在新增或修改次要索引時，重建整個資料表。此程序會建立包含索引變更的新資料表、複製所有資料，並捨棄原始資料表。
+ 依主索引鍵順序載入資料。對於 InnoDB 資料表，這可以縮短載入時間達 75%–80%，並將資料檔案大小減少 50%。
+ 將 `foreign_key_checks` 設定為 `0` 來停用外部金鑰限制條件。對於使用 `LOAD DATA LOCAL INFILE` 載入的一般檔案，這通常是必要作業。對於任何載入，停用外部金鑰檢查可加速資料載入。載入完成後，將 `foreign_key_checks` 設定為 `1` 並驗證資料，以重新啟用限制條件。
+ 除非接近資源限制，否則請平行載入資料。若要啟用跨多個資料表區段的並行載入，請適時使用分割的資料表。
+ 若要降低 SQL 執行負荷，請將多個 `INSERT` 陳述式合併為單一多值 `INSERT` 作業。`mysqldump` 會自動實作此最佳化。
+ 將 `innodb_flush_log_at_trx_commit` 設定為 `0`，以減少 InnoDB 日誌 IO 作業。載入完成後，將 `innodb_flush_log_at_trx_commit` 還原至 `1`。
**警告**  
將 `innodb_flush_log_at_trx_commit` 設定為 `0` 會導致 InnoDB 每秒排清其日誌，而不是在每次遞交時排清日誌。此設定可提高效能，但可能會在系統故障期間造成交易遺失的風險。
+ 如果您要將資料載入至沒有僅供讀取複本的資料庫執行個體，請將 `sync_binlog` 設定為 `0`。載入完成後，將 `sync_binlog parameter` 還原至 `1`。
+ 在資料庫執行個體轉換為多可用區域部署前，將資料載入至單一可用區域資料庫執行個體。如果資料庫執行個體已使用多可用區域部署，則不建議切換至單一可用區域部署來進行資料載入。這樣做只會提供邊際改善。

# 將備份還原至 Amazon RDS for MySQL 資料庫執行個體
<a name="MySQL.Procedural.Importing"></a>

Amazon RDS 支援使用備份檔案來匯入 MySQL 資料庫。您可以建立資料庫的備份，並將備份檔案存放在 Amazon S3，接著將備份檔案還原至執行 MySQL 的新 Amazon RDS 資料庫執行個體。Amazon RDS 支援在所有 AWS 區域中從 Amazon S3 匯入備份檔案。

本節所述的案例會還原內部部署資料庫的備份。只要資料庫可供存取，您就可以將此技術用於其他位置的資料庫，例如 Amazon EC2 或其他雲端服務。

下圖顯示所支援的案例。

![\[從 S3 匯入備份檔案的 MySQL。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MySQL-bak-file.png)


在建立、複製和還原備份檔案時，如果您的內部部署資料庫可以離線，建議您使用備份檔案將資料庫匯入 Amazon RDS。如果您的資料庫無法離線，您可以使用下列其中一種方法：
+ **二進位日誌** – 首先，將備份檔案從 Amazon S3 匯入至 Amazon RDS，如本主題所述。然後，使用二進位日誌 (binlog) 複寫更新您的資料庫。如需詳細資訊，請參閱[使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。
+ **AWS Database Migration Service** – 使用 AWS Database Migration Service 將資料庫遷移至 Amazon RDS。如需詳細資訊，請參閱[什麼是 AWS Database Migration Service？](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 

## 將備份檔案從 Amazon S3 匯入至 Amazon RDS 的設定概觀
<a name="MySQL.Procedural.Importing.Enabling"></a>

若要將備份檔案從 Amazon S3 匯入至 Amazon RDS，必須要有下列元件：
+ 用來儲存備份檔案的 Amazon S3 儲存貯體。

  如果您已有 Amazon S3 儲存貯體，可以使用該儲存貯體。如果沒有，請建立新的 Amazon S3 儲存貯體。如需詳細資訊，請參閱[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingaBucket.html)。
+ Percona XtraBackup 所建立之內部部署資料庫的備份。

  如需詳細資訊，請參閱[建立資料庫備份](#MySQL.Procedural.Importing.Backup)。
+ 允許 Amazon RDS 存取 S3 儲存貯體的 AWS Identity and Access Management (IAM) 角色。

  如果您已有 IAM 角色，您可以使用該角色，並將信任和許可政策連接至該角色。如需詳細資訊，請參閱[手動建立 IAM 角色](#MySQL.Procedural.Importing.Enabling.IAM)。

  如果您沒有 IAM 角色，您有兩個選項：
  + 您可以手動建立新的 IAM 角色。如需詳細資訊，請參閱[手動建立 IAM 角色](#MySQL.Procedural.Importing.Enabling.IAM)。
  + 您可以選擇讓 Amazon RDS 為您建立新的 IAM 角色。如果您希望 Amazon RDS 為您建立新的 IAM 角色，請遵循 [將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體](#MySQL.Procedural.Importing.PerformingImport)章節 AWS 管理主控台 中使用 的程序。

## 建立資料庫備份
<a name="MySQL.Procedural.Importing.Backup"></a>

使用 Percona XtraBackup 軟體來建立備份。建議您使用 Percona XtraBackup 的最新版本。您可以從 Percona 網站上的[軟體下載](https://www.percona.com/downloads/)安裝 Percona XtraBackup。

**警告**  
建立資料庫備份時，XtraBackup 可能會將憑證儲存在 xtraackup\$1info 檔案中。請務必確認 xtrabackup\$1info 檔案中的 `tool_command` 設定未包含任何敏感資訊。

您應使用的 Percona XtraBackup 版本取決於您要備份的 MySQL 版本。
+ **MySQL 8.4** – 使用 Percona XtraBackup 8.4 版。
+ **MySQL 8.0** – 使用 Percona XtraBackup 8.0 版。
**注意**  
Percona XtraBackup 8.0.12 和更高版本支援所有 MySQL 8.0 版本的遷移。如果您要遷移至 RDS for MySQL 8.0.32 或更高版本，必須使用 Percona XtraBackup 8.0.12 或更高版本。
+ **MySQL 5.7** – 使用 Percona XtraBackup 2.4 版。

您可以使用 Percona XtraBackup 建立 MySQL 資料庫檔案的完整備份。或者，如果您已使用 Percona XtraBackup 來備份 MySQL 資料庫檔案，您可以上傳現有的完整和增量備份目錄與檔案。

如需使用 Percona XtraBackup 備份資料庫的詳細資訊，請參閱 Percona 網站上的 [Percona XtraBackup - 文件](https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)。

### 使用 Percona XtraBackup 來建立完整備份
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Full"></a>

若要建立可讓 Amazon RDS 從 Amazon S3 還原的 MySQL 資料庫檔案完整備份，請使用 Percona XtraBackup 公用程式 (`xtrabackup`)。

例如，下列命令會建立 MySQL 資料庫的備份，並將檔案儲存在 `/on-premises/s3-restore/backup` 資料夾中。

```
xtrabackup --backup --user=myuser --password=password --target-dir=/on-premises/s3-restore/backup
```

如果要將備份壓縮成單一檔案 (後續可視需要分割成多個檔案)，您可以根據 MySQL 版本將備份儲存為下列其中一種格式：
+ **Gzip (.gz)** – 適用於 MySQL 5.7 和較低版本
+ **tar (.tar)** – 適用於 MySQL 5.7 和較低版本
+ **Percona xbstream (.xbstream) **– 適用於所有 MySQL 版本

**注意**  
Percona XtraBackup 8.0 和更高版本僅支援壓縮時的 Percona xbstream。

**MySQL 5.7 和較低版本**

下列命令建立 MySQL 資料庫的備份，並分割成多個 Gzip 檔案。將值取代為您自己的資訊。

```
xtrabackup --backup --user=my_user --password=password --stream=tar \
   --target-dir=/on-premises/s3-restore/backup | gzip - | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.tar.gz
```

**MySQL 5.7 和較低版本**

下列命令建立 MySQL 資料庫的備份，並分割成多個 tar 檔案。將值取代為您自己的資訊。

```
xtrabackup --backup --user=my_user --password=password --stream=tar \
   --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.tar
```

**所有 MySQL 版本**

下列命令建立 MySQL 資料庫的備份，並分割成多個 xbstream 檔案。將值取代為您自己的資訊。

```
xtrabackup --backup --user=myuser --password=password --stream=xbstream \
   --target-dir=/on-premises/s3-restore/backup | split -d --bytes=500MB \
   - /on-premises/s3-restore/backup/backup.xbstream
```

**注意**  
如果您看到下列錯誤，可能是因為您的命令中混合了檔案格式：  

```
ERROR:/bin/tar: This does not look like a tar archive
```

### 透過 Percona XtraBackup 來使用增量備份
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Incr"></a>

如果您已使用 Percona XtraBackup 來執行 MySQL 資料庫檔案的完整和增量備份，則不需要建立完整備份並將備份檔案上傳至 Amazon S3。為了節省時間，您可以將現有的備份目錄和檔案複製到 Amazon S3 儲存貯體。如需有關使用 Percona XtraBackup 來建立增量備份的詳細資訊，請參閱 Percona 網站上的[建立增量備份](https://docs.percona.com/percona-xtrabackup/LATEST/create-incremental-backup.html)。

將現有的完整和增量備份檔案複製到 Amazon S3 儲存貯體時，您必須遞迴複製基本目錄的內容。這些內容包括完整備份，以及所有增量備份目錄和檔案。此副本必須保留 Amazon S3 儲存貯體中的目錄結構。Amazon RDS 會逐一查看所有檔案和目錄。Amazon RDS 使用包含在每個增量備份中的 `xtrabackup-checkpoints` 檔案，以識別基本目錄，以及依記錄序號 (LSN) 範圍來排序增量備份。

### Percona XtraBackup 的備份考量
<a name="AuroraMySQL.Migrating.ExtMySQL.S3.Backup.Considerations"></a>

Amazon RDS 根據檔案名稱來取用備份檔案。請根據檔案格式，以適當的副檔名命名您的備份檔案。例如，對於使用 Percona xbstream 格式存放的檔案，請使用 `.xbstream`。

Amazon RDS 依字母順序和自然數順序來取用備份檔案。為了確保備份檔案會依適當順序寫入和命名，發出 `xtrabackup` 命令時請使用 `split` 選項。

Amazon RDS 不支援使用 Percona XtraBackup 所建立的局部備份。在備份資料庫的來源檔案時，您無法使用下列選項建立局部備份。
+ `--tables`
+ `--tables-exclude`
+ `--tables-file`
+ `--databases`
+ `--databases-exclude`
+ `--databases-file`

## 手動建立 IAM 角色
<a name="MySQL.Procedural.Importing.Enabling.IAM"></a>

如果沒有，您可以手動建立新的 IAM 角色。不過，如果您使用 還原資料庫 AWS 管理主控台，建議您選擇讓 Amazon RDS 為您建立新的 IAM 角色。若要讓 Amazon RDS 為您建立此角色，請依照 [將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體](#MySQL.Procedural.Importing.PerformingImport) 一節中的程序操作。

若要手動建立新的 IAM 角色以便從 Amazon S3 匯入資料庫，請建立可從 Amazon RDS 將許可委派給 Amazon S3 儲存貯體的角色。當您建立 IAM 角色時，您需要附加信任和許可政策。若要從 Amazon S3 匯入備份檔案，請使用類似下列範例的信任和許可政策。如需建立角色的詳細資訊，請參閱[建立角色以將許可委派給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

信任和許可政策規定您必須提供 Amazon Resource Name (ARN)。如需 ARN 格式的詳細資訊，請參閱 [Amazon Resource Name (ARNs AWS 和服務命名空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

**Example 從 Amazon S3 匯入時的信任原則**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AssumeRoleForBackup",
      "Effect": "Allow",
      "Principal": {
        "Service": "rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

**Example 從 Amazon S3 匯入時的許可原則 — IAM 使用者許可**  
在下列範例中，將 *iam\$1user\$1id* 取代為您自己的值。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3AccessRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/S3Access"
        }
    ]
}
```

**Example 從 Amazon S3 匯入時的許可原則 — 角色許可**  
在下列範例中，將 *amzn-s3-demo-bucket* 和 *prefix* 取代為您自己的值。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":
    [
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "s3:GetObject"
            ],
        "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix*"
        },
        {
        "Effect": "Allow",
        "Action":
            [
                "kms:Decrypt"
            ],
        "Resource": [
            "arn:aws:kms:us-east-1:111122223333:key/key_id*"
            ]
        }
    ]
}
```
如果包含檔案名稱字首，請在字首後面加上星號 (\$1)。如果您不想指定字首，則指定星號即可。

## 將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體
<a name="MySQL.Procedural.Importing.PerformingImport"></a>

您可以使用 AWS 管理主控台 AWS CLI或 RDS API，將資料從 Amazon S3 匯入新的 MySQL 資料庫執行個體。

### 主控台
<a name="MySQL.Procedural.Importing.Console"></a>

**從 Amazon S3 將資料匯入新的 MySQL 資料庫執行個體**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在 Amazon RDS 主控台的右上角，選擇您要建立資料庫執行個體 AWS 區域 的 。選擇與包含資料庫備份的 Amazon S3 儲存貯體 AWS 區域 相同的 。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 **Restore From S3 (從 S3 還原)**。

   系統會顯示 **Create database by restoring from S3** (從 S3 還原以建立資料庫) 頁面。  
![\[從 S3 還原以建立資料庫頁面，您可以在此處指定從 S3 還原資料庫執行個體的詳細資訊。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/mys-s3-ingestion.png)

1. 在 **S3 來源**底下：

   1. 選擇包含備份的 **S3 bucket** (S3 儲存貯體)。

   1. (選用) 在 **S3 字首**中，為存放在 Amazon S3 儲存貯體中的檔案輸入檔案路徑字首。

      若未指定字首，Amazon RDS 會使用 S3 儲存貯體的根資料夾中所有的檔案和資料夾來建立資料庫執行個體。如果指定字首，則 Amazon RDS 會使用 S3 儲存貯體中的檔案和資料夾來建立資料庫執行個體，且檔案的路徑會以指定的字首開頭。

      例如，您將備份檔案儲存在 S3 中一個名為 backups 的子資料夾，而且有多組備份檔案，各存放於自己的目錄中 (gzip\$1backup1、gzip\$1backup2 等等)。在此案例中，若要從 gzip\$1backup1 資料夾中的檔案還原，應指定字首 backups/gzip\$1backup1。

1. 在 **Engine options (引擎選項)**：

   1. 針對 **Engine type** (引擎類型)，請選擇 **MySQL**。

   1. 在 **Source engine version** (來源引擎版本) 中，選擇來源資料庫的 MySQL 主要版本。

   1. 針對**版本**，在 AWS 區域中選擇您 MySQL 主要版本的預設次要版本。

      在 中 AWS 管理主控台，只有預設次要版本可用。完成匯入後，您即可升級資料庫執行個體。

1. 針對 **IAM 角色**，使用允許 Amazon RDS 存取 Amazon S3 儲存貯體的必要信任政策和許可政策，來建立或選擇 IAM 角色。執行下列動作之一：
   + (建議) 選擇**建立新角色**，然後輸入 **IAM 角色名稱**。使用此選項時，Amazon RDS 會自動為您建立具有信任政策和許可政策的角色。
   + 選擇現有的 IAM 角色。請確定此角色符合 [手動建立 IAM 角色](#MySQL.Procedural.Importing.Enabling.IAM) 中的所有條件。

1. 指定您的資料庫執行個體資訊。如需每項設定的相關資訊，請參閱 [資料庫執行個體的設定](USER_CreateDBInstance.Settings.md)。
**注意**  
請務必配置足夠的儲存體給新的資料庫執行個體，以確保還原操作成功。  
若要自動因應未來增長，請在**其他儲存體組態**底下，選擇**啟用儲存體自動調整**。

1. 視需要選擇其他設定。

1. 選擇 **Create database** (建立資料庫)。

### AWS CLI
<a name="MySQL.Procedural.Importing.CLI"></a>

若要使用 將資料從 Amazon S3 匯入至新的 MySQL 資料庫執行個體 AWS CLI，請使用下列選項執行 [restore-db-instance-from-s3](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html) 命令。如需每項設定的相關資訊，請參閱 [資料庫執行個體的設定](USER_CreateDBInstance.Settings.md)。

**注意**  
請務必配置足夠的儲存體給新的資料庫執行個體，以確保還原操作成功。  
若要啟用儲存體自動調整並自動因應未來增長，請使用 `--max-allocated-storage` 選項。
+ `--allocated-storage`
+ `--db-instance-identifier`
+ `--db-instance-class`
+ `--engine`
+ `--master-username`
+ `--manage-master-user-password`
+ `--s3-bucket-name`
+ `--s3-ingestion-role-arn`
+ `--s3-prefix`
+ `--source-engine`
+ `--source-engine-version`

**Example**  
針對 Linux、macOS 或 Unix：  

```
 1. aws rds restore-db-instance-from-s3 \
 2.     --allocated-storage 250 \
 3.     --db-instance-identifier my_identifier \
 4.     --db-instance-class db.m5.large \
 5.     --engine mysql \
 6.     --master-username admin \
 7.     --manage-master-user-password \
 8.     --s3-bucket-name amzn-s3-demo-bucket \
 9.     --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \
10.     --s3-prefix bucket_prefix \
11.     --source-engine my_sql \
12.     --source-engine-version 8.0.32 \
13.     --max-allocated-storage 1000
```
在 Windows 中：  

```
 1. aws rds restore-db-instance-from-s3 ^
 2.     --allocated-storage 250 ^
 3.     --db-instance-identifier my_identifier ^
 4.     --db-instance-class db.m5.large ^
 5.     --engine mysql ^
 6.     --master-username admin ^
 7.     --manage-master-user-password ^
 8.     --s3-bucket-name amzn-s3-demo-bucket ^
 9.     --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^
10.     --s3-prefix bucket_prefix ^
11.     --source-engine mysql ^
12.     --source-engine-version 8.0.32 ^
13.     --max-allocated-storage 1000
```

### RDS API
<a name="MySQL.Procedural.Importing.API"></a>

若要使用 Amazon RDS API 從 Amazon S3 將資料匯入新的 MySQL 資料庫執行個體，請呼叫 [RestoreDBInstanceFromS3](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html) 操作。

## 從 Amazon S3 將備份檔案匯入 Amazon RDS 的限制和考量
<a name="MySQL.Procedural.Importing.Limitations"></a>

將備份檔案從 Amazon S3 匯入至 RDS for MySQL 資料庫執行個體時有下列限制和考量：
+ 您只能將資料遷移至新的資料庫執行個體，而不是現有的資料庫執行個體。
+ 您必須使用 Percona XtraBackup 將資料備份到 Amazon S3。如需詳細資訊，請參閱[建立資料庫備份](#MySQL.Procedural.Importing.Backup)。
+ Amazon S3 儲存貯體與 RDS for MySQL 資料庫執行個體必須位於相同 AWS 區域中。
+ 您無法從下列來源還原：
  + 將資料庫執行個體快照匯出至 Amazon S3。您無法將資料從資料庫執行個體快照遷移至 Amazon S3 儲存貯體。
  + 加密的來源資料庫。不過，您可以加密要遷移的資料。您也可以在遷移過程中維持不加密資料。
  + MySQL 5.5 或 5.6 資料庫。
+ RDS for MySQL 不支援以 Percona Server for MySQL 做為來源資料庫，因為其 `mysql schema` 結構描述中可能包含 `compression_dictionary*` 資料表。
+ RDS for MySQL 不支援主要版本或次要版本的回溯遷移。例如，您無法從 MySQL 8.0 版遷移至 RDS for MySQL 5.7 版，也無法從 MySQL 8.0.32 版遷移至 RDS for MySQL 8.0.26 版。
+ Amazon RDS 不支援在 db.t2.micro 資料庫執行個體類別上從 Amazon S3 匯入。不過，您可以先還原至不同的資料庫執行個體類別，後續再變更資料庫執行個體類別。如需執行個體類別的詳細資訊，請參閱[ 資料庫執行個體類別的硬體規格](Concepts.DBInstanceClass.Summary.md)。
+ Amazon S3 將上傳至 Amazon S3 儲存貯體的檔案大小限制為 5 TB。如果備份檔案超過 5 TB，您必須將備份檔案分割為較小的檔案。
+ Amazon RDS 將上傳至 Amazon S3 儲存貯體的檔案數量限制為 1 百萬個。如果資料庫的備份資料 (包括所有完整和增量備份) 超過 1 百萬個檔案，請使用 Gzip (.gz)、tar (.tar.gz) 或 Percona xbstream (.xbstream) 檔案將完整和增量備份檔案儲存在 Amazon S3 儲存貯體中。Percona XtraBackup 8.0 只支援壓縮時的 Percona xbstream。
+ 為了提供各資料庫執行個體管理服務，Amazon RDS 在建立資料庫執行個體時，會建立 `rdsadmin` 使用者。由於 `rdsamin` 是 Amazon RDS 中的保留使用者，因此適用下列限制：
  + Amazon RDS 不會匯入使用 `'rdsadmin'@'localhost'` 定義程式的函數、程序、檢視、事件和觸發程序。如需詳細資訊，請參閱[以 'rdsamin'@'localhost' 做為定義程式的預存物件](#MySQL.Procedural.Importing.StoredObjects)及[主要使用者帳戶權限](UsingWithRDS.MasterAccounts.md)。
  + 建立資料庫執行個體時，Amazon RDS 會建立具有最大支援權限的主要使用者。從備份還原時，若指派了任何不支援的權限給要匯入的使用者，Amazon RDS 會自動將其移除。

    若要找出可能受此影響的使用者，請參閱 [具有不支援權限的使用者帳戶](#MySQL.Migrating.ExtMySQL.Prechecks.Users)。若要進一步了解 RDS for MySQL 中支援的權限，請參閱 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)。
+ Amazon RDS 不會遷移 `mysql` 結構描述中由使用者建立的資料表。
+ `innodb_data_file_path` 參數必須以一個使用預設資料檔案名稱 `ibdata1:12M:autoextend` 的資料檔案來設定。您可以使用此方法，移轉含有兩個資料檔案 (或一個具有不同名稱的資料檔案) 的資料庫。

  下列範例是 Amazon RDS 不允許的檔案名稱：
  + `innodb_data_file_path=ibdata1:50M`
  + `ibdata2:50M:autoextend`
  + `innodb_data_file_path=ibdata01:50M:autoextend`
+ 如果來源資料庫有資料表是在預設 MySQL 資料目錄外定義，您無法從這個來源資料庫遷移。
+ 使用此方法可支援的最大未壓縮備份大小限制為 64 TiB。對於壓縮備份，此限制會降低以考量未壓縮空間需求。在這種情況下，支援的最大備份大小為 `64 TiB - compressed backup size`。

  如需 RDS for MySQL 支援的資料庫大小上限的詳細資訊，請參閱 [一般用途 SSD 儲存體](CHAP_Storage.md#Concepts.Storage.GeneralSSD) 和 [佈建 IOPS SSD 儲存體](CHAP_Storage.md#USER_PIOPS)。
+ Amazon RDS 不支援匯入 MySQL 及其他外部元件和外掛程式。
+ Amazon RDS 不會從您的資料庫還原任何項目。建議您從來源 MySQL 系統資料庫儲存資料庫結構描述和下列項目的值，然後在還原的 RDS for MySQL 資料庫執行個體建立後，將這些項目新增至其中：
  + 使用者帳戶
  + 函數
  + 預存程序
  + 時區資訊。時區資訊會從 RDS for MySQL 資料庫執行個體的本機作業系統載入。如需詳細資訊，請參閱[MySQL 資料庫執行個體的本機時區](MySQL.Concepts.LocalTimeZone.md)。

### 以 'rdsamin'@'localhost' 做為定義程式的預存物件
<a name="MySQL.Procedural.Importing.StoredObjects"></a>

Amazon RDS 不會匯入以 `'rdsadmin'@'localhost'` 做為定義程式的函數、程序、檢視、事件和觸發程序。

您可以在來源 MySQL 資料庫上使用以下 SQL 指令碼列出具有不支援 DEFINER 的預存物件。

```
-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer.

SELECT
    ROUTINE_SCHEMA,
    ROUTINE_NAME
FROM
    information_schema.routines
WHERE
    definer = 'rdsadmin@localhost';

-- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer.

SELECT
    TRIGGER_SCHEMA,
    TRIGGER_NAME,
    DEFINER
FROM
    information_schema.triggers
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists events with `rdsadmin`@`localhost` as the definer.

SELECT
    EVENT_SCHEMA,
    EVENT_NAME
FROM
    information_schema.events
WHERE
    DEFINER = 'rdsadmin@localhost';

-- This SQL query lists views with `rdsadmin`@`localhost` as the definer.
SELECT
    TABLE_SCHEMA,
    TABLE_NAME
FROM
    information_schema.views
WHERE
    DEFINER = 'rdsadmin@localhost';
```

### 具有不支援權限的使用者帳戶
<a name="MySQL.Migrating.ExtMySQL.Prechecks.Users"></a>

使用者帳戶若具有 RDS for MySQL 不支援的權限，在匯出時將會排除不受支援的權限。如需支援的權限清單，請參閱 [RDS for MySQL 的角色型權限模型](Appendix.MySQL.CommonDBATasks.privilege-model.md)。

您可以在來源資料庫上執行下列 SQL 查詢，以列出具有不支援權限的使用者帳戶。

```
SELECT
    user,
    host
FROM
    mysql.user
WHERE
    Shutdown_priv = 'y'
    OR File_priv = 'y'
    OR Super_priv = 'y'
    OR Create_tablespace_priv = 'y';
```

# 從外部 MySQL 資料庫將資料匯入至 Amazon RDS for MySQL 資料庫執行個體
<a name="mysql-importing-data-external-database"></a>

您可將資料從現有的 MySQL 資料庫匯入至 RDS for MySQL 資料庫執行個體。方法是以 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 命令複製資料庫，然後直接傳輸到 RDS for MySQL 資料庫執行個體。`mysqldump` 命令列公用程式普遍用於製作備份，以及將資料從 MySQL 伺服器傳輸至另一個伺服器。MySQL 用戶端軟體隨附這個程式。

**注意**  
如果您要使用 MySQL 資料庫執行個體匯入或匯出大量資料，使用 `xtrabackup` 備份檔案和 Amazon S3 將資料移入和移出 Amazon RDS，會更加可靠且更快速。如需詳細資訊，請參閱[將備份還原至 Amazon RDS for MySQL 資料庫執行個體](MySQL.Procedural.Importing.md)。

典型的 `mysqldump` 命令會將資料從外部資料庫移入 Amazon RDS 資料庫執行個體，如下列範例所示。將值取代為您自己的資訊。

```
mysqldump -u local_user \
    --databases database_name \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mysql -u RDS_user \
        --port=port_number \
        --host=host_name \
        -pRDS_password
```

**重要**  
切勿在 `-p` 選項與輸入的密碼間插入空白。  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。

請確認您了解下列建議和注意事項：
+ 從傾印檔案中排除下列結構描述：
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` 公用程式已預設排除這些結構描述。
+ 如需遷移使用者與權限，建議您使用可產生資料控制語言 (DCL) 以重建使用者與權限的工具，例如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 公用程式。
+ 若要執行匯入，請確認執行此程序的使用者能夠存取資料庫執行個體。如需詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

使用的參數如下：
+ `-u local_user` – 用來指定使用者名稱。首次使用此參數時，需在 `--databases` 參數所識別的本機 MySQL 資料庫中指定使用者帳戶名稱。
+ `--databases database_name` – 在您要匯入至 Amazon RDS 的本機 MySQL 執行個體上，指定資料庫名稱。
+ `--single-transaction` – 確保從本機資料庫負載的所有資料均與單一時間點一致。如有其他程序在 `mysqldump` 讀取資料時變更資料，使用此參數有助於維持資料完整性。
+ `--compress` – 在本機資料庫的資料傳送到 Amazon RDS 前先完成壓縮，以減少耗用的網路頻寬。
+ `--order-by-primary` – 以資料的主索引鍵排序各資料表的資料，以減少載入時間。
+ `--routines` – 如果預存程序或函數等常式存在於您要複製的資料庫中，則應使用。將參數設定為 `0`，這會在匯入程序期間排除常式。然後，在 Amazon RDS 資料庫中手動重新建立常式。
+ `--triggers` – 如果觸發程序存在於您要複製的資料庫中，則應使用。將參數設定為 `0`，這會在匯入程序期間排除觸發程序。然後，在 Amazon RDS 資料庫中手動重新建立觸發程序。
+ `--events` – 如果事件存在於您要複製的資料庫中，則應使用。將參數設定為 `0`，這會在匯入程序期間排除事件。然後，在 Amazon RDS 資料庫中手動重新建立事件。
+ `-plocal_password` – 用來指定密碼。首次使用此參數時，請指定您以第一個 `-u` 參數識別的使用者帳戶的密碼。
+ `-u RDS_user` – 用來指定使用者名稱。第二次使用此參數時，需在 `--host` 參數所識別的 MySQL 資料庫執行個體的預設資料庫上，指定使用者帳戶名稱。
+ `--port port_number` – 用於指定 MySQL 資料庫執行個體的連接埠。預設值為 3306，除非您在建立資料庫執行個體時另行變更。
+ `--host host_name` – 用來指定 Amazon RDS 資料庫執行個體端點的網域名稱系統 (DNS) 名稱，例如 。`myinstance.123456789012.us-east-1.rds.amazonaws.com`您可在 Amazon RDS 主控台的資料庫執行個體詳細資訊中找到端點值。
+ `-pRDS_password` – 用來指定密碼。第二次使用此參數時，需指定第二個 `-u` 參數所識別的使用者帳戶密碼。

必須在 Amazon RDS 資料庫中手動建立預存程序、觸發程序、函數或事件。如果您正在複製的資料庫中存有上述物件，則請在執行 `mysqldump` 時排除這些物件。為此，請在 `mysqldump` 命令中包含下列參數：
+ `--routines=0`
+ `--triggers=0`
+ `--events=0`

**範例**

下列範例會將本機主機上的 `world` 範例資料庫複製到 RDS for MySQL 資料庫執行個體。將值取代為您自己的資訊。

針對 Linux、macOS 或 Unix：

```
sudo mysqldump -u local_user \
    --databases world \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mysql -u rds_user \
        --port=3306 \
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com \
        -pRDS_password
```

在 Windows 中：

在命令提示字元中執行下列命令，方法是對 Windows 程式功能表中的**命令提示字元**按一下滑鼠右鍵，然後選擇**以系統管理員身分執行**。將值取代為您自己的資訊。

```
mysqldump -u local_user ^
    --databases world ^
    --single-transaction ^
    --compress ^
    --order-by-primary  ^
    --routines=0 ^
    --triggers=0 ^
    --events=0 ^
    -plocal_password | mysql -u RDS_user ^
        --port=3306 ^
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com ^
        -pRDS_password
```

**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。

# 以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫
<a name="mysql-importing-data-reduced-downtime"></a>

某些情況下，您可能需要將資料從支援即時應用程式的外部 MySQL 資料庫匯入至 RDS for MySQL 資料庫執行個體或 RDS for MySQL 多可用區域資料庫叢集。使用下列程序，將對應用程式可用性的影響降至最低。如果您使用的是超大型資料庫，也可使用這個程序。使用此程序，您可以減少經由網路傳輸至 AWS的資料量來降低匯入成本。

此程序中，您需將資料庫資料的複本傳輸至 Amazon EC2 執行個體，並將資料匯入至新的 Amazon RDS 資料庫。接著，將應用程式重新導向 Amazon RDS 資料庫前，請使用複寫功能將 Amazon RDS 資料庫更新至與即時外部執行個體相同的最新狀態。根據二進位日誌座標設定複寫。

**注意**  
如果您想要將資料匯入至 RDS for MySQL 資料庫執行個體，且您的情況允許，建議您使用備份檔案與 Amazon S3 將資料移入和移出 Amazon RDS。如需詳細資訊，請參閱[將備份還原至 Amazon RDS for MySQL 資料庫執行個體](MySQL.Procedural.Importing.md)。

下圖說明如何將外部 MySQL 資料庫匯入至 Amazon RDS 上的 MySQL 資料庫。

![\[工作流程說明如何將外部 MySQL 資料庫匯入至 Amazon RDS 上的 MySQL 資料庫。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_1.png)


## 任務 1：建立現有資料庫的複本
<a name="mysql-importing-data-reduced-downtime-copy-database"></a>

要將大量資料遷移至 RDS for MySQL 資料庫，並將停機時間降至最低，第一步是建立來源資料的複本。

下圖說明如何建立 MySQL 資料庫的備份。

![\[工作流程說明如何建立 MySQL 資料庫的備份。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_2.png)


您可使用 `mysqldump` 公用程式，以 SQL 或分隔符號文字等任一格式建立資料庫備份。建議您在非生產環境中分別測試各種格式，以了解哪種方法能將 `mysqldump` 的執行時間減至最少。

此外也建議您衡量 `mysqldump` 的效能與使用分隔符號文字格式載入所帶來的效益。使用分隔符號文字格式的備份會為每個傾印的資料表分別建立定位鍵分隔文字檔案。您可以使用 `LOAD DATA LOCAL INFILE` 命令平行載入這些檔案，縮短匯入資料庫所需的時間。如需詳細資訊，請參閱「從任何來源程序匯入資料」中的 [步驟 5：載入資料](mysql-importing-data-any-source.md#mysql-importing-data-any-source-load-data)。

開始備份作業前，請確認在要複製到 Amazon RDS 的 MySQL 資料庫上設定複寫選項。複寫選項包括開啟二進位日誌及設定獨一無二的伺服器 ID。設定這些選項後，伺服器會開始記錄資料庫交易，並調整至就緒狀態，以擔任後續程序的來源複寫執行個體。

請確認您了解下列建議和注意事項：
+ 對 `--single-transaction` 使用 `mysqldump` 選項，因為它會傾印資料庫的一致狀態。若要確保有效的傾印檔案，請勿在執行 `mysqldump` 時執行資料定義語言 (DDL) 陳述式。您可以為這些作業排定維護時段。
+ 從傾印檔案中排除下列結構描述：
  + `sys`
  + `performance_schema`
  + `information_schema`

  `mysqldump` 公用程式已預設排除這些結構描述。
+ 如需遷移使用者與權限，建議您使用可產生資料控制語言 (DCL) 以重建使用者與權限的工具，例如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 公用程式。

### 設定複寫選項
<a name="mysql-importing-data-reduced-downtime-set-replication-options"></a>

1. 編輯 `my.cnf` 檔案。這個檔案通常位於 `/etc` 底下。

   ```
   sudo vi /etc/my.cnf
   ```

   將 `log_bin` 和 `server_id` 選項新增至 `[mysqld]` 部分。`log_bin` 選項會提供二進位記錄檔的檔案名稱識別符。`server_id` 選項會為來源與複本關係提供伺服器唯一識別碼。

   以下範例顯示 `my.cnf` 檔案更新的 `[mysqld]` 部分：

   ```
   [mysqld]
   log-bin=mysql-bin
   server-id=1
   ```

   如需詳細資訊，請參閱 MySQL 文件中的[設定複寫來源組態](https://dev.mysql.com/doc/refman/8.4/en/replication-howto-masterbaseconfig.html)。

1. 如需使用多可用區域資料庫叢集進行複寫，請將 `ENFORCE_GTID_CONSISTENCY` 和 `GTID_MODE` 參數設為 `ON`。

   ```
   mysql> SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
   ```

   ```
   mysql> SET @@GLOBAL.GTID_MODE = ON;
   ```

   使用資料庫執行個體進行複製時，不需要這些設定。

1. 重新啟動 `mysql` 服務。

   ```
   sudo service mysqld restart
   ```

### 建立現有資料庫的備份複本
<a name="mysql-importing-data-reduced-downtime-create-backup"></a>

1. 您可使用 `mysqldump` 公用程式，以 SQL 或分隔符號文字等任一格式建立資料備份。

   針對 MySQL 8.0.25 和較低版本，請指定 `--master-data=2` 以建立可用來在伺服器之間啟動複寫的備份檔案。針對 MySQL 8.0.26 和更高版本，請指定 `--source-data=2` 以建立可用來在伺服器之間啟動複寫的備份檔案。如需詳細資訊，請參閱 MySQL 文件中的 [mysqldump — 資料庫備份計畫](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html)。

   如需提升效能並確保資料完整性，請使用 `mysqldump` 的 `--order-by-primary` 和 `--single-transaction` 選項。

   為避免備份中包含 MySQL 系統資料庫，請勿以 `mysqldump` 搭配使用 `--all-databases` 選項。如需詳細資訊，請參閱 MySQL 文件中的[使用 mysqldump 建立資料快照](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)。

   如有必要請使用 `chmod`，確保建立備份檔案的目錄可以寫入。
**重要**  
在 Windows 上，以管理員身分執行命令視窗。
   + 若要產生 SQL 輸出，請使用下列命令：

     針對 Linux、macOS 或 Unix：

     ```
     sudo mysqldump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。

     在 Windows 中：

     ```
     mysqldump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。
   + 若要產生分隔符號文字輸出，請使用下列命令。

     針對 Linux、macOS 或 Unix：

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     在 Windows 中：

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**注意**  
指定此範例中所顯示提示以外的憑證，作為安全最佳實務。  
必須在 Amazon RDS 資料庫中手動建立預存程序、觸發程序、函數或事件。如果您正在複製的資料庫中存有上述物件，則請在執行 `mysqldump` 時排除這些物件。為此，請在 `mysqldump` 命令中包含下列參數：  
`--routines=0`
`--triggers=0`
`--events=0`

     針對 MySQL 8.0.22 和較低版本，當您執行 `mysqldump` 並指定分隔符號文字格式時，會傳回 `CHANGE MASTER TO` 註解。此註解會包含主控端日誌檔案的名稱與位置。針對 MySQL 8.0.23 和更高版本，當您使用分隔符號文字格式執行 `mysqldump` 時，會傳回 `CHANGE REPLICATION SOURCE TO` 註解。此註解會包含來源日誌檔案的名稱與位置。如果外部執行個體是 MySQL 8.0.23 和更高版本，請記下 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值。設定複寫時您需要這些值。

     MySQL 8.0.22 和較低版本會傳回下列輸出：

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

     MySQL 8.0.23 和更高版本會傳回下列輸出：

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE SOURCE TO SOURCE_LOG_FILE='mysql-bin-changelog.000031', SOURCE_LOG_POS=107;
     ```

     針對 MySQL 8.0.22 和較低版本，如果您使用 SQL 格式，您可以在備份檔案的 `CHANGE MASTER TO` 註解中取得主控端日誌檔案的名稱與位置。針對 MySQL 8.0.23 和更高版本，如果您使用 SQL 格式，您可以在備份檔案的 `CHANGE REPLICATION SOURCE TO` 註解中取得來源日誌檔案的名稱與位置。

1. 壓縮複製的資料，以減少複製資料到 Amazon RDS 資料庫所需的網路資源量。請記下備份檔案的大小。決定要建立多大的 Amazon EC2 執行個體時，您需要此資訊。完成後，請使用 GZIP 或您慣用的壓縮公用程式壓縮備份檔。
   + 若要壓縮 SQL 輸出，請使用下列命令：

     ```
     gzip backup.sql
     ```
   + 若要壓縮分隔符號文字輸出，請使用下列命令：

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## 任務 2：建立 Amazon EC2 執行個體並複製壓縮的資料庫
<a name="mysql-importing-data-reduced-downtime-create-ec2-copy-database"></a>

比起直接在資料庫執行個體間複製未壓縮的資料，將壓縮的資料庫備份檔複製到 Amazon EC2 執行個體，需要的網路資源較少。資料位於 Amazon EC2 後，即可將資料直接複製到 MySQL 資料庫。若要節省網路資源的成本，Amazon EC2 執行個體必須與 AWS 區域 Amazon RDS 資料庫執行個體位於相同的 中。如果 Amazon EC2 執行個體與 Amazon RDS 資料庫位於相同的 AWS 區域 ，也能在匯入期間減少網路延遲。

下圖說明如何將資料庫備份複製到 Amazon EC2 執行個體。

![\[說明如何將資料庫備份複製到 Amazon EC2 執行個體的工作流程。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_3.png)


### 建立 Amazon EC2 執行個體並複製資料
<a name="mysql-importing-data-reduced-downtime-create-ec2"></a>

1. 在您 AWS 區域 計劃建立 Amazon RDS 資料庫的 中，建立虛擬私有雲端 (VPC)、VPC 安全群組和 VPC 子網路。確認 VPC 安全群組的傳入規則會允許您應用程式連線至 AWS所需的 IP 地址。您可以指定 IP 位址範圍 (例如 `203.0.113.0/24`) 或另一個 VPC 安全群組。您可以使用 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc)來建立及管理 VPC、子網路和安全群組。如需詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的 [Amazon VPC 入門](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)。

1. 開啟 [Amazon EC2 主控台](https://console.aws.amazon.com/ec2)，然後選擇 AWS 區域 以同時包含您的 Amazon EC2 執行個體和 Amazon RDS 資料庫。使用您在步驟 1 中建立的 VPC、子網路和安全群組，啟動 Amazon EC2 執行個體。確認您選取的執行個體類型具有足夠的儲存空間，足以供未壓縮的資料庫備份檔使用。如需 Amazon EC2 執行個體的詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中的 [Amazon EC2 入門](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1. 若要從 Amazon EC2 執行個體連線至 Amazon RDS 資料庫，請編輯您的 VPC 安全群組。新增會指定您 EC2 執行個體私有 IP 地址的傳入規則。您可在 EC2 主控台視窗中，從 **Instance** (執行個體) 窗格的 **Details** (詳細資訊) 分頁標籤找到私有 IP 地址。若要編輯 VPC 安全群組並新增傳入規則，請選取 EC2 主控台導覽窗格中的 **Security Groups** (安全群組)，接著選擇您的安全群組，然後新增 MySQL 或 Aurora 的傳入規則，指定 EC2 執行個體的私有 IP 地址。如需了解如何將傳入規則新增至 VPC 安全群組，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的[安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

1. 將壓縮的資料庫備份檔從本機系統複製到 Amazon EC2 執行個體。如有必要請使用 `chmod`，確認您擁有 Amazon EC2 執行個體的目標目錄寫入許可。您可使用 `scp` 命令或 Secure Shell (SSH) 用戶端來複製檔案。下列命令是範例 `scp` 命令：

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**重要**  
複製敏感資料時，請務必使用安全網路傳輸通訊協定。

1. 使用下列命令連線至您的 Amazon EC2 執行個體，並安裝最新更新與 MySQL 客戶端工具：

   ```
   sudo yum update -y
   sudo yum install mysql -y
   ```

   如需詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中適用於 Linux 執行個體的[連線到您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)。
**重要**  
此範例會在 Amazon Linux 發行版的 Amazon Machine Image (AMI) 上安裝 MySQL 用戶端。此範例不會在不同的發行版上安裝 MySQL 用戶端，例如 Ubuntu 或 Red Hat Enterprise Linux。如需安裝 MySQL 的資訊，請參閱 MySQL 文件中的[安裝 MySQL](https://dev.mysql.com/doc/refman/8.4/en/installing.html)。

1. 連線到 Amazon EC2 執行個體後，將您的資料庫備份檔解壓縮。下列命令為範例。
   + 若要將 SQL 輸出解壓縮，請使用下列命令：

     ```
     gzip backup.sql.gz -d
     ```
   + 若要將分隔符號文字輸出解壓縮，請使用下列命令：

     ```
     tar xzvf backup.tar.gz
     ```

## 任務 3：建立 MySQL 資料庫，並從 Amazon EC2 執行個體匯入資料
<a name="mysql-importing-data-reduced-downtime-create-database-import-data"></a>

在與您 Amazon EC2 執行個體相同的 AWS 區域 中建立 RDS for MySQL 資料庫執行個體或 RDS for MySQL 多可用區域資料庫叢集後，即可從 Amazon EC2 匯入資料庫備份檔，且速度會比透過網際網路匯入更快。

下圖說明如何將備份從 Amazon EC2 執行個體匯入至 MySQL 資料庫。

![\[工作流程說明如何將備份從 EC2 執行個體匯入至 MySQL 資料庫。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_4.png)


### 建立 MySQL 資料庫並匯入資料
<a name="mysql-importing-data-reduced-downtime-create-database"></a>

1. 判斷需要何種資料庫執行個體類別及多大的儲存空間，才能支援這個 Amazon RDS 資料庫預計的工作負載。在此流程的過程中，決定資料載入程序需要多少空間與處理容量才夠。也請決定處理生產工作負載所需的資源。您可根據來源 MySQL 資料庫的大小與資源加以估計。如需詳細資訊，請參閱[ 資料庫執行個體類別](Concepts.DBInstanceClass.md)。

1. 在包含 Amazon EC2 執行個體 AWS 區域 的 中建立資料庫執行個體或多可用區域資料庫叢集。

   若要建立 RDS for MySQL 多可用區域資料庫叢集，請遵循 [為 Amazon RDS 建立多可用區域資料庫叢集](create-multi-az-db-cluster.md) 中的指示。

   若要建立 RDS for MySQL 資料庫執行個體，請遵循 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md) 中的指示，並使用下列指導方針：
   + 指定與您來源資料庫執行個體相容的資料庫引擎版本。
   + 指定與 Amazon EC2 執行個體相同的虛擬私有雲端 (VPC) 和 VPC 安全群組。這種作法可確保您的 Amazon EC2 執行個體與 Amazon RDS 執行個體能在網路上看見彼此。確保您的資料庫執行個體可以公開存取。若要如下一節中說明的方式，以您的來源資料庫設定複寫，必須將資料庫執行個體設為公開存取。
   + 匯入資料庫備份前，請勿設定多個可用區域、備份保留期或僅供讀取複本。匯入完成後，您可以設定生產執行個體的多可用區域和備份保留。

1. 檢視 Amazon RDS 資料庫的預設組態選項。如果資料庫的預設參數群組沒有您想要的組態選項，請尋找其他提供您所需選項的參數群組，或者建立新的參數群組。如需建立參數群組的詳細資訊，請參閱 [Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

1. 以主要使用者身分連線至新的 Amazon RDS 資料庫。建立必要的使用者，以支援需存取資料庫執行個體的管理員、應用程式和服務。Amazon RDS 資料庫的主機名稱是此資料庫執行個體的**端點**值 (不含連接埠號碼)，例如 `mysampledb.123456789012.us-west-2.rds.amazonaws.com`。端點值可在 Amazon RDS 主控台的資料庫詳細資訊中找到。

1. 連線到您的 Amazon EC2 執行個體。如需詳細資訊，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中適用於 Linux 執行個體的[連線到您的執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)。

1. 使用 `mysql` 命令，以遠端主機的形式從 Amazon EC2 執行個體連線至 Amazon RDS 資料庫。下列命令為範例：

   ```
   mysql -h host_name -P 3306 -u db_master_user -p
   ```

   *host\$1name* 是 Amazon RDS 資料庫端點。

1. 出現 `mysql` 提示時，請執行 `source` 命令，並傳入資料庫傾印檔案的名稱。此命令會將資料載入至 Amazon RDS 資料庫執行個體。
   + 若為 SQL 格式，請使用下列命令：

     ```
     mysql> source backup.sql;
     ```
   + 若為分隔符號文字格式，請先建立資料庫 (如果它不是您在設定 Amazon RDS 資料庫時建立的預設資料庫)。

     ```
     mysql> create database database_name;
     mysql> use database_name;
     ```

     接著建立資料表。

     ```
     mysql> source table1.sql
     mysql> source table2.sql
     etc...
     ```

     然後匯入資料。

     ```
     mysql> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     mysql> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     若要提升效能，您可透過多個連線平行執行這些操作，如此您的所有資料表就會建立並隨後載入。
**注意**  
在您一開始傾印資料表時，如果有透過 `mysqldump` 使用了任何資料格式設定選項，請確實使用與 `LOAD DATA LOCAL INFILE` 相同的選項，以確保資料檔案內容可順利解譯。

1. 在匯入的資料庫中，對一兩個資料表執行簡單的 `SELECT` 查詢，確認匯入作業執行成功。

如果您不再需要此程序中使用的 Amazon EC2 執行個體，請終止 EC2 執行個體以減少 AWS 資源用量。若要終止 EC2 執行個體，請參閱《Amazon Elastic Compute Cloud 使用者指南》**中的[終止執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)。

## 任務 4：從外部資料庫將資料複寫到新的 Amazon RDS 資料庫
<a name="mysql-importing-data-reduced-downtime-replicate-data"></a>

在複製資料並傳輸至 MySQL 資料庫期間，您的來源資料庫可能就會完成更新。因此，您可以使用複寫功能，讓複製的資料庫保持在與來源資料庫相同的最新狀態。

![\[工作流程說明如何將資料從外部 MySQL 資料庫複寫到 Amazon RDS 上的資料庫。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_5.png)


在 Amazon RDS 資料庫上啟動複寫功能所需的許可有其限制，且不供 Amazon RDS 主要使用者使用。因此，請對您的主要引擎版本使用適當的 Amazon RDS 預存程序：
+ [mysql\$1rds\$1set\$1external\$1master (RDS for MySQL 主要版本 8.0 及更低版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ [mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)
+ [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 用來設定複寫，[mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 用來啟動複寫

### 啟動複寫
<a name="mysql-importing-data-reduced-downtime-start-replication"></a>

在任務 1 中，[當您設定複寫選項時](#mysql-importing-data-reduced-downtime-set-replication-options)，您會開啟二進位記錄，並為來源資料庫設定唯一的伺服器 ID。現在，您可將 Amazon RDS 資料庫設為複本，並將即時資料庫設為來源複寫執行個體。

1. 在 Amazon RDS 主控台中，將託管來源資料庫之伺服器的 IP 位址，新增至 Amazon RDS 資料庫的 VPC 安全群組。如需 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的[設定安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

   您可能還需要設定本機網路，以允許從 Amazon RDS 資料庫的 IP 位址建立連線，使其能與來源執行個體通訊。若要尋找 Amazon RDS 資料庫的 IP 位址，請使用 `host` 命令：

   ```
   host host_name
   ```

   *host\$1name* 是來自 Amazon RDS 資料庫端點的 DNS 名稱，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可在 Amazon RDS 主控台的資料庫執行個體詳細資訊中找到端點值。

1. 使用您選擇的用戶端，連線至來源執行個體，然後建立複寫作業所需的使用者。此帳戶只供複寫作業使用，務必限制其存取您的網域，以提升安全性。下列命令為範例：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
指定此處所顯示提示以外的憑證，作為安全最佳實務。

1. 若為來源執行個體，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。舉例來說，若要將所有資料庫的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的「`repl_user`」使用者，請發出下列命令：

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 使 Amazon RDS 資料庫成為複本。使用適當的 Amazon RDS 預存程序，以主要使用者身分連線至 Amazon RDS 資料庫，並將來源資料庫識別為來源複寫執行個體：
   + [mysql\$1rds\$1set\$1external\$1master (RDS for MySQL 主要版本 8.0 及更低版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master)
   + [mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source)

   如果您有 SQL 格式的備份檔，請使用您在步驟 4 中所確定的主控端日誌檔案名稱和主控端日誌位置。如果您使用的是分隔符號文字格式，請使用您在建立備份檔案時確認的名稱和位置。以下是範例命令：

   **MySQL 8.4 和更高版本**

   ```
   CALL mysql.rds_set_external_source ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MySQL 8.0 和較低版本**

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
指定此處所顯示提示以外的憑證，作為安全最佳實務。

1. 在 Amazon RDS 資料庫上，若要啟動複寫，請執行下列使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 預存程序的命令：

   ```
   CALL mysql.rds_start_replication;
   ```

1. 在 Amazon RDS 資料庫上，執行 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令，以判斷複本是否為來源複寫執行個體的最新狀態。`SHOW REPLICA STATUS` 命令的結果包括 `Seconds_Behind_Master` 欄位。若 `Seconds_Behind_Master` 欄位傳回的值為 0，即表示複本已是來源複寫執行個體的最新狀態。
**注意**  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

1. 在 Amazon RDS 資料庫處於最新狀態之後，請開啟自動備份，如此您就可以在需要時還原該資料庫。您可以使用 [Amazon RDS 主控台](https://console.aws.amazon.com/rds/)來開啟或修改 Amazon RDS 資料庫的自動備份。如需詳細資訊，請參閱[備份簡介](USER_WorkingWithAutomatedBackups.md)。

## 任務 5：將即時應用程式重新導向至 Amazon RDS 執行個體
<a name="mysql-importing-data-reduced-downtime-redirect-app"></a>

在 MySQL 資料庫處於來源複寫執行個體的最新狀態之後，現在您可以更新即時應用程式，以使用 Amazon RDS 執行個體。

![\[說明如何停止複寫並將即時應用程式導向至 Amazon RDS 上的資料庫的工作流程。\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/MigrateMySQLToRDS_6.png)


### 將您的即時應用程式重新導向至 MySQL 資料庫並停止複寫
<a name="mysql-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. 若要新增 Amazon RDS 資料庫的 VPC 安全群組，請新增託管應用程式之伺服器的 IP 地址。如需有關修改 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的[設定安全群組規則](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

1. 確認 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令結果中的 `Seconds_Behind_Master` 欄位為 0，這表示複本為來源複寫執行個體的最新狀態。

   ```
   SHOW REPLICA STATUS;
   ```
**注意**  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

1. 交易完成時關閉所有與此來源的連線。

1. 更新您的應用程式，以使用 Amazon RDS 資料庫。這裡所謂的更新，通常包括變更連線設定，以識別 Amazon RDS 資料庫的主機名稱和連接埠、要與其連線的使用者帳戶和密碼，以及要使用的資料庫。

1. 連線到資料庫執行個體。

   對至多可用區域資料庫叢集，請連線至寫入器資料庫執行個體。

1. 執行下列使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序的命令，停止 Amazon RDS 執行個體的複寫：

   ```
   CALL mysql.rds_stop_replication;
   ```

1. 在您的 Amazon RDS 資料庫上使用適當的 Amazon RDS 預存程序，將複寫組態重設，讓此執行個體不再識別為複本：
   +  [mysql\$1rds\$1reset\$1external\$1master (RDS for MySQL 主要版本 8.0 和較低版本)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 
   + [mysql.rds\$1reset\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source)

   **MySQL 8.4 和更高版本**

   ```
   CALL mysql.rds_reset_external_source;
   ```

   **MySQL 8.0 和較低版本**

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. 開啟其他 Amazon RDS 功能，例如多可用區域支援和僅供讀取複本。如需詳細資訊，請參閱[設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)及[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

# 匯入任何 Amazon RDS for MySQL 資料庫執行個體來源的資料
<a name="mysql-importing-data-any-source"></a>

使用 Amazon RDS，您可以將現有的 MySQL 資料從任何來源遷移至 RDS for MySQL 資料庫執行個體。您可以將資料從內部部署資料庫、其他雲端提供者或現有的 RDS for MySQL 資料庫執行個體傳輸到目標 RDS for MySQL 資料庫執行個體。透過此功能，您可以合併資料庫、實作災難復原解決方案，或是從自我管理的資料庫轉換。常見案例包括從自我託管 MySQL 伺服器移至完全受管的 Amazon RDS 資料庫執行個體、將多個 MySQL 資料庫合併為單一資料庫執行個體，或使用生產資料建立測試環境。以下各節提供使用 `mysqldump`、備份檔案或複寫等方法來匯入 MySQL 資料的逐步說明。

## 步驟 1：建立一般檔案，其中需包含要載入的資料
<a name="mysql-importing-data-any-source-create-flat-files"></a>

使用逗號分隔值 (CSV) 等通用格式存放要載入的資料。每個資料表必須擁有各自的檔案 - 您無法將不同資料表的資料結合為同一檔案。以對應資料表的相同名稱命名各個檔案。副檔名可隨意指定。例如，如果資料表名稱為 `sales`，則檔案名稱可以是 `sales.csv` 或 `sales.txt`。

可以的話，依照預計載入之資料表的主索引鍵排序資料。這樣可以大幅縮短載入時間，並將磁碟儲存空間需求降至最低。

檔案越小，此程序的速度就會越快，效率越高。如有個別檔案未壓縮前的大小大於 1 GiB，請將檔案分割成多個檔案，再分別載入。

在泛 Unix 系統 (包括 Linux) 上，使用 `split` 命令。舉例來說，下列命令會將 `sales.csv` 檔案分割成多個小於 1 GiB 的檔案，且只會於分行處分割 (-C 1024m)。新檔案的名稱包含遞增數值尾碼。下列命令會產生具有 `sales.part_00` 和 `sales.part_01` 等名稱的檔案。

```
split -C 1024m -d sales.csv sales.part_ 
```

其他作業系統也有類似的公用程式可用。

您可以將一般檔案存放在任何位置。不過，當您在[步驟 5](#mysql-importing-data-any-source-load-data) 中載入資料時，您必須從檔案所在的相同位置叫用 `mysql` Shell，或使用您在執行 `LOAD DATA LOCAL INFILE` 時的檔案絕對路徑。

## 步驟 2：禁止任何應用程式存取目標資料庫執行個體
<a name="mysql-importing-data-any-source-stop-apps"></a>

開始載入大量資料前，請先禁止所有應用程式活動存取您預計要載入資料的目標資料庫執行個體。如果有其他工作階段會修改要載入或參考的資料表，我們尤其建議執行這項操作。這麼做可以降低載入期間違反限制條件的風險，並提升載入效能。此外，還可以將資料庫執行個體還原至載入前的時間點，以免遺失非載入作業程序所做的變更。

當然，這可能無法盡如人願，或可能不切實際。如果您無法在載入作業前停止應用程式存取資料庫執行個體，請採取因應措施，確保資料的可用性與完整性。所需的確切步驟會因特定使用案例與現場需求而異。

## 步驟 3：建立資料庫快照
<a name="mysql-importing-data-any-source-create-snapshot"></a>

如果您預計要載入資料的新資料庫執行個體內沒有資料，您可略過此步驟。否則，建議您在資料載入前後，都要建立目標 Amazon RDS 資料庫執行個體的資料庫快照。Amazon RDS 資料庫快照是您資料庫執行個體的完整備份，可用來將您的資料庫執行個體還原至已知狀態。啟動資料庫快照作業時，資料庫執行個體的輸入/輸出操作會在資料庫備份時暫停。

若在載入前先建立資料庫快照，一旦有需要，就能將資料庫還原至載入前的狀態。若能在載入後立即拍攝資料庫快照，萬一發生事故，就不必重新載入資料。您也可以在載入後使用資料庫快照將資料匯入新的資料庫執行個體中。

下列範例會執行 AWS CLI [create-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-snapshot.html) 命令來建立`AcmeRDS`執行個體的資料庫快照，並為資料庫快照提供識別符 `"preload"`。

針對 Linux、macOS 或 Unix：

```
aws rds create-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

在 Windows 中：

```
aws rds create-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

您也可以使用從資料庫快照還原的功能，建立試轉用的測試資料庫執行個體，或復原載入期間所做的變更。

請注意，如從資料庫快照還原資料庫，系統會建立新的資料庫執行個體，且如同所有資料庫執行個體一樣，該執行個體會具備獨一無二的識別碼與端點。若要還原資料庫執行個體，且不會變更端點，請先刪除資料庫執行個體，如此才能重新使用端點。

舉例來說，若要建立試轉或其他測試所需的資料庫執行個體，您必須賦予資料庫執行個體專屬識別符。在此例中，識別符是 `AcmeRDS-2`。範例使用與 `AcmeRDS-2` 關聯的端點連線至資料庫執行個體。如需詳細資訊，請參閱 [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)。

對於 Linux、macOS 或 Unix：

```
aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS-2 \
    --db-snapshot-identifier preload
```

在 Windows 中：

```
aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS-2 ^
    --db-snapshot-identifier preload
```

若要重新使用現有端點，請先刪除資料庫執行個體，然後指定相同的識別碼給還原的資料庫。如需詳細資訊，請參閱 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html)。

下列範例也會在刪除資料庫執行個體前擷取其最終資料庫快照。此為選用操作，但建議您採用。

對於 Linux、macOS 或 Unix：

```
aws rds delete-db-instance \
    --db-instance-identifier AcmeRDS \
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

在 Windows 中：

```
aws rds delete-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

## 步驟 4 (選用)：關閉 Amazon RDS 自動備份
<a name="mysql-importing-data-any-source-turn-off-automated-backups"></a>

**警告**  
如果您需要執行時間點復原，請勿關閉自動備份。

關閉自動備份可產生最佳化效能，但並非資料載入作業的必要功能。關閉自動備份會清除所有現有的備份。因此，在您關閉自動備份後，就無法執行時間點復原。關閉自動備份不會影響手動資料庫快照。所有現有手動資料庫快照仍可用於復原作業。

關閉自動備份功能可將載入時間減少約 25%，並可降低載入期間所需的儲存空間。如果您預計載入資料的新資料庫執行個體不含任何資料，則要加快載入速度，並避免備份產生額外的儲存空間需求，關閉備份功能是最簡單的方式。不過，在某些情況下，您可能會計劃載入已包含資料的資料庫執行個體。如果是這樣，請權衡關閉備份功能的好處，以及無法執行時間點復原功能的影響。

預設情況下，資料庫執行個體會開啟自動備份功能 (保留期為 1 天)。若要關閉自動備份，請將備份保留期設為零。載入後，您可以將備份保留期設為非零的值，以重新開啟自動備份功能。若要開啟或關閉備份功能，Amazon RDS 會關閉資料庫執行個體，然後重新啟動，以便開啟或關閉 MySQL 記錄功能。

執行 AWS CLI `modify-db-instance`命令將備份保留期設定為零，並立即套用變更。將保留期設為 0 需要重新啟動資料庫執行個體，請靜待重新啟動作業完成，再繼續操作。如需詳細資訊，請參閱 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)。

對於 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --apply-immediately \
    --backup-retention-period 0
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --apply-immediately ^
    --backup-retention-period 0
```

您可以使用 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令來檢查資料庫執行個體的狀態。下列範例顯示 `AcmeRDS` 資料庫執行個體的資料庫執行個體狀態：

```
aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"
```

當資料庫執行個體狀態為 `available` 時，您即可繼續進行下一個步驟。

## 步驟 5：載入資料
<a name="mysql-importing-data-any-source-load-data"></a>

若要將資料列從一般檔案讀取至資料庫資料表，請使用 MySQL `LOAD DATA LOCAL INFILE` 陳述式。

**注意**  
您必須從一般檔案所在的相同位置叫用 `mysql` Shell，或使用您在執行 `LOAD DATA LOCAL INFILE` 時的檔案絕對路徑。

下列範例說明如何從名為 `sales.txt` 的檔案將資料載入至資料庫中名為 `Sales` 的資料表：

```
mysql> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\';
Query OK, 1 row affected (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
```

如需 `LOAD DATA` 陳述式的詳細資訊，請參閱 MySQL 文件中的 [LOAD DATA 陳述式](https://dev.mysql.com/doc/refman/8.4/en/load-data.html)。

## 步驟 6：重新開啟 Amazon RDS 自動備份
<a name="mysql-importing-data-any-source-turn-on-automated-backups"></a>

如果您在[步驟 4](#mysql-importing-data-any-source-turn-off-automated-backups) 關閉了 Amazon RDS 自動備份，在載入完成後，您可以將備份保留期間設回載入前的值，以重新開啟 Amazon RDS 自動備份。如步驟 4 所述，Amazon RDS 會重新啟動資料庫執行個體，所以短暫停機是正常現象。

下列範例會執行 AWS CLI [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) `AcmeRDS` 命令，以開啟資料庫執行個體的自動備份，並將保留期間設定為一天：

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --backup-retention-period 1 \
    --apply-immediately
```

在 Windows 中：

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --backup-retention-period 1 ^
    --apply-immediately
```

# 在 Amazon RDS 中使用 MySQL 複寫
<a name="USER_MySQL.Replication"></a>

您通常會使用僅供讀取複本來設定 Amazon RDS 資料庫執行個體間的複寫。如需僅供讀取複本的一般資訊，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。如需在 Amazon RDS for MySQL 上使用僅供讀取複本的特定資訊，請參閱[使用 MySQL 僅供讀取複本](USER_MySQL.Replication.ReadReplicas.md)。

對於使用 RDS for MySQL 的複寫，您可以使用全域交易識別碼 (GTID)。如需詳細資訊，請參閱 [使用 GTID 式複寫](mysql-replication-gtid.md)。

您也可以在 RDS for MySQL 資料庫執行個體及 Amazon RDS 外部的 MariaDB 或 MySQL 執行個體之間，設定複寫。如需使用外部來源設定複寫的詳細資訊，請參閱 [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

對於以上任何複寫選項，您可以使用基於列的複寫、基於陳述式或混合式複寫。基於列的複寫只會複寫 SQL 陳述式所變更的列。基於陳述式的複寫會複寫整個 SQL 陳述式。混合式複寫會盡可能使用基於陳述式的複寫，但是當基於陳述式的複寫有不安全的 SQL 陳述式執行時，則會切換到基於列的複寫。在大多數情況下，建議使用混合式複寫。資料庫執行個體的二進位日誌格式決定複寫是基於列、基於陳述式或混合式。如需有關設定二進位日誌格式的資訊，請參閱[為單一可用區資料庫設定 RDS for MySQL 二進位記錄](USER_LogAccess.MySQL.BinaryFormat.md)。

**注意**  
您可將複寫作業設定為從 Amazon RDS 外部的 MariaDB 或 MySQL 執行個體匯入資料庫，或者設定為將資料庫匯出至這類執行個體。如需詳細資訊，請參閱[以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md)及[使用複寫從 MySQL 資料庫執行個體匯出資料](MySQL.Procedural.Exporting.NonRDSRepl.md)。

從快照還原資料庫執行個體或執行時間點復原後，您可以在 RDS 主控台檢視來源資料庫中上次復原的 binlog 位置。在**日誌與事件**底下，輸入 **binlog**。binlog 位置會出現在**系統備註**底下。

**Topics**
+ [

# 使用 MySQL 僅供讀取複本
](USER_MySQL.Replication.ReadReplicas.md)
+ [

# 使用 GTID 式複寫
](mysql-replication-gtid.md)
+ [

# 使用外部來源執行個體設定二進位日誌檔案位置複寫
](MySQL.Procedural.Importing.External.Repl.md)
+ [

# 為 Amazon RDS for MySQL 設定多來源複寫
](mysql-multi-source-replication.md)

# 使用 MySQL 僅供讀取複本
<a name="USER_MySQL.Replication.ReadReplicas"></a>

接下來，您可以找到在 RDS for MySQL 上使用僅供讀取複本的特定資訊。如需僅供讀取複本的一般資訊及使用說明，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

如需 MySQL 僅供讀取複本的詳細資訊，請參閱下列主題。
+ [使用 MySQL 設定複寫篩選條件](USER_MySQL.Replication.ReadReplicas.ReplicationFilters.md)
+ [透過 MySQL 設定延遲複寫](USER_MySQL.Replication.ReadReplicas.DelayReplication.md)
+ [使用 MySQL 更新僅供讀取複本](USER_MySQL.Replication.ReadReplicas.Updates.md)
+ [使用 MySQL 處理多可用區域僅供讀取複本的部署](USER_MySQL.Replication.ReadReplicas.MultiAZ.md)
+ [搭配 RDS for MySQL 使用階層式僅供讀取複本](USER_MySQL.Replication.ReadReplicas.Cascading.md)
+ [監控 MySQL 僅供讀取複本的複寫延遲](USER_MySQL.Replication.ReadReplicas.Monitor.md)
+ [透過 MySQL 僅供讀取複本啟動及停用複寫作業](USER_MySQL.Replication.ReadReplicas.StartStop.md)
+ [對 MySQL 僅供讀取複本問題進行故障診斷](USER_ReadRepl.Troubleshooting.md)

## 使用 MySQL 設定僅供讀取複本
<a name="USER_MySQL.Replication.ReadReplicas.Configuration"></a>

在 MySQL 資料庫執行個體可做為複製來源之前，請務必在來源資料庫執行個體上啟用自動備份。若要這麼做，請將備份保留期設定為 0 以外的值。若僅供讀取複本能讓其他僅供讀取複本做為來源資料庫執行個體，則亦適用此要求。執行 MySQL 任一版本的僅供讀取複本皆支援自動備份。您可以根據二進位日誌座標來設定複寫作業，以供 MySQL 資料庫執行個體使用。

您可以在下列版本上使用全域交易識別符 (GTID) 設定複寫：
+ RDS for MySQL 5.7.44 版和更高的 5.7 版
+ RDS for MySQL 8.0.28 版和更高的 8.0 版
+ RDS for MySQL 8.4.3 版和更高的 8.4 版

如需詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

您可以從相同區域內的一個資料庫執行個體建立至多 15 個僅供讀取複本。若希望複寫作業順利運作，每個僅供讀取複本具備的運算和儲存資源數量應與來源資料庫執行個體相同。若您擴展來源資料庫執行個體，也要擴展僅供讀取複本。

RDS for MySQL 支援階層式僅供讀取複本。若要了解如何設定階層式僅供讀取複本，請參閱 [搭配 RDS for MySQL 使用階層式僅供讀取複本](USER_MySQL.Replication.ReadReplicas.Cascading.md)。

您可以同時執行多個僅供讀取複本建立，並刪除參考相同來源資料庫執行個體的動作。執行這些動作時，請將每個來源執行個體的僅供讀取複本數目限制在 15 個之內。

MySQL 資料庫執行個體的僅供讀取複本不能使用低於其來源資料庫執行個體的資料庫引擎版本。

### 準備使用 MyISAM 的 MySQL 資料庫執行個體
<a name="USER_MySQL.Replication.ReadReplicas.Configuration-MyISAM-Instances"></a>

如果 MySQL 資料庫執行個體採用 MyISAM 等非交易儲存引擎，便需要執行下列步驟，藉以成功設定僅供讀取複本。請務必遵循以下步驟，才能確保僅供讀取複本的資料複本一致。然而，如果所有資料表均採用 InnoDB 等交易儲存引擎，就不需要進行這些步驟。

1. 在來源資料庫執行個體的非交易資料表上，停止所有資料處理語言 (DML) 和資料定義語言 (DDL) 操作，接著等候停止作業完成。SELECT 陳述式可以繼續執行。

1. 清空並鎖定來源資料庫執行個體中的資料表。

1. 使用以下各節的其中一種方法來建立僅供讀取複本。

1. 透過 `DescribeDBInstances` API 操作等方式，檢查僅供讀取複本的建立進度。僅供讀取複本可供使用時，請解除鎖定來源資料庫執行個體的資料表，並恢復資料庫正常操作。

# 使用 MySQL 設定複寫篩選條件
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters"></a>

您可以使用複寫篩選條件來指定要與僅供讀取複本一起複寫的資料庫和資料表。複寫篩選條件可以包含複寫中的資料庫和資料表，或將其排除在複寫之外。

下列是複寫篩選條件的一些應用案例：
+ 要縮小僅供讀取複本的大小。使用複寫篩選，您可以排除僅供讀取複本不需要的資料庫和資料表。
+ 基於安全考量，要將資料庫和資料表從僅供讀取複本中排除。
+ 為不同僅供讀取複本的特定應用案例複寫不同的資料庫和資料表。例如，您可以使用特定僅供讀取複本進行分析或分區。
+ 對於在不同的 中具有僅供讀取複本的資料庫執行個體 AWS 區域， 會在不同的 中複寫不同的資料庫或資料表 AWS 區域。

**注意**  
您也可以使用複寫篩選條件來指定要與主要 MySQL 資料庫執行個體 (設定為輸入複寫拓撲中的複寫) 一起複寫的資料庫和資料表。如需此組態的詳細資訊，請參閱「[使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)」。

**Topics**
+ [

## 設定適用於 RDS for MySQL 的複寫篩選參數
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Configuring)
+ [

## RDS for MySQL 的複寫篩選限制
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Limitations)
+ [

## RDS for MySQL 的複寫篩選範例
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Examples)
+ [

## 檢視僅供讀取複本的複寫篩選條件
](#USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Viewing)

## 設定適用於 RDS for MySQL 的複寫篩選參數
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Configuring"></a>

要設定複寫篩選條件，請在僅供讀取複本上設定下列複寫篩選參數：
+ `replicate-do-db` – 將變更複寫至指定的資料庫。當您為僅供讀取複本設定此參數時，只會複寫參數中指定的資料庫。
+ `replicate-ignore-db` – 請勿將變更複寫至指定的資料庫。為僅供讀取複本設定 `replicate-do-db` 參數時，不會評估此參數。
+ `replicate-do-table` – 將變更複製到指定的資料表。當您為僅供讀取複本設定此參數時，只會複寫參數中指定的資料表。此外，設定 `replicate-do-db` 或 `replicate-ignore-db` 參數時，請務必使用僅供讀取複本將包含指定資料表的資料庫納入複寫中。
+ `replicate-ignore-table` – 請勿將變更複寫至指定的資料表。為僅供讀取複本設定 `replicate-do-table` 參數時，不會評估此參數。
+ `replicate-wild-do-table` – 根據指定的資料庫和資料表名稱模式複寫資料表。支援 `%` 和 `_` 萬用字元。設定 `replicate-do-db` 或 `replicate-ignore-db` 參數時，請務必使用僅供讀取複本將包含指定資料表的資料庫納入複寫中。
+ `replicate-wild-ignore-table` – 請勿根據指定的資料庫和資料表名稱模式複寫資料表。支援 `%` 和 `_` 萬用字元。為僅供讀取複本設定 `replicate-do-table` 或 `replicate-wild-do-table` 參數時，不會評估此參數。

系統會按照列出的順序對參數進行評估。如需有關這些參數如何運作的詳細資訊，請參閱 MySQL 文件：
+ 如需一般資訊，請參閱[複本伺服器選項和變數](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html)。
+ 如需有關如何評估資料庫複寫篩選參數的資訊，請參閱[評估資料庫層級複寫和二進位日誌記錄選項](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-db-options.html)。
+ 如需如何評估資料表複寫篩選參數的詳細資訊，請參閱[評估資料表層級複寫選項](https://dev.mysql.com/doc/refman/8.0/en/replication-rules-table-options.html)。

根據預設，這些參數中的每個參數都有一個空值。在每個僅供讀取複本上，您可以使用這些參數來設定、變更和刪除複寫篩選條件。當您設定其中一個參數時，請使用逗號將每個篩選條件與其他篩選條件分隔。

您可以在 `%` 和 `_` 參數中使用 `replicate-wild-do-table` 和 `replicate-wild-ignore-table` 萬用字元。`%` 萬用字元等同於任意數目的字元，而 `_` 萬用字元只會等同於一個字元。

來源資料庫執行個體的二進位記錄格式對複寫非常重要，因為它會決定資料變更的記錄。`binlog_format` 參數的設定會決定複寫是以資料列為基礎還是以陳述式為基礎。如需詳細資訊，請參閱 [為單一可用區資料庫設定 RDS for MySQL 二進位記錄](USER_LogAccess.MySQL.BinaryFormat.md)。

**注意**  
無論來源資料庫執行個體上的 `binlog_format` 設定為何，所有資料定義語言 (DDL) 陳述式都會複寫為陳述式。

## RDS for MySQL 的複寫篩選限制
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Limitations"></a>

下列限制適用於 RDS for MySQL 的複寫篩選：
+ 每個複寫篩選參數都有 2,000 個字元的限制。
+ 參數值的複寫篩選條件中不支援逗號。在參數清單中，逗號只能做為值分隔符號。例如，不支援 `ParameterValue='`a,b`'`，但支援 `ParameterValue='a,b'`。
+ 不支援用於二進位日誌篩選的 MySQL `--binlog-do-db` 和 `--binlog-ignore-db` 選項。
+ 複寫篩選不支援 XA 交易。

  如需詳細資訊，請參閱 MySQL 文件中的 [XA 交易的限制](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)。

## RDS for MySQL 的複寫篩選範例
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Examples"></a>

若要設定僅供讀取複本的複寫篩選，請修改與僅供讀取複本關聯之參數群組中的複寫篩選參數。

**注意**  
您無法修改預設參數群組。如果僅供讀取複本使用預設參數群組，請建立新的參數群組，並將它與僅供讀取複本建立關聯。如需資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

您可以使用 AWS 管理主控台 AWS CLI或 RDS API 在參數群組中設定參數。如需有關設定參數的詳細資訊，請參閱 [修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。當您在參數群組中設定參數時，與參數群組關聯的所有資料庫執行個體都會使用參數設定。如果您在參數群組中設定複寫篩選參數，請確定參數群組僅與僅供讀取複本相關聯。將來源資料庫執行個體的複寫篩選參數保留空白。

下列範例會使用 AWS CLI設定參數。這些範例將 `ApplyMethod` 設定為 `immediate`，以便在 CLI 命令完成後立即發生參數變更。如果您想要在僅供讀取複本重新啟動後套用擱置變更，請將設定 `ApplyMethod` 為 `pending-reboot`。

下列範例會設定複寫篩選條件：
+ [Including databases in replication](#rep-filter-in-dbs-mysql)
+ [Including tables in replication](#rep-filter-in-tables-mysql)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mysql)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mysql)
+ [Excluding tables from replication](#rep-filter-ex-tables-mysql)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mysql)<a name="rep-filter-in-dbs-mysql"></a>

**Example 在複寫中包含資料庫**  
下列範例包含複寫中的 `mydb1` 和 `mydb2` 資料庫。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-mysql"></a>

**Example 在複寫中包含資料表**  
下列範例包含複寫資料庫 `table1` 中的 `table2` 和 `mydb1` 資料表。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
```<a name="rep-filter-in-tables-wildcards-mysql"></a>

**Example 使用萬用字元在複寫中包含資料表**  
下列範例包含複寫時在資料庫 `order` 中名稱開頭為 `return` 和 `mydb` 的資料表。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
```<a name="rep-filter-ex-dbs-mysql"></a>

**Example 從複寫中排除資料庫**  
下列範例會從複寫中排除 `mydb5` 和 `mydb6` 資料庫。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-mysql"></a>

**Example 從複寫中排除資料表**  
下列範例會從複寫中排除資料庫 `mydb5` 中的資料表 `table1` 和資料庫 `mydb6` 中的 `table2`。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
```<a name="rep-filter-ex-tables-wildcards-mysql"></a>

**Example 使用萬用字元從複寫中排除資料表**  
下列範例會從複寫中排除資料庫 `order` 中名稱開頭為 `return` 和 `mydb7` 的資料表。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```
在 Windows 中：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"
```

## 檢視僅供讀取複本的複寫篩選條件
<a name="USER_MySQL.Replication.ReadReplicas.ReplicationFilters.Viewing"></a>

您可以使用下列方式檢視僅供讀取複本的複寫篩選條件：
+ 檢查與僅供讀取複本關聯之參數群組中複寫篩選參數的設定。

  如需說明，請參閱「[在 Amazon RDS 中檢視資料庫參數群組的參數值](USER_WorkingWithParamGroups.Viewing.md)」。
+ 在 MySQL 用戶端中，連線至僅供讀取複本並執行 `SHOW REPLICA STATUS` 陳述式。

  在輸出中，下列欄位會顯示僅供讀取複本的複寫篩選條件：
  + `Replicate_Do_DB`
  + `Replicate_Ignore_DB`
  + `Replicate_Do_Table`
  + `Replicate_Ignore_Table`
  + `Replicate_Wild_Do_Table`
  + `Replicate_Wild_Ignore_Table`

  如需有關這些欄位的詳細資訊，請參閱 MySQL 文件中的[檢查複寫狀態](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html)。

# 透過 MySQL 設定延遲複寫
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication"></a>

您可以將延遲複寫做為災難復原的策略。利用延遲複寫功能來指定最短時間 (以秒為單位)，即可延遲來源到僅供讀取複本的複寫作業。在發生損毀之時 (例如不小心刪除資料表)，若要快速完成事後復原作業，則請執行下列步驟：
+ 停止僅供讀取複本的複寫作業，以免系統將造成損毀的變更內容傳送到該複本。

  使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序來停止複寫作業。
+ 啟動複寫作業並指定日誌檔案位置，則當系統複寫到該位置時，即會自動停止作業。

  透過 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程式，藉此在發生損毀前指定日誌檔案位置。
+ 若要將僅供讀取複本提升為新的來源資料庫執行個體，請參照[提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)中的指示。

**注意**  
在 RDS for MySQL 8.4 上，MySQL 8.4.3 和更高版本支援延遲複寫。在 RDS for MySQL 8.0 版上，MySQL 8.0.28 版和更新版本可支援延遲複寫。在 RDS for MySQL 5.7 上，MySQL 5.7.44 和更高版本支援延遲複寫。
使用預存程序來設定延遲複寫。您無法使用 AWS 管理主控台 AWS CLI、 或 Amazon RDS API 設定延遲複寫。
您可以在下列版本的延遲複寫組態中使用基於全域交易識別符 (GTID) 的複寫：  
RDS for MySQL 5.7.44 版和更高的 5.7 版
RDS for MySQL 8.0.28 版和更高的 8.0 版
RDS for MySQL 8.4.3 版和更高的 8.4 版
如果您使用 GTID 式複寫，請使用 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序，而非 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序。如需 GTID 式複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

**Topics**
+ [

## 在僅供讀取複本建立期間設定延遲複寫
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.ReplicaCreation)
+ [

## 修改現有僅供讀取複本的延遲複寫
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.ExistingReplica)
+ [

## 設定位置以停止僅供讀取複本的複寫作業
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.StartUntil)
+ [

## 提升僅供讀取複本
](#USER_MySQL.Replication.ReadReplicas.DelayReplication.Promote)

## 在僅供讀取複本建立期間設定延遲複寫
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.ReplicaCreation"></a>

若要為任何未來從資料庫執行個體建立的僅供讀取複本設定延遲複寫，請利用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 參數來執行 `target delay` 預存程序。

**在僅供讀取複本建立期間設定延遲複寫**

1. 透過 MySQL 用戶端，以主要使用者的身分連接至 MySQL 資料庫執行個體，該執行個體將成為僅供讀取複本的來源。

1. 利用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 參數來執行 `target delay` 預存程序。

   例如，您可以執行下列預存程序，藉此設定複寫至少會延遲一小時 (3600 秒)，並將該設定套用至目前資料庫執行個體所建立的任何僅供讀取複本。

   ```
   call mysql.rds_set_configuration('target delay', 3600);
   ```
**注意**  
執行此預存程序後，您使用 AWS CLI 或 Amazon RDS API 建立的任何僅供讀取複本都會設定為複寫延遲指定的秒數。

## 修改現有僅供讀取複本的延遲複寫
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

若要修改現有僅供讀取複本的延遲複寫，請執行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 預存程序。

**修改現有僅供讀取複本的延遲複寫**

1. 透過 MySQL 用戶端，以主要使用者的身分連接至僅供讀取複本。

1. 使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序來停止複寫作業。

1. 執行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 預存程序。

   例如，您可以執行下列預存程序，藉此設定複寫至少會延遲一小時 (3600 秒)，並將該設定套用至僅供讀取複本。

   ```
   call mysql.rds_set_source_delay(3600);
   ```

1. 使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 預存程序來啟動複寫作業。

## 設定位置以停止僅供讀取複本的複寫作業
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.StartUntil"></a>

停止僅供讀取複本的複寫作業後，您可以使用 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序來啟動複寫，然後在特定的二進位日誌檔案位置停止複寫。

**啟動僅供讀取複本的複寫作業，並在特定位置停止複寫**

1. 透過 MySQL 用戶端，以主要使用者的身分連接至來源 MySQL 資料庫執行個體。

1. 執行 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序。

   以下範例會啟動複寫並複寫變更，直到達到 `120` 二進位日誌檔案中的位置 `mysql-bin-changelog.000777` 為止。若要使用災難復原功能，請在發生損毀前將位置預設為 `120`。

   ```
   call mysql.rds_start_replication_until(
     'mysql-bin-changelog.000777',
     120);
   ```

達到停止點時，複寫作業即會自動停止。而且，系統還會產生以下 RDS 事件：`Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure`。

## 提升僅供讀取複本
<a name="USER_MySQL.Replication.ReadReplicas.DelayReplication.Promote"></a>

使用災難復原功能時，您可以參照中的指示，在複寫作業停止後將僅供讀取複本提升為新的來源資料庫執行個體。如需提升僅供讀取複本的相關資訊，請參閱 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。

# 使用 MySQL 更新僅供讀取複本
<a name="USER_MySQL.Replication.ReadReplicas.Updates"></a>

僅供讀取複本專門用來支援讀取查詢，但建議您不定期進行更新。例如，您可能需要新增索引，將特定查詢類型存取複本的速度最佳化。

雖然您可以透過在資料庫參數群組中，針對讀取複本將 `read_only` 參數設為 `0` 來啟用更新，但我們建議您不要這樣做，因為這樣可能會在讀取複本與來源資料庫執行個體不相容的情況下造成問題。對於維護操作，建議您使用藍/綠部署。如需詳細資訊，請參閱[使用藍/綠部署進行資料庫更新](blue-green-deployments.md)。

如果您停用僅供讀取複本的唯讀功能，請盡快將 `read_only` 參數的值恢復為 `1`。

# 使用 MySQL 處理多可用區域僅供讀取複本的部署
<a name="USER_MySQL.Replication.ReadReplicas.MultiAZ"></a>

您可以從單一可用區域或多可用區域的資料庫執行個體部署建立僅供讀取複本。您可使用異地同步備份部署來改善重要資料的耐用性和可用性，但無法使用異地同步備份部署來處理僅供讀取的查詢。反之，您可從高流量的多可用區域資料庫執行個體建立僅供讀取複本，藉此卸載僅供讀取的查詢。若異地同步備份部署的來源執行個體容錯移轉為次要，任何相關聯的僅供讀取複本會自動將複寫作業來源切換成次要 (現為主要)。如需詳細資訊，請參閱 [設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)。

您可以建立僅供讀取複本並用作多可用區域資料庫執行個體。Amazon RDS 會在另一個可用區域中建立您的複本的待命複本，以獲得該複本的容錯移轉支援。建立您的僅供讀取複本做為多可用區域資料庫執行個體，與來源資料庫是否為多可用區域資料庫執行個體無關。

# 搭配 RDS for MySQL 使用階層式僅供讀取複本
<a name="USER_MySQL.Replication.ReadReplicas.Cascading"></a>

RDS for MySQL 支援階層式僅供讀取複本。利用*階層式僅供讀取複本*，您可以擴展讀取，無須增加來源 RDS for MySQL 資料庫執行個體的額外負荷。

利用階層式僅供讀取複本，您的 RDS for MySQL 資料庫執行個體會將資料傳送至鏈結中的第一個僅供讀取複本。之後，該僅供讀取複本會將資料傳送至鏈結中的第二個複本，依此類推。最終結果是鏈結中的所有僅供讀取複本皆具有來自 RDS for MySQL 資料庫執行個體的變更，但並無僅在來源資料庫執行個體上的額外負荷。

您可從來源 RDS for MySQL 資料庫執行個體的鏈結中建立一系列最多三個僅供讀取複本。例如，假設您有一個 RDS for MySQL 資料庫執行個體 `mysql-main`。您可以執行下列作業：
+ 從 `mysql-main` 開始，建立鏈結中的第一個僅供讀取複本 `read-replica-1`。
+ 接下來，從 `read-replica-1`，建立鏈結中的下一個僅供讀取複本 `read-replica-2`。
+ 最後，從 `read-replica-2`，建立鏈結中的第三個僅供讀取複本 `read-replica-3`。

除了 `mysql-main` 系列中的第三個階層式僅供讀取複本之外，您無法建立另一個僅供讀取複本。從 RDS for MySQL 來源資料庫執行個體至一系列階層式僅供讀取複本尾端的完整執行個體系列最多可包含四個資料庫執行個體。

若要使階層式僅供讀取複本可以運作，每個來源 RDS for MySQL 資料庫執行個體都必須開啟自動備份。若要在僅供讀取複本上開啟自動備份，首先建立該僅供讀取複本，然後修改該複本來開啟自動備份。如需詳細資訊，請參閱 [建立僅供讀取複本](USER_ReadRepl.Create.md)。

與任何僅供讀取複本一樣，您可提升作為階層式一部分的僅供讀取複本。從僅供讀取複本鏈結中提升僅供讀取複本將會從鏈結中移除該僅供讀取複本。例如，假設您想要將部分工作負載從 `mysql-main` 資料庫執行個體移至新的執行個體，僅供會計部門使用。假設範例中的三個僅供讀取複本鏈結，您決定提升 `read-replica-2`。該鏈或受到下列影響：
+ 提升 `read-replica-2` 會將其從複寫鏈結中移除。
  + 其現在是一個完整的讀取/寫入資料庫執行個體。
  + 這會持續複寫至 `read-replica-3`，就像在提升之前所做的一樣。
+ 您的 `mysql-main` 會持續複寫至 `read-replica-1`。

如需提升僅供讀取複本的相關詳細資訊，請參閱 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。

# 監控 MySQL 僅供讀取複本的複寫延遲
<a name="USER_MySQL.Replication.ReadReplicas.Monitor"></a>

若為 MySQL 僅供讀取複本，則可以檢視 Amazon RDS `ReplicaLag` 指標，進而監控 Amazon CloudWatch 中的複寫延遲。`ReplicaLag` 指標會回報 `Seconds_Behind_Master` 命令的 `SHOW REPLICA STATUS` 欄位值。

MySQL 複寫延遲的常見原因如下：
+ 網路停機。
+ 在僅供讀取複本上寫入的資料表有不同索引。僅供讀取複本上的 `read_only` 參數設為 `0` 時，若僅供讀取複本與來源資料庫執行個體變得不相容，則複寫可能會中斷。在僅供讀取複本上執行維護作業後，建議您將 `read_only` 參數設回 `1`。
+ 使用非交易儲存引擎 (例如 MyISAM)。複寫功能僅支援 MySQL 上的 InnoDB 儲存引擎。

當 `ReplicaLag` 指標到達 0，複本即已跟上來源資料庫執行個體。如果 `ReplicaLag` 指標傳回 -1，表示複寫目前為非作用中。`ReplicaLag` = -1 相當於 `Seconds_Behind_Master` = `NULL`。

# 透過 MySQL 僅供讀取複本啟動及停用複寫作業
<a name="USER_MySQL.Replication.ReadReplicas.StartStop"></a>

您可呼叫系統預存程序 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)，藉此停止並重新啟動 Amazon RDS 資料庫執行個體的複寫程序。針對長時間操作 (如建立大型索引) 在兩個 Amazon RDS 執行個體間進行複寫時，即可採取此操作。匯入或匯出資料庫時，也必須停止並啟動複寫作業。如需詳細資訊，請參閱[以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md)及[使用複寫從 MySQL 資料庫執行個體匯出資料](MySQL.Procedural.Exporting.NonRDSRepl.md)。

若複寫作業停止連續超過 30 天 (不論手動停止或由於複寫錯誤)，Amazon RDS 會終止來源資料庫執行個體和所有僅供讀取複本間的複寫作業。這樣做的原因在於，避免來源資料庫執行個體的儲存需求增加以及長期容錯移轉。僅供讀取複本資料庫執行個體仍可供使用。然而，無法恢復複寫作業，因為在複寫作業終止後，僅供讀取複本所需的二進位日誌已從來源資料庫執行個體刪除。您可建立新的僅供讀取複本供來源資料庫執行個體使用，以重新建立複寫作業。

# 對 MySQL 僅供讀取複本問題進行故障診斷
<a name="USER_ReadRepl.Troubleshooting"></a>

使用 MySQL DB 時，僅供讀取複本偶爾會出現複寫錯誤，或僅供讀取複本和來源資料庫執行個體間出現資料不一致的情況 (或兩者同時發生)。若您在僅供讀取複本或來源資料庫執行個體失敗的期間，沒有清空部分二進位日誌 (binlog) 事件或 InnoDB 重做日誌，就會出現上述問題。在這種情況下，手動刪除並重新建立僅供讀取複本。如果要降低此情況發生的機率，則可設定以下參數值：`sync_binlog=1` 和 `innodb_flush_log_at_trx_commit=1`。但這些設定可能會降低效能，所以請先測試這些設定所帶來的影響，再於生產環境中實作變更內容。

**警告**  
在與來源資料庫執行個體相關聯的參數群組中，建議保留以下參數值：`sync_binlog=1` 和 `innodb_flush_log_at_trx_commit=1`。這些參數是動態參數。如果您不想使用這些設定，建議在對來源資料庫執行個體執行任何可能導致重新啟動的操作之前，暫時設定這些值。這些操作包括但不限於重新啟動、透過容錯移轉重新啟動、升級資料庫版本，以及變更資料庫執行個體類或其儲存體。這些建議同樣適用於為來源資料庫執行個體建立新的僅供讀取複本時。  
若未遵循此指南的說明操作，會增加僅供讀取複本出現複寫錯誤，或僅供讀取複本和來源資料庫執行個體間出現資料不一致的情況 (或兩者同時發生) 的風險。

MySQL 採用非同步複寫技術，因此，來源資料庫執行個體的 `BinLogDiskUsage` 和僅供讀取複本上的 `ReplicaLag` 預料會偶爾增加。例如，來源資料庫執行個體可同時出現大量寫入操作。相對而言，僅供讀取複本的寫入操作則使用單一輸入/輸出執行緒序列化，這可能導致來源執行個體和僅供讀取複本之間的延遲。如需唯讀複本的詳細資訊，請參閱 MySQL 文件中的[複寫實作詳細資訊](https://dev.mysql.com/doc/refman/8.0/en/replication-implementation-details.html)。

您可執行下列動作，減少來源資料庫執行個體的更新與僅供讀取複本的後續更新間的延遲：
+ 將僅供讀取複本的儲存體大小和資料庫執行個體類別大小，設定為等同於來源資料庫執行個體。
+ 確保來源資料庫執行個體和僅供讀取複本所使用之資料庫參數群組中的參數設定相容。如需詳細資訊和範例，請參閱本節稍後討論的 `max_allowed_packet` 參數。

Amazon RDS 會監控複寫您的僅供讀取複本的狀態，並在複寫因任何原因停止時，將僅供讀取複本執行個體上的 `Replication State` (複寫狀態) 欄位更新為 `Error` (錯誤)。一個可能的範例為，僅供讀取複本上執行的 DML 查詢，與來源資料庫執行個體的更新相衝突。

您可以檢視 `Replication Error` 欄位，藉此檢閱 MySQL 引擎擲出的相關聯錯誤詳細資訊。也會產生指出僅供讀取複本之狀態的事件，包括 [RDS-EVENT-0045](USER_Events.Messages.md#RDS-EVENT-0045)、[RDS-EVENT-0046](USER_Events.Messages.md#RDS-EVENT-0046) 和 [RDS-EVENT-0047](USER_Events.Messages.md#RDS-EVENT-0047)。如需事件和訂閱事件的詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。如果傳回 MySQL 錯誤訊息，請在 [MySQL 錯誤訊息文件](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html)中檢閱錯誤號碼。

其中一個常見問題就是僅供讀取複本的 `max_allowed_packet` 參數值小於來源資料庫執行個體的 `max_allowed_packet` 參數值，因而導致複寫錯誤。`max_allowed_packet` 參數是您可以在資料庫參數群組中設定的自訂參數。您可以使用 `max_allowed_packet` 以指定可以在資料庫上執行的 DML 程式碼的大小上限。在部分案例中，與僅供讀取複本建立關聯之資料庫參數群組中的 `max_allowed_packet` 值，會小於與來源資料庫執行個體建立關聯之資料庫參數群組中的 `max_allowed_packet` 值。在這些情況下，複寫程序可能會擲回錯誤 `Packet bigger than 'max_allowed_packet' bytes` 並停止複寫。若要修正錯誤，可讓來源資料庫執行個體和僅供讀取複本使用具有相同 `max_allowed_packet` 參數值的資料庫參數群組。

可能造成複寫錯誤的其他常見情況包括下列：
+ 寫入僅供讀取複本上的資料表。在某些情況下，您可能會在僅供讀取複本上建立與來源資料庫執行個體索引不同的索引。如果您這樣做，請將 `read_only` 參數設定為 `0` 以建立索引。當寫入僅供讀取複本上的資料表時，若僅供讀取複本與來源資料庫執行個體變得不相容，則複寫可能會中斷。在僅供讀取複本上執行維護作業後，建議您將 `read_only` 參數設回 `1`。
+  使用非交易儲存引擎 (例如 MyISAM)。僅供讀取複本需要交易儲存引擎。複寫功能僅支援 MySQL 上的 InnoDB 儲存引擎。
+  使用不安全的非確定性查詢 (例如 `SYSDATE()`)。如需詳細資訊，請參閱[二進位日誌中安全和不安全陳述式的判定](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)。

若您認為能夠安全略過錯誤，請遵循[略過 RDS for MySQL 目前的複寫錯誤](Appendix.MySQL.CommonDBATasks.SkipError.md)中所述的步驟。否則，您可以先刪除僅供讀取複本。您可以使用的相同資料庫執行個體識別符建立執行個體，使得端點可與您的舊僅供讀取複本端點保持相同。如果複寫錯誤已修復，`Replication State` (複寫狀態) 會變更為 *replicating (複寫中)*。

# 使用 GTID 式複寫
<a name="mysql-replication-gtid"></a>

接下來，您可以了解如何在 Amazon RDS for MySQL 資料庫執行個體間 搭配使用全域交易識別符 (GTID) 與二進位日誌 (binlog) 複寫。

如果您是使用 binlog 複寫，且不熟悉如何在 MySQL 使用 GTID 式複寫，則可參閱 MySQL 文件中的[使用全域交易識別符的複寫](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html)。

下列版本支援 GTID 式複寫：
+ 所有 RDS for MySQL 8.4 版本
+ 所有 RDS for MySQL 8.0 版本
+ 所有 RDS for MySQL 5.7 版本

複寫組態中的所有 MySQL 資料庫執行個體都必須符合此版本要求。

**Topics**
+ [

## 全域交易識別碼 (GTID) 的概觀
](#mysql-replication-gtid.overview)
+ [

## GTID 式複寫的參數
](#mysql-replication-gtid.parameters)
+ [

# 為 RDS for MySQL 的新僅供讀取複本啟用 GTID 式複寫
](mysql-replication-gtid.configuring-new-read-replicas.md)
+ [

# 為 RDS for MySQL 的現有僅供讀取複本啟用 GTID 式複寫
](mysql-replication-gtid.configuring-existing-read-replicas.md)
+ [

# 為具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫
](mysql-replication-gtid.disabling.md)

## 全域交易識別碼 (GTID) 的概觀
<a name="mysql-replication-gtid.overview"></a>

「全域交易識別符 (GTID)」**是系統為遞交的 MySQL 交易所產生的唯一識別符。GTID 能讓 binlog 複寫的操作更簡單，也更容易進行故障診斷。

進行 binlog 複寫作業時，MySQL 會使用兩種不同類型的交易：
+ GTID 交易** – 透過 GTID 識別的交易。
+ 匿名交易** – 未指派 GTID 的交易。

在複寫組態中，全部的資料庫執行個體都有各自不同的 GTID。GTID 可簡化複寫組態，因為使用時不需要參照日誌檔案位置。GTID 也使得追蹤複寫的交易更容易，而且可決定來源執行個體和複本是否一致。

您可使用 GTID 式複寫來複寫 RDS for MySQL 僅供讀取複本的資料。您可在建立新的僅供讀取複本時設定 GTID 式複寫，也可轉換現有的僅供讀取複本以使用 GTID 式複寫。

如果是 RDS for MySQL，您也可以在延遲的複寫組態中使用 GTID 式複寫。如需詳細資訊，請參閱 [透過 MySQL 設定延遲複寫](USER_MySQL.Replication.ReadReplicas.DelayReplication.md)。

## GTID 式複寫的參數
<a name="mysql-replication-gtid.parameters"></a>

使用以下參數來設定 GTID 式複寫。


| 參數 | 有效值 | 描述 | 
| --- | --- | --- | 
|  `gtid_mode`  |  `OFF`, `OFF_PERMISSIVE`, `ON_PERMISSIVE`, `ON`  |  `OFF` 指定新交易是匿名交易 (也就是沒有 GTID)，而且交易必須是匿名交易才能複寫。 `OFF_PERMISSIVE` 指定新交易是匿名交易，但全部交易都可以複寫。 `ON_PERMISSIVE` 指定新交易是 GTID 交易，而且全部交易都可以複寫。 `ON` 指定新交易是 GTID 交易，而且交易必須是 GTID 交易才能複寫。  | 
|  `enforce_gtid_consistency`  |  `OFF`, `ON`, `WARN`  |  `OFF` 允許交易違反 GTID 一致性。 `ON` 可避免交易違反 GTID 一致性。 `WARN` 允許交易違反 GTID 一致性，但會在出現違反行為時產生警告。  | 

**注意**  
在 AWS 管理主控台 中，`gtid_mode` 參數會顯示為 `gtid-mode`。

進行 GTID 式複寫時，您可以使用下列設定來配置資料庫執行個體或僅供讀取複本的參數群組：
+ `ON` 和 `ON_PERMISSIVE` 僅適用於從 RDS 資料庫執行個體的傳出複寫作業。這兩個值都會導致 RDS 資料庫執行個體使用 GTID 以供複寫的交易使用。`ON` 要求目標資料庫也使用 GTID 式複寫。`ON_PERMISSIVE` 使 GTID 式複寫可在目標資料庫上選用。
+ 若設定 `OFF_PERMISSIVE`，表示 RDS 資料庫執行個體可接受來源資料庫的傳入複寫作業。無論來源資料庫是否使用 GTID 式複寫，皆可進行。
+ 若設定 `OFF`，表示唯有來源資料庫未使用 GTID 式複寫的情況下，RDS 資料庫執行個體才能接受來自該資料庫的傳入複寫作業。

如需參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

# 為 RDS for MySQL 的新僅供讀取複本啟用 GTID 式複寫
<a name="mysql-replication-gtid.configuring-new-read-replicas"></a>

當 RDS for MySQL 資料庫執行個體的 GTID 式複寫處於啟用狀態時，系統會自動為資料庫執行個體的僅供讀取複本設定 GTID 式複寫。

**為新的僅供讀取複本啟用 GTID 式複寫**

1. 確定與資料庫執行個體有關的參數群組有下列參數設定：
   + `gtid_mode` – `ON` 或 `ON_PERMISSIVE`
   + `enforce_gtid_consistency` – `ON`

   如需使用參數群組設定組態參數的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

1. 如果已變更資料庫執行個體的參數群組，請重新啟動資料庫執行個體。如需如何進行的詳細資訊，請參閱 [在資料庫執行個體](USER_RebootInstance.md)。

1.  建立資料庫執行個體的一個或多個僅供讀取複本。如需如何進行的詳細資訊，請參閱 [建立僅供讀取複本](USER_ReadRepl.Create.md)。

Amazon RDS嘗試使用 `MASTER_AUTO_POSITION`，在 MySQL 資料庫執行個體與僅供讀取複本之間建立 GTID 式複寫。如果嘗試失敗，Amazon RDS 會使用日誌檔案位置進行僅供讀取複本的複寫。如需 `MASTER_AUTO_POSITION` 的詳細資訊，請參閱 [GTID 自動定位功能](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-auto-positioning.html)。

# 為 RDS for MySQL 的現有僅供讀取複本啟用 GTID 式複寫
<a name="mysql-replication-gtid.configuring-existing-read-replicas"></a>

如果現有的 MySQL 資料庫執行個體具備僅供讀取複本，且並未使用 GTID 式複寫，則您可設定資料庫執行個體和僅供讀取複本間的 GTID 式複寫。

**為現有的僅供讀取複本啟用 GTID 式複寫**

1. 如果資料庫執行個體或任何僅供讀取複本正在使用低於 8.0.26 版的 RDS for MySQL 8.0 版，請將資料庫執行個體或僅供讀取複本升級為 8.0.26 版或更新的 MySQL 8.0 版本。所有 RDS for MySQL 8.4 版和 5.7 版都支援 GTID 式複寫。

   如需詳細資訊，請參閱[RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。

1. (選用) 重設 GTID 參數，並測試資料庫執行個體和僅供讀取複本的行為：

   1. 確定與資料庫執行個體和每個僅供讀取複本相關聯的參數群組有設定為 `enforce_gtid_consistency` 的 `WARN` 參數。

      如需使用參數群組設定組態參數的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

   1. 如果已變更資料庫執行個體的參數群組，請重新啟動資料庫執行個體。如果已變更僅供讀取複本的參數群組，請重新啟動僅供讀取複本。

      如需詳細資訊，請參閱 [在資料庫執行個體](USER_RebootInstance.md)。

   1. 對於一般的工作負載執行資料庫執行個體和僅供讀取複本，並監視日誌檔案。

      如果您看見 GTID 不相容交易的警告，請調整應用程式，以便僅使用 GTID 相容功能。確定資料庫執行個體未產生與 GTID 不相容交易的任何警告，再進行下一個步驟。

1. 對於允許匿名交易的 GTID 式複寫重設 GTID 參數，直到僅供讀取複本處理全部的參數為止。

   1. 確定與資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定：
      + `gtid_mode` – `ON_PERMISSIVE`
      + `enforce_gtid_consistency` – `ON`

   1. 如果已變更資料庫執行個體的參數群組，請重新啟動資料庫執行個體。如果已變更僅供讀取複本的參數群組，請重新啟動僅供讀取複本。

1. 等候全部的匿名交易完成複寫。若要檢查這些是否已複寫，請執行下列動作：

   1. 對於來源資料庫執行個體執行下列陳述式。

      **MySQL 8.4**

      ```
      SHOW BINARY LOG STATUS;
      ```

      **MySQL 5.7 和 8.0**

      ```
      SHOW MASTER STATUS;
      ```

      請注意 `File` 和 `Position` 欄中的值。

   1. 對於每個僅供讀取複本，在上一個步驟中使用來源執行個體的檔案和位置資訊來執行下列查詢。

      ```
      SELECT MASTER_POS_WAIT('file', position);
      ```

      例如，如果檔案名稱是 `mysql-bin-changelog.000031`，而且位置是 `107`，則執行下列陳述式。

      ```
      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
      ```

      如果僅供讀取複本已超過指定的位置，會立即傳回查詢。否則，該函式會等候一段時間。所有僅供讀取複本的查詢傳回時，繼續進行下一個步驟。

1. 僅重設 GTID 式複寫的 GTID 參數。

   1. 確定與資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定：
      + `gtid_mode` – `ON`
      + `enforce_gtid_consistency` – `ON`

   1. 重新啟動資料庫執行個體和每個僅供讀取複本。

1. 在每個僅供讀取複本上，執行下列程序。

   **MySQL 8.4 和更新的主要版本**

   ```
   CALL mysql.rds_set_source_auto_position(1);
   ```

   **MySQL 8.0 和更低的主要版本**

   ```
   CALL mysql.rds_set_master_auto_position(1);
   ```

# 為具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫
<a name="mysql-replication-gtid.disabling"></a>

您可以為 具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫。

**為 具備僅供讀取複本的 MySQL 資料庫執行個體停用 GTID 式複寫**

1. 在每個僅供讀取複本，執行下列程序：

   **MySQL 8.4 和更新的主要版本**

   ```
   CALL mysql.rds_set_source_auto_position(0);
   ```

   **MySQL 8.0 和更低的主要版本**

   ```
   CALL mysql.rds_set_master_auto_position(0);
   ```

1. 將 `gtid_mode` 重設為 `ON_PERMISSIVE`。

   1. 確定與 MySQL 資料庫執行個體和每個僅供讀取複本關聯的參數群組將 `gtid_mode` 設定為 `ON_PERMISSIVE`。

      如需使用參數群組設定組態參數的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

   1. 重新啟動 MySQL 資料庫執行個體和每個僅供讀取複本。如需重新啟動的詳細資訊，請參閱[在資料庫執行個體](USER_RebootInstance.md)。

1. 將 `gtid_mode` 重設為 `OFF_PERMISSIVE`。

   1. 確定與 MySQL 資料庫執行個體和每個僅供讀取複本關聯的參數群組將 `gtid_mode` 設定為 `OFF_PERMISSIVE`。

   1. 重新啟動 MySQL 資料庫執行個體和每個僅供讀取複本。

1. 等待系統將全部的 GTID 交易套用至所有僅供讀取複本。若要檢查這些設定是否已套用，請執行下列步驟：

   1. 在 MySQL 資料庫執行個體執行下列命令：

      **MySQL 8.4**

      ```
      SHOW BINARY LOG STATUS
      ```

      **MySQL 5.7 和 8.0**

      ```
      SHOW MASTER STATUS
      ```

      輸出內容應會與下列輸入類似。

      ```
      File                        Position
      ------------------------------------
      mysql-bin-changelog.000031      107
      ------------------------------------
      ```

      請注意輸出中的檔案和位置。

   1. 對於每個僅供讀取複本，在上一步中使用來源執行個體的檔案和位置資訊來執行下列查詢：

      **MySQL 8.4 和 MySQL 8.0.26 及更新的 MySQL 8.0 版本**

      ```
      SELECT SOURCE_POS_WAIT('file', position);
      ```

      **MySQL 5.7**

      ```
      SELECT MASTER_POS_WAIT('file', position);
      ```

      例如，如果檔案名稱是 `mysql-bin-changelog.000031`，而且位置是 `107`，則執行下列陳述式：

      **MySQL 8.4 和 MySQL 8.0.26 及更新的 MySQL 8.0 版本**

      ```
      SELECT SOURCE_POS_WAIT('mysql-bin-changelog.000031', 107);
      ```

      **MySQL 5.7**

      ```
      SELECT MASTER_POS_WAIT('mysql-bin-changelog.000031', 107);
      ```

1. 重設 GTID 參數，以停用 GTID 式複寫。

   1. 確定與 MySQL 資料庫執行個體有關的參數群組和每個僅供讀取複本有下列參數設定：
      + `gtid_mode` – `OFF`
      + `enforce_gtid_consistency` – `OFF`

   1. 重新啟動 MySQL 資料庫執行個體和每個僅供讀取複本。

# 使用外部來源執行個體設定二進位日誌檔案位置複寫
<a name="MySQL.Procedural.Importing.External.Repl"></a>

您可使用二進位日誌檔案複寫，在 RDS for MySQL 或 MariaDB 資料庫執行個體，以及位於 Amazon RDS 外部的 MySQL 或 MariaDB 執行個體之間，設定複寫。

**Topics**
+ [

## 開始之前
](#MySQL.Procedural.Importing.External.Repl.BeforeYouBegin)
+ [

## 使用外部來源執行個體設定二進位日誌檔案位置複寫
](#MySQL.Procedural.Importing.External.Repl.Procedure)

## 開始之前
<a name="MySQL.Procedural.Importing.External.Repl.BeforeYouBegin"></a>

您可以使用複寫交易的二進制日誌檔案位置設定複寫。

在 Amazon RDS 資料庫執行個體上啟動複寫功能所需的許可有其限制，不供 Amazon RDS 主要使用者使用。因此，請確定使用 Amazon RDS [mysql.rds\$1set\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 或 [mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令，設定即時資料庫與 Amazon RDS 資料庫之間的複寫作業。

若要為 MySQL 或 MariaDB 資料庫設定二進位日誌記錄格式，請更新 `binlog_format` 參數。如果資料庫執行個體使用預設的資料庫執行個體參數群組，請建立新的資料庫參數群組以修改 `binlog_format` 參數。在 MariaDB 和 MySQL 8.0 和較低版本中，`binlog_format` 預設為 `MIXED`。不過，如果需要特定的二進位日誌 (binlog) 格式，也可以將 `binlog_format` 設定為 `ROW` 或 `STATEMENT`。重新啟動資料庫執行個體，讓變更生效。在 MySQL 8.4 和更高版本中，`binlog_format` 預設為 `ROW`。

如需有關設定 `binlog_format` 參數的資訊，請參閱[為單一可用區資料庫設定 RDS for MySQL 二進位記錄](USER_LogAccess.MySQL.BinaryFormat.md)。如需各種 MySQL 複寫類型隱含意義的相關資訊，請參閱 MySQL 文件中的[基於陳述式和基於列的複寫的優缺點](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)。

## 使用外部來源執行個體設定二進位日誌檔案位置複寫
<a name="MySQL.Procedural.Importing.External.Repl.Procedure"></a>

在 Amazon RDS 上設定外部來源執行個體和複本時，按照這些準則操作：
+ 監控 Amazon RDS 資料庫執行個體 (您的複本) 的容錯移轉事件。若發生容錯移轉，資料庫執行個體 (您的複本) 可能會以不同的網路地址，在新主機上重新建立。如需如何監控容錯移轉事件的資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 直到您已驗證二進位日誌已套用至複本前，都要將二進位日誌保存在來源執行個體上。如此一來，發生故障時，這種維護可確保您能夠還原來源執行個體。
+ 開啟 Amazon RDS 資料庫執行個體的自動備份功能。如果您需要重新同步來源執行個體與複本，開啟自動備份功能可確保您能夠將複本還原至特定時間點。如需備份和 point-in-time 恢復的相關資訊，請參閱 [備份、還原和匯出資料](CHAP_CommonTasks.BackupRestore.md) 一文。

**使用外部來源執行個體設定二進位日誌檔案複寫**

1. 將來源 MySQL 或 MariaDB 執行個體設成唯讀狀態。

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 在來源 MySQL 或 MariaDB 執行個體上執行 `SHOW MASTER STATUS` 命令，以確定二進位日誌的位置。

   您會獲得類似下列範例的輸出。

   ```
   File                        Position  
   ------------------------------------
    mysql-bin-changelog.000031      107   
   ------------------------------------
   ```

1. 使用 `mysqldump`，從外部執行個體將資料庫複製到 Amazon RDS 資料庫執行個體。如果是非常大型的資料庫，您可能需要使用 [以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md) 中的程序。

   針對 Linux、macOS 或 Unix：

   ```
   mysqldump --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   在 Windows 中：

   ```
   mysqldump --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary ^
       -u local_user ^
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**注意**  
請注意 `-p` 選項與輸入的密碼之間不能有空格。

   若要指定連線到 Amazon RDS 資料庫執行個體的主機名稱、使用者名稱、連接埠和密碼，請使用 `--host` 命令中的 `--user (-u)`、`--port`、`-p` 和 `mysql` 選項。主機名稱是 Amazon RDS 資料庫執行個體端點的網域名稱服務 (DNS) 名稱，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可在 AWS 管理主控台的執行個體詳細資訊中找到端點值。

1. 將來源 MySQL 或 MariaDB 執行個體重新設為可寫入狀態。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

   如需如何製作備份以搭配複寫作業使用的詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/replication-solutions-backups-read-only.html)。

1. 在 中 AWS 管理主控台，將託管外部資料庫的伺服器的 IP 地址新增至 Amazon RDS 資料庫執行個體的虛擬私有雲端 (VPC) 安全群組。如需有關修改 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的 [VPC 安全群組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   IP 地址會在滿足下列條件時變更：
   + 您使用公有 IP 地址供外部來源執行個體和資料庫執行個體通訊。
   + 外部來源執行個體停止後又重新啟動。

   如果符合這些條件，請先驗證 IP 地址再新增它。

   您可能還需要設定本機網路，以允許從 Amazon RDS 資料庫執行個體的 IP 地址建立連線。如此，您的本機網路就能與外部 MySQL 或 MariaDB 執行個體進行通訊。若要尋找 Amazon RDS 資料庫執行個體的 IP 地址，請使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主機名稱是 Amazon RDS 資料庫執行個體端點的 DNS 名稱。

1. 使用您選擇的用戶端連線至外部執行個體，接著建立執行複寫作業所需的使用者。只對於複寫作業使用此帳戶，並限制其存取您的網域，以提升安全性。下列是 範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 若為外部執行個體，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。舉例來說，若要將所有資料庫的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的「`repl_user`」使用者，請發出下列命令。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 將 Amazon RDS 資料庫執行個體設為複本。若要執行此操作，請先以主要使用者身分連線至 Amazon RDS 資料庫執行個體。使用 [mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 或 [mysql.rds\$1set\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 命令識別外部 MySQL 或 MariaDB 資料庫，將其視為來源執行個體。使用您在步驟 2 中所確定的主控端日誌檔案名稱與主控端日誌位置。下列命令為範例。

   **MySQL 8.4**

   ```
   CALL mysql.rds_set_external_source ('mysourceserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MariaDB 和 MySQL 8.0 和 5.7**

   ```
   CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
在 RDS for MySQL 上，您可以改為執行 [mysql.rds\$1set\$1external\$1source\$1with\$1delay (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_with_delay) 或 [mysql.rds\$1set\$1external\$1master\$1with\$1delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master_with_delay) 預存程序，進而選擇使用延遲複寫。在 RDS for MySQL 上，使用延遲複寫的原因之一，是為了透過 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序來開啟災難復原功能。目前，RDS for MariaDB 支援延遲複寫，但不支援 `mysql.rds_start_replication_until` 程序。

1. 在 Amazon RDS 資料庫執行個體上發出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令，啟動複寫作業。

   ```
   CALL mysql.rds_start_replication;
   ```

# 為 Amazon RDS for MySQL 設定多來源複寫
<a name="mysql-multi-source-replication"></a>

透過多來源複寫，您可以將 Amazon RDS for MySQL 資料庫執行個體設定為從多個 RDS for MySQL 來源資料庫執行個體接收二進位日誌事件的複本。執行下列引擎版本的 RDS for MySQL 資料庫執行個體支援多來源複寫：
+ 所有 MySQL 8.4 版
+ 8.0.35 和更高的次要版本
+ 5.7.44 及更高次要版本

如需 MySQL 多來源複寫的相關資訊，請參閱 MySQL 文件中的 [MySQL 多來源複寫](https://dev.mysql.com/doc/refman/8.0/en/replication-multi-source.html)。MySQL 文件包含此功能的詳細資訊，而本主題說明如何在 RDS for MySQL 資料庫執行個體上設定和管理多來源複寫通道。

## 多來源複寫的使用案例
<a name="mysql-multi-source-replication-benefits"></a>

以下是在 RDS for MySQL 上使用多來源複寫的適當案例：
+ 需要將個別資料庫執行個體上的多個碎片合併或結合為單一碎片的應用程式。
+ 需要從合併自多個來源的資料產生報告的應用程式。
+ 為分佈於多個 RDS for MySQL 資料庫執行個體之間的資料建立合併長期備份的需求。

## 多來源複寫的先決條件
<a name="mysql-multi-source-replication-prerequisites"></a>

設定多來源複寫之前，必須符合下列先決條件。
+ 確定每個來源 RDS for MySQL 資料庫執行個體都已啟用自動備份。啟用自動備份時，會啟用二進位記錄。若要了解如何啟用自動備份，請參閱 [啟用自動備份](USER_WorkingWithAutomatedBackups.Enabling.md)。
+ 為了避免複寫錯誤，建議您封鎖對來源資料庫執行個體的寫入操作。您可以在連接至 RDS for MySQL 來源資料庫執行個體的自訂參數群組中，將 `read-only` 參數設定為 `ON`。您可以使用 AWS 管理主控台 或 AWS CLI 建立新的自訂參數群組，或修改現有的參數群組。如需詳細資訊，請參閱[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)及[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。
+ 對於每個來源資料庫執行個體，將執行個體的 IP 位址新增至多來源資料庫執行個體的 Amazon Virtual Private Cloud (VPC) 安全群組。若要識別來源資料庫執行個體的 IP 位址，您可以執行命令 `dig RDS Endpoint`。在與目的地多來源資料庫執行個體相同的 VPC 中，從 Amazon EC2 執行個體執行 命令。
+ 對於每個來源資料庫執行個體，使用用戶端連線至資料庫執行個體，並建立具有複寫所需權限的資料庫使用者，如下列範例所示。

  ```
  CREATE USER 'repl_user' IDENTIFIED BY 'password';
  GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user';
  ```
**注意**  
從 MySQL 8.4 開始，`REPLICATION SLAVE` 權限已棄用，並取代為 `REPLICATION REPLICA`。對於 MySQL 8.4 和更新版本，請改用下列語法：  

  ```
  CREATE USER 'repl_user' IDENTIFIED BY 'password';
  GRANT REPLICATION CLIENT, REPLICATION REPLICA ON *.* TO 'repl_user';
  ```

## 在 RDS for MySQL 資料庫執行個體上設定多來源複寫通道
<a name="mysql-multi-source-replication-configuring-channels"></a>

設定多來源複寫通道與設定單一來源複寫相似。對於多來源複寫，您必須先在來源執行個體上開啟二進位記錄。然後，將資料從來源匯入至多來源複本。然後，您可以使用二進位日誌座標或使用 GTID 自動定位，從每個來源啟動複寫。

若要將 RDS for MySQL 資料庫執行個體設定為兩個或更多 RDS for MySQL 資料庫執行個體的多來源複本，請執行下列步驟。

**Topics**
+ [

### 步驟 1：將資料從來源資料庫執行個體匯入至多來源複本
](#mysql-multi-source-replication-import)
+ [

### 步驟 2：開始從來源資料庫執行個體複寫到多來源複本
](#mysql-multi-source-replication-setting-up-start-replication-other)

### 步驟 1：將資料從來源資料庫執行個體匯入至多來源複本
<a name="mysql-multi-source-replication-import"></a>

在每個來源資料庫執行個體上執行下列步驟。

將資料從來源匯入至多來源複本之前，請先執行 `SHOW MASTER STATUS` 命令以確認目前的二進位日誌檔案和位置。請記下這些詳細資訊，以供後續步驟使用。在此範例輸出中，檔案為 `mysql-bin-changelog.000031`，位置為 `107`。

**注意**  
從 MySQL 8.4 開始，`SHOW MASTER STATUS` 命令已棄用，並取代為 `SHOW BINARY LOG STATUS`。對於 MySQL 8.4 和更新版本，請改用 `SHOW BINARY LOG STATUS`。

```
File                        Position   
-----------------------------------
mysql-bin-changelog.000031      107   
-----------------------------------
```

現在，使用 `mysqldump` 將資料庫從來源資料庫執行個體複製到多來源複本，如下列範例所示。

```
mysqldump --databases database_name \
 --single-transaction \
 --compress \
 --order-by-primary \
 -u RDS_user_name \
 -p RDS_password \
 --host=RDS Endpoint | mysql \
 --host=RDS Endpoint \
 --port=3306 \
 -u RDS_user_name \
-p RDS_password
```

複製資料庫之後，您可以在來源資料庫執行個體上將唯讀參數設定為 `OFF`。

### 步驟 2：開始從來源資料庫執行個體複寫到多來源複本
<a name="mysql-multi-source-replication-setting-up-start-replication-other"></a>

對於每個來源資料庫執行個體，使用管理使用者憑證連線至執行個體，並執行以下兩個預存程序。這些預存程序會在通道上設定複寫，並啟動複寫。此範例使用上一個步驟中範例輸出的 binlog 檔案名稱和位置。

```
CALL mysql.rds_set_external_source_for_channel('mysourcehost.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1, 'channel_1');
CALL mysql.rds_start_replication_for_channel('channel_1');
```

如需有關使用這些預存程序與其他程序來設定和管理複寫通道的詳細資訊，請參閱 [管理多來源複寫](mysql-stored-proc-multi-source-replication.md)。

## 對多來源複寫使用篩選條件
<a name="mysql-multi-source-replication-filters"></a>

您可以使用複寫篩選條件，指定要以多來源複本複寫的資料庫和資料表。複寫篩選條件可以包含複寫中的資料庫和資料表，或將其排除在複寫之外。如需複寫群組的詳細資訊，請參閱 [使用 MySQL 設定複寫篩選條件](USER_MySQL.Replication.ReadReplicas.ReplicationFilters.md)。

透過多來源複寫，您可以全域設定複寫篩選條件，或是在通道層級設定。通道層級篩選僅適用於執行 8.0 版或 8.4 版的支援資料庫執行個體。下列範例說明如何全域設定篩選條件，或是在通道層級設定。

請注意下列有關於在多來源複寫中篩選的需求和行為：
+ 通道名稱兩側必須要有反引號 (``)。
+ 如果您變更了參數群組中的複寫篩選條件，則具有更新的所有通道都會重新啟動多來源複本的 `sql_thread`，以動態套用變更。如果更新涉及全域篩選條件，則所有處於執行中狀態的複寫通道都會重新啟動。
+ 所有全域篩選條件都會在任何通道特定篩選條件之前套用。
+ 如果全域套用篩選條件，並且在通道層級套用，則只會套用通道層級篩選條件。例如，如果篩選條件是 `replicate_ignore_db="db1,`channel_22`:db2"`，則設定為 `db1` 的 `replicate_ignore_db` 會套用至 `channel_22` 以外的所有通道，且只有 `channel_22` 會忽略來自 `db2` 的變更。

範例 1：設定全域篩選條件

在下列範例中，`temp_data` 資料庫會排除在每個通道的複寫外。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-parameter-group \
--db-parameter-group-name myparametergroup \
--parameters "ParameterName=replicate-ignore-db,ParameterValue='temp_data',ApplyMethod=immediate"
```

範例 2：設定通道層級篩選條件

在下列範例中，來自 `sample22` 資料庫的變更只會包含在通道 `channel_22` 中。同樣地，來自 `sample99` 資料庫的變更只會包含在通道 `channel_99` 中。

針對 Linux、macOS 或 Unix：

```
aws rds modify-db-parameter-group \
--db-parameter-group-name myparametergroup \
--parameters "ParameterName=replicate-do-db,ParameterValue='\`channel_22\`:sample22,\`channel_99\`:sample99',ApplyMethod=immediate"
```

## 監控多來源複寫通道
<a name="mysql-multi-source-replication-monitoring"></a>

您可以使用下列方法監控多來源複本中的個別通道：
+ 若要監控所有通道或特定通道的狀態，請連線至多來源複本，並執行 `SHOW REPLICA STATUS` 或 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'` 命令。如需詳細資訊，請參閱 MySQL 文件中的[檢查複寫狀態](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html)。
+ 若要在複寫通道啟動、停止或移除時接收通知，請使用 RDS 事件通知。如需詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 若要監控特定通道的延遲，請檢查其 `ReplicationChannelLag` 指標。在此指標中，具有 60 秒 (1 分鐘) 期間的資料點可供使用 15 天。若要尋找通道的複寫通道延遲，請使用執行個體識別符和複寫通道名稱。若要在延遲超過特定閾值時接收通知，您可以設定 CloudWatch 警示。如需詳細資訊，請參閱[使用 Amazon CloudWatch 監控 Amazon RDS 指標](monitoring-cloudwatch.md)。

## 多來源複寫的考量和最佳實務
<a name="mysql-multi-source-replication-considerations"></a>

在 RDS for MySQL 上使用多來源複寫之前，請檢閱下列考量事項和最佳實務：
+ 確定設定為多來源複本的資料庫執行個體有足夠的資源 (例如輸送量、記憶體、CPU 和 IOPS) 可處理來自多個來源執行個體的工作負載。
+ 定期監控多來源複本上的資源使用率，並調整儲存體或執行個體組態，以順利處理工作負載且不會造成資源負擔。
+ 您可以在多來源複本上設定多執行緒複寫，方法是將系統變數 `replica_parallel_workers` 設定為大於 `0` 的值。在此情況下，配置給每個通道的執行緒數目就是此變數的值，加上一個用來管理套用者執行緒的協調器執行緒。
+ 適當設定複寫篩選條件以避免衝突。若要將整個資料庫複寫到複本上的另一個資料庫，您可以使用 `--replicate-rewrite-db` 選項。例如，您可以將資料庫 A 中的所有資料表複寫到複本執行個體上的資料庫 B。當所有來源執行個體使用相同的結構描述命名慣例時，此方法會很有幫助。如需 `--replicate-rewrite-db` 選項的相關資訊，請參閱 MySQL 文件中的[複寫伺服器選項和變數](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html)。
+ 若要避免發生複寫錯誤，請避免寫入複本。建議您在多來源複本上啟用 `read_only` 參數，以封鎖寫入操作。這樣做有助於消除因寫入操作衝突而導致的複寫問題。
+ 若要提高讀取操作 (例如，在多來源複本上執行的排序和高負載聯結) 的效能，請考慮使用 RDS Optimized Reads。此功能有助於處理相依於大型暫存資料表或排序檔案的查詢。如需詳細資訊，請參閱[使用 Amazon RDS Optimized Reads 改善 RDS for MySQL 的查詢效能](rds-optimized-reads.md)。
+ 若要將複寫延遲降至最低，並改善多來源複本的效能，請考慮啟用最佳化寫入。如需詳細資訊，請參閱[使用 RDS Optimized Writes 改善 MySQL 的寫入效能](rds-optimized-writes.md)。
+ 一次在一個通道上執行管理操作 (例如變更組態)，並避免從多個連線對多個通道執行變更。這類做法可能會導致複寫操作發生衝突。例如，從多個連線同時執行 `rds_skip_repl_error_for_channel` 和 `rds_start_replication_for_channel` 程序，可能會導致在非預期的通道上略過事件。
+ 您可以在多來源複寫執行個體上啟用備份，並將資料從該執行個體匯出至 Amazon S3 儲存貯體，以長期存放資料。不過，也請務必在個別來源執行個體上設定具有適當保留的備份。如需將快照資料匯出至 Amazon S3 的詳細資訊，請參閱 [為 Amazon RDS 將資料庫快照資料匯出至 Amazon S3](USER_ExportSnapshot.md)。
+ 若要將讀取工作負載分佈在多來源複本上，您可以從多來源複本建立僅供讀取複本。您可以 AWS 區域 根據您應用程式的需求，在不同的 中尋找這些僅供讀取複本。如需僅供讀取複本的詳細資訊，請參閱 [使用 MySQL 僅供讀取複本](USER_MySQL.Replication.ReadReplicas.md)。

## RDS for MySQL 上的多來源複寫限制
<a name="mysql-multi-source-replication-limitations"></a>

下列限制適用於 RDS for MySQL 的多來源複寫：
+ 目前，RDS for MySQL 支援為多來源複本設定最多 15 個通道。
+ 僅供讀取複本執行個體無法設定為多來源複本。
+ 若要在執行引擎 5.7 版的 RDS for MySQL 上設定多來源複寫，必須在複本執行個體上啟用效能結構描述。在執行引擎 8.0 或 8.4 版的 RDS for MySQL 上，可以選擇啟用效能結構描述。
+ 對於執行引擎 5.7 版的 RDS for MySQL，複寫篩選條件會套用至所有複寫通道。對於執行引擎 8.0 或 8.4 版的 RDS for MySQL，您可以設定套用至所有複寫通道或個別通道的篩選條件。
+ 還原 RDS 快照或執行時間點還原 (PITR)，並不會還原多來源複本通道組態。
+ 當您建立多來源複本的僅供讀取複本時，它只會從多來源執行個體複寫資料。它不會還原任何通道組態。
+ MySQL 不支援為每個通道設定不同數量的平行工作者。每個通道會根據 `replica_parallel_workers` 值取得相同數量的平行工作者。

如果您的多來源複寫目標是多可用區域資料庫叢集，則適用下列額外的限制：
+ 必須先為來源 RDS for MySQL 執行個體設定通道，才能對該執行個體進行任何寫入。
+ 每個來源 RDS for MySQL 執行個體都必須已啟用 GTID 式複寫。
+ 資料庫叢集上的容錯移轉事件會移除多來源複寫組態。要還原該組態，必須重複執行組態步驟。

# 為 RDS for MySQL 設定主動-主動叢集
<a name="mysql-active-active-clusters"></a>

Amazon RDS 中的主動-主動叢集是一種資料庫組態，其中會有多個節點主動處理讀取和寫入操作，將工作負載分散到執行個體間，以提高可用性和可擴展性。叢集中的每個節點都會同步以維持資料一致性，以便在節點失敗時實現高可用性和更快速的容錯移轉

您可以使用 MySQL 群組複寫外掛程式，為 RDS for MySQL 設定主動-主動叢集。執行下列版本的 RDS for MySQL 資料庫執行個體支援群組複寫外掛程式：
+ 所有 MySQL 8.4 版
+ MySQL 8.0.35 和更高的次要版本

如需 MySQL 群組複寫的相關資訊，請參閱 MySQL 文件中的[群組複寫](https://dev.mysql.com/doc/refman/8.0/en/group-replication.html)。MySQL 文件包含此功能的詳細資訊，而本主題說明如何在 RDS for MySQL 資料庫執行個體上設定和管理外掛程式。

**注意**  
為求簡潔，本主題中提及的所有「主動-主動」叢集都是指使用 MySQL 群組複寫外掛程式的主動-主動叢集。

## 主動-主動叢集的使用案例
<a name="mysql-active-active-clusters-benefits"></a>

下列案例是使用主動-主動叢集理想的候選項目：
+ 需要叢集中的所有資料庫執行個體支援寫入操作的應用程式。群組複寫外掛程式可讓主動-主動叢集中每個資料庫執行個體上的資料保持一致。如需其運作方式的詳細資訊，請參閱 MySQL 文件中的[群組複寫](https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html)。
+ 需要資料庫具備持續可用性的應用程式。使用主動-主動叢集時，資料會保留在叢集中的所有資料庫執行個體上。一個資料庫執行個體失敗時，應用程式可將流量重新路由至叢集中的另一個資料庫執行個體。
+ 可能需要將讀取和寫入操作分割到叢集中的不同資料庫執行個體間，以達到負載平衡的應用程式。使用主動-主動叢集時，您的應用程式可將讀取流量傳送至特定資料庫執行個體，並將寫入流量傳送至他處。您也可以隨時切換讀取或寫入流量要傳送到的資料庫執行個體。

**Topics**
+ [

## 主動-主動叢集的使用案例
](#mysql-active-active-clusters-benefits)
+ [

# 主動-主動叢集的限制與考量事項
](mysql-active-active-clusters-considerations-limitations.md)
+ [

# 準備跨 VPC 主動-主動叢集
](mysql-active-active-clusters-cross-vpc-prerequisites.md)
+ [

# 主動-主動叢集的必要參數設定
](mysql-active-active-clusters-parameters.md)
+ [

# 將現有的資料庫執行個體轉換為主動-主動叢集
](mysql-active-active-clusters-converting.md)
+ [

# 使用新的資料庫執行個體設定主動-主動叢集
](mysql-active-active-clusters-setting-up.md)
+ [

# 將資料庫執行個體新增至主動-主動叢集
](mysql-active-active-clusters-adding.md)
+ [

# 監控主動-主動叢集
](mysql-active-active-clusters-monitoring.md)
+ [

# 在主動-主動叢集中的資料庫執行個體上停止群組複寫
](mysql-active-active-clusters-stopping.md)
+ [

# 重新命名主動-主動叢集中的資料庫執行個體
](mysql-active-active-clusters-renaming.md)
+ [

# 從主動-主動叢集中移除資料庫執行個體
](mysql-active-active-clusters-remove.md)

# 主動-主動叢集的限制與考量事項
<a name="mysql-active-active-clusters-considerations-limitations"></a>

Amazon RDS 中的主動-主動叢集透過在多個執行個體之間分配工作負載來提供更高的可用性和可擴展性。不過，使用此架構時，需要注意重要的限制和考量事項。

下列各節概述複寫延遲、衝突解決、資源配置和容錯移轉行為等關鍵因素。了解這些考量有助於確保主動-主動叢集部署的最佳效能和可靠性。

**Topics**
+ [

## RDS for MySQL 主動-主動叢集的限制
](#mysql-active-active-clusters-limitations)
+ [

## RDS for MySQL 主動-主動叢集的考量和最佳實務
](#mysql-active-active-clusters-considerations)

## RDS for MySQL 主動-主動叢集的限制
<a name="mysql-active-active-clusters-limitations"></a>

下列限制適用於 RDS for MySQL 的主動-主動叢集：
+ 針對主動-主動叢集中的資料庫執行個體，主要使用者名稱不能為 `rdsgrprepladmin`。此使用者名稱會保留給群組複寫連線。
+ 對於主動-主動叢集中具有僅供讀取複本的資料庫執行個體，`Replicating` 以外的長時間複寫狀態可能會導致日誌檔案超過儲存限制。如需僅供讀取複本狀態的相關資訊，請參閱 [監控僅供讀取複本](USER_ReadRepl.Monitoring.md)。
+ 主動-主動叢集中的資料庫執行個體不支援藍/綠部署。如需詳細資訊，請參閱[使用 Amazon RDS 藍/綠部署進行資料庫更新](blue-green-deployments.md)。
+ 主動-主動叢集中的資料庫執行個體不支援 Kerberos 身分驗證。如需詳細資訊，請參閱[對 Amazon RDS for MySQL 使用 Kerberos 身分驗證](mysql-kerberos.md)。
+ 無法將多可用區域資料庫叢集中的資料庫執行個體新增至主動-主動叢集。不過，多可用區域資料庫執行個體部署中的資料庫執行個體可以新增至主動-主動叢集。如需詳細資訊，請參閱[設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)。
+ 沒有主索引鍵的資料表不會在主動-主動叢集中進行複寫，因為群組複寫外掛程式會拒絕寫入。
+ 非 InnoDB 資料表不會在主動-主動叢集中進行複寫。
+ 主動-主動叢集不支援叢集中不同資料庫執行個體上的並行 DML 和 DDL 陳述式。
+ 您無法將主動-主動叢集設定為針對群組的複寫模式使用單一主要模式。對於此組態，我們建議改用多可用區域資料庫叢集。如需詳細資訊，請參閱[Amazon RDS 的多可用區域資料庫叢集部署](multi-az-db-clusters-concepts.md)。
+ 主動-主動叢集中的資料庫執行個體不支援多來源複寫。
+ 跨區域主動-主動叢集無法強制執行群組複寫連線的憑證認證機構 (CA) 驗證。

## RDS for MySQL 主動-主動叢集的考量和最佳實務
<a name="mysql-active-active-clusters-considerations"></a>

在使用 RDS for MySQL 主動-主動叢集之前，請檢閱下列考量事項和最佳實務：
+ 主動-主動叢集不能有九個以上的資料庫執行個體。
+ 您可以使用群組複寫外掛程式來控制主動-主動叢集的交易一致性保證。如需詳細資訊，請參閱 MySQL 文件中的[交易一致性保證](https://dev.mysql.com/doc/refman/8.0/en/group-replication-consistency-guarantees.html)。
+ 當不同的資料庫執行個體更新主動-主動叢集中的相同資料列時，可能會發生衝突。如需有關衝突和衝突解決的資訊，請參閱 MySQL 文件中的[群組複寫](https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html)。
+ 針對容錯，請在主動-主動叢集中包含至少三個資料庫執行個體。您可以設定僅具有一或兩個資料庫執行個體的主動-主動叢集，但叢集無法容錯。如需容錯的詳細資訊，請參閱 MySQL 文件中的[容錯](https://dev.mysql.com/doc/refman/8.0/en/group-replication-fault-tolerance.html)。
+ 當資料庫執行個體加入現有的主動-主動叢集，並執行與叢集中最低引擎版本相同的引擎版本時，資料庫執行個體會以讀寫模式加入。
+ 當資料庫執行個體加入現有的主動-主動叢集，並執行高於叢集中最低引擎版本的引擎版本時，資料庫執行個體必須保持在讀寫模式。
+ 如果您透過在資料庫參數群組中將資料庫執行個體的 `rds.group_replication_enabled` 參數設定為 `1` 來啟用資料庫執行個體的群組複寫，但複寫尚未啟動或無法啟動，則資料庫執行個體會置於 super-read-only 模式，以防止資料不一致。如需 super-read-only 模式的相關資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_super_read_only)。
+ 您可以升級主動-主動叢集中的資料庫執行個體，但資料庫執行個體是唯讀的，直到主動-主動叢集中的所有其他資料庫執行個體都升級至相同的引擎版本或更高的引擎版本為止。升級資料庫執行個體時，資料庫執行個體在升級完成時，會自動加入相同的主動-主動叢集。若要避免意外切換至資料庫執行個體的唯讀模式，請停用其自動次要版本升級。如需升級 MySQL 資料庫執行個體的相關資訊，請參閱[RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。
+ 您可以將多可用區域資料庫執行個體部署中的資料庫執行個體新增至現有的主動-主動叢集。您也可以將主動-主動叢集中的單一可用區域資料庫執行個體轉換為多可用區域資料庫執行個體部署。如果多可用區部署中的主要資料庫執行個體失敗，則該主要執行個體會容錯移轉至待命執行個體。新的主要資料庫執行個體會在容錯移轉完成後自動加入相同的叢集。如需多可用區域資料庫部署的詳細資訊，請參閱 [Amazon RDS 的多可用區域資料庫執行個體部署](Concepts.MultiAZSingleStandby.md)。
+ 我們建議主動-主動叢集中的資料庫執行個體在其維護時段採用不同的時間範圍。此實務可避免叢集中的多個資料庫執行個體同時離線進行維護。如需詳細資訊，請參閱[Amazon RDS 維護時段](USER_UpgradeDBInstance.Maintenance.md#Concepts.DBMaintenance)。
+ 主動-主動叢集可以使用 SSL 進行資料庫執行個體之間的連線。若要設定 SSL 連線，請設定 [ group\$1replication\$1recovery\$1use\$1ssl](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_recovery_use_ssl) 和 [group\$1replication\$1ssl\$1mode](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_ssl_mode) 參數。這些參數的值必須符合主動-主動叢集中的所有資料庫執行個體。

  目前，主動-主動叢集不支援 AWS 區域之間連線的憑證認證機構 (CA) 驗證。因此，[group\$1replication\$1ssl\$1mode](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_ssl_mode) 參數必須設定為 `DISABLED` (預設值) 或 `REQUIRED` (跨區域叢集)。
+ RDS for MySQL 主動-主動叢集會以多重主要模式執行。[ group\$1replication\$1enforce\$1update\$1everywhere\$1checks](https://dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html#sysvar_group_replication_enforce_update_everywhere_checks) 的預設值為 `ON`，而參數為靜態。當此參數設為 `ON` 時，應用程式無法插入具有串聯外部金鑰限制條件的資料表。
+ RDS for MySQL 主動-主動叢集使用 MySQL 通訊堆疊來確保連線安全性 (而非 XCOM)。如需詳細資訊，請參閱 MySQL 文件中的[連線安全管理通訊堆疊](https://dev.mysql.com/doc/refman/8.0/en/group-replication-connection-security.html)。
+ 當資料庫參數群組與主動-主動叢集中的資料庫執行個體建立關聯時，我們建議僅將此資料庫參數群組與叢集中的其他資料庫執行個體建立關聯。
+ 主動-主動叢集僅支援 RDS for MySQL 資料庫執行個體。這些資料庫執行個體必須執行支援的資料庫引擎版本。
+ 當主動-主動叢集中的資料庫執行個體發生未預期的失敗時，RDS 會自動開始復原資料庫執行個體。如果資料庫執行個體未復原，我們建議使用叢集中運作狀態良好的資料庫執行個體來執行時間點復原，將其取代為新的資料庫執行個體。如需說明，請參閱[使用時間點復原將資料庫執行個體新增至主動-主動叢集](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr)。
+ 您可以刪除主動-主動叢集中的資料庫執行個體，而不會影響叢集中的其他資料庫執行個體。如需刪除資料庫執行個體的相關資訊，請參閱[刪除資料庫執行個體](USER_DeleteInstance.md)。
+ 當資料庫執行個體意外離開主動-主動叢集時，`group_replication_exit_state_action` 參數預設會變更為 `OFFLINE_MODE`。在此狀態下，資料庫執行個體無法存取，您必須重新啟動資料庫執行個體，才能將其重新上線並重新加入叢集。您可以透過修改自訂參數群組中的 `group_replication_exit_state_action` 參數來變更此行為。透過將參數設定為 `READ_ONLY`，當資料庫執行個體意外離開叢集時，它會進入超級唯讀狀態，而不是離線。

# 準備跨 VPC 主動-主動叢集
<a name="mysql-active-active-clusters-cross-vpc-prerequisites"></a>

您可以在多個 VPC 中使用 Amazon RDS for MySQL 資料庫執行個體設定主動-主動叢集。VPCs 可以位於相同 AWS 區域 或不同的 中 AWS 區域。

**注意**  
在多個 之間傳送流量 AWS 區域 可能會產生額外費用。如需詳細資訊，請參閱[常見架構的資料傳輸成本概觀](https://aws.amazon.com/blogs/architecture/overview-of-data-transfer-costs-for-common-architectures/)。

如果您要在單一 VPC 中設定主動-主動叢集，可略過這些步驟並移至 [使用新的資料庫執行個體設定主動-主動叢集](mysql-active-active-clusters-setting-up.md)。

**在多個 VPC 中準備具有資料庫執行個體的主動-主動叢集**

1. 請確定 CIDR 區塊中的 IPv4 位址範圍符合下列要求：
   + VPC 的 CIDR 區塊中之 IPv4 位址範圍無法重疊。
   + CIDR 區塊中的所有 IPv4 位址範圍都必須低於 `128.0.0.0/subnet_mask` 或高於 128.0.0.0/*subnet\$1mask*。

   下列範圍說明這些需求：
   + 支援在一個 VPC 中的 `10.1.0.0/16` 和另一個 VPC 中的 `10.2.0.0/16`。
   + 支援在一個 VPC 中的 `172.1.0.0/16` 和另一個 VPC 中的 `172.2.0.0/16`。
   + *不支援*一個 VPC 中的 `10.1.0.0/16` 和另一個 VPC 中的 `10.1.0.0/16`，因為範圍重疊。
   + *不支援*一個 VPC 中的 `10.1.0.0/16` 和另一個 VPC 中的 `172.1.0.0/16`，因為一個低於 `128.0.0.0/subnet_mask`，另一個則高於 `128.0.0.0/subnet_mask`。

   如需 CIDR 區塊的相關資訊，請參閱《Amazon VPC 使用者指南》**中的 [VPC CIDR 區塊](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html)。

1. 在每個 VPC 中，請確定已同時啟用 DNS 解析和 DNS 主機名稱。

   如需說明，請參閱《Amazon VPC 使用者指南》**中的[檢視和更新 VPC 的 DNS 屬性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)。

1. 設定 VPC，以便您能夠以下列其中一種方式路由它們之間的流量：
   + 在 VPC 之間建立 VPC 對等互連

     如需說明，請參閱《Amazon VPC 對等互連指南》**中的[建立 VPC 對等互連](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html)。在每個 VPC 中，請確定您的安全群組有參考對等 VPC 中安全群組的傳入規則。執行此作業，可允許流量傳入和傳出與互連 VPC 中參考之安全群組相關聯的執行個體。如需說明，請參閱《Amazon VPC 互連指南》**中的[更新您的安全群組，使其參考互連安全群組](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-security-groups.html)。
   + 建立 VPC 之間的傳輸閘道。

     如需詳細資訊，請參閱《Amazon VPC 傳輸閘道》**中的[開始使用傳輸閘道](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)。在每個 VPC 中，請確定您的安全群組有傳入規則允許來自其他 VPC 的流量，例如指定其他 VPC 之 CIDR 的傳入規則。執行此作業，可允許流量傳入和傳出與主動-主動叢集中參考之安全群組相關聯的執行個體。如需詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[使用安全群組控制 AWS 資源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html#working-with-security-groups)。

# 主動-主動叢集的必要參數設定
<a name="mysql-active-active-clusters-parameters"></a>

在 Amazon RDS for MySQL 中設定主動-主動叢集的參數，對於維持一致的效能和操作穩定性至關重要。此資料表詳細說明控制複寫、衝突解決和工作負載分佈的關鍵參數。正確的組態可確保節點之間的有效同步、將複寫延遲降至最低，並最佳化分散式或高流量環境中的資源使用率。


| 參數 | 描述 | 必要的設定 | 
| --- | --- | --- | 
|  `binlog_format`  |  設定二進位記錄格式。RDS for MySQL 8.0 和更低版本的預設值為 `MIXED`。RDS for MySQL 8.4 版本的預設值為 `ROW`。如需詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format)。  |  `ROW`  | 
|  `enforce_gtid_consistency`  |  為陳述式執行強制執行 GTID 一致性。RDS for MySQL 的預設值為 `OFF`。如需詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/replication-options-gtids.html#sysvar_enforce_gtid_consistency)。  |  `ON`  | 
|  `group_replication_group_name`  |  將群組複寫名稱設定為 UUID。UUID 格式為 `11111111-2222-3333-4444-555555555555`。您可以連線至 MySQL 資料庫執行個體並執行 `SELECT UUID()`，以產生 MySQL UUID。主動-主動叢集中所有資料庫執行個體的值必須相同。如需詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html#function_uuid)。  |  MySQL UUID  | 
|  `gtid-mode`  |  控制 GTID 式記錄。RDS for MySQL 的預設值為 `OFF_PERMISSIVE`。如需詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/replication-options-gtids.html#sysvar_gtid_mode)。  |  `ON`  | 
|  `rds.custom_dns_resolution`  |  指定是否允許您的 VPC 中來自 Amazon DNS 伺服器的 DNS 解析。使用 `rds.group_replication_enabled` 參數啟用群組複寫時，必須啟用 DNS 解析。使用 `rds.group_replication_enabled` 參數停用群組複寫時，無法啟用 DNS 解析。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的 [Amazon DNS 伺服器](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#AmazonDNS)。  |  `1`  | 
|  `rds.group_replication_enabled`  |  指定是否為資料庫執行個體啟用群組複寫。在主動-主動叢集中的資料庫執行個體上必須啟用群組複寫。  |  `1`  | 
|  `replica_preserve_commit_order` (RDS for MySQL 8.4 和更高版本) 或 `slave_preserve_commit_order`(RDS for MySQL 8.0 版)  |  控制交易在複本上遞交的順序。RDS for MySQL 的預設值為 `ON`。如需詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/replication-options-replica.html#sysvar_slave_preserve_commit_order)。  |  `ON`  | 

# 將現有的資料庫執行個體轉換為主動-主動叢集
<a name="mysql-active-active-clusters-converting"></a>

您要遷移至主動-主動叢集的資料庫執行個體之資料庫引擎版本必須為下列其中一個版本：
+ 全部的 MySQL 8.4 版本
+ MySQL 8.0.35 和更高的次要版本

如果您需要升級引擎版本，請參閱 [RDS for MySQL 資料庫引擎的升級](USER_UpgradeDBInstance.MySQL.md)。

如果您要在多個 VPC 中設定具有資料庫執行個體的主動-主動叢集，請務必在 [準備跨 VPC 主動-主動叢集](mysql-active-active-clusters-cross-vpc-prerequisites.md) 中完成先決條件。

請完成下列步驟，將現有的資料庫執行個體遷移至 RDS for MySQL 的主動-主動叢集。

**Topics**
+ [

## 步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數
](#mysql-active-active-clusters-converting-parameter-group)
+ [

## 步驟 2：將資料庫執行個體與已設定必要群組複寫參數的資料庫參數群組建立關聯
](#mysql-active-active-clusters-converting-associate-parameter-group)
+ [

## 步驟 3：建立主動-主動叢集
](#mysql-active-active-clusters-converting-associate-parameter-groups)
+ [

## 步驟 4：為主動-主動叢集建立其他 RDS for MySQL 資料庫執行個體
](#mysql-active-active-clusters-converting-add-db-instances)
+ [

## 步驟 5：在您要轉換的資料庫執行個體上初始化群組
](#mysql-active-active-clusters-converting-start-replication-first)
+ [

## 步驟 6：在主動-主動叢集中的其他資料庫執行個體上開始複寫
](#mysql-active-active-clusters-converting-start-replication-other)
+ [

## 步驟 7：(建議) 檢查主動-主動叢集的狀態
](#mysql-active-active-clusters-converting-view)

## 步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數
<a name="mysql-active-active-clusters-converting-parameter-group"></a>

主動-主動叢集中的 RDS for MySQL 資料庫執行個體必須與具有必要參數正確設定的自訂參數群組相關聯。如需參數及其各自必要設定的相關資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。

您可以在新的參數群組或現有的參數群組中設定這些參數。不過，為了避免意外影響不屬於主動-主動叢集的資料庫執行個體，強烈建議您建立新的自訂參數群組。主動-主動叢集中的資料庫執行個體可以與相同的資料庫參數群組或不同的資料庫參數群組建立關聯。

您可以使用 AWS 管理主控台 或 AWS CLI 建立新的自訂參數群組。如需詳細資訊，請參閱[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)。下列範例會執行 [create-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html) AWS CLI 命令，以建立名為 RDS for MySQL 8.0 `myactivepg`的自訂資料庫參數群組：

針對 Linux、macOS 或 Unix：

```
aws rds create-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group for active-active clusters"
```

在 Windows 中：

```
aws rds create-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --db-parameter-group-family mysql8.0 ^
  --description "Parameter group for active-active clusters"
```

您也可以使用 AWS 管理主控台 或 AWS CLI 來設定自訂參數群組中的參數。如需詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

下列範例會執行 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 命令，以設定 RDS for MySQL 8.0 的參數。若要搭配 RDS for MySQL 8.4 使用此範例，請將 `slave_preserve_commit_order` 變更為 `replica_preserve_commit_order`。

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

在 Windows 中：

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

## 步驟 2：將資料庫執行個體與已設定必要群組複寫參數的資料庫參數群組建立關聯
<a name="mysql-active-active-clusters-converting-associate-parameter-group"></a>

將資料庫執行個體與您在上一個步驟中所建立或修改的參數群組建立關聯。如需說明，請參閱[將資料庫參數群組與 Amazon RDS 中的資料庫執行個體建立關聯](USER_WorkingWithParamGroups.Associating.md)。

為了讓新的參數設定生效，請重新啟動資料庫執行個體。如需說明，請參閱[在資料庫執行個體](USER_RebootInstance.md)。

## 步驟 3：建立主動-主動叢集
<a name="mysql-active-active-clusters-converting-associate-parameter-groups"></a>

在與資料庫執行個體相關聯的資料庫參數群組中，將 `group_replication_group_seeds` 參數設定為您要轉換之資料庫執行個體的端點。

您可以使用 AWS 管理主控台 或 AWS CLI 來設定 參數。設定此參數後，您不需要重新啟動資料庫執行個體。如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

下列範例會執行 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 命令來設定參數：

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

在 Windows 中：

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

## 步驟 4：為主動-主動叢集建立其他 RDS for MySQL 資料庫執行個體
<a name="mysql-active-active-clusters-converting-add-db-instances"></a>

若要為主動-主動叢集建立其他資料庫執行個體，請在您要轉換的資料庫執行個體上執行時間點復原。如需說明，請參閱[使用時間點復原將資料庫執行個體新增至主動-主動叢集](mysql-active-active-clusters-adding.md#mysql-active-active-clusters-adding-pitr)。

主動-主動叢集最多可以有九個資料庫執行個體。在資料庫執行個體上執行時間點復原，直到您取得叢集所需的資料庫執行個體數量為止。當您執行時間點復原時，請務必將要新增的資料庫執行個體與已將 `rds.group_replication_enabled` 設定為 `1` 的資料庫參數群組建立關聯。否則，群組複寫不會在新增的資料庫執行個體上啟動。

## 步驟 5：在您要轉換的資料庫執行個體上初始化群組
<a name="mysql-active-active-clusters-converting-start-replication-first"></a>

初始化群組並開始複寫：

1. 連線到您要在 SQL 用戶端中轉換的資料庫執行個體。如需連線至 RDS for MySQL 資料庫執行個體的詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

1. 在 SQL 用戶端中，執行下列預存程序，並將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。`rdsgrprepladmin` 使用者會保留給主動-主動叢集中的群組複寫連線。此使用者的密碼在主動-主動叢集中的所有資料庫執行個體上都必須相同。

   ```
   call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
   call mysql.rds_group_replication_create_user('group_replication_user_password');
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   call mysql.rds_group_replication_start(1);
   ```

   此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

   此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `1`，以使用目前的資料庫執行個體來初始化新群組。

   如需範例中所呼叫之預存程序的詳細資訊，請參閱 [管理主動-主動叢集](mysql-stored-proc-active-active-clusters.md)。

## 步驟 6：在主動-主動叢集中的其他資料庫執行個體上開始複寫
<a name="mysql-active-active-clusters-converting-start-replication-other"></a>

對於主動-主動叢集中的每個資料庫執行個體，請使用 SQL 用戶端連線到執行個體，然後執行下列預存程序。將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。

```
call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
call mysql.rds_group_replication_create_user('group_replication_user_password');
call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
call mysql.rds_group_replication_start(0);
```

此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在每個資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `0`，以將目前的資料庫執行個體加入現有的群組。

**提示**  
請確定您在主動-主動叢集中所有其他資料庫執行個體上執行這些預存程序。

## 步驟 7：(建議) 檢查主動-主動叢集的狀態
<a name="mysql-active-active-clusters-converting-view"></a>

若要確保叢集的每個成員都已正確設定，請連線至主動-主動叢集中的資料庫執行個體，並執行下列 SQL 命令，以檢查叢集的狀態：

```
SELECT * FROM performance_schema.replication_group_members;
```

您的輸出針對 `MEMBER_STATE` 的每個資料庫執行個體應會顯示 `ONLINE`，如下列範例輸出所示：

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

如需可能 `MEMBER_STATE` 值的相關資訊，請參閱 MySQL 文件中的[群組複寫伺服器狀態](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)。

# 使用新的資料庫執行個體設定主動-主動叢集
<a name="mysql-active-active-clusters-setting-up"></a>

完成下列步驟，使用新的 Amazon RDS for MySQL 資料庫執行個體設定主動-主動叢集。

如果您要在多個 VPC 中設定具有資料庫執行個體的主動-主動叢集，請務必完成 [準備跨 VPC 主動-主動叢集](mysql-active-active-clusters-cross-vpc-prerequisites.md) 中的先決條件。

**Topics**
+ [

## 步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數
](#mysql-active-active-clusters-setting-up-parameter-group)
+ [

## 步驟 2：為主動-主動叢集建立新的 RDS for MySQL 資料庫執行個體
](#mysql-active-active-clusters-setting-up-db-instances)
+ [

## 步驟 3：在主動-主動叢集中指定資料庫執行個體
](#mysql-active-active-clusters-setting-up-associate-parameter-groups)
+ [

## 步驟 4：初始化資料庫執行個體上的群組，並啟動複寫
](#mysql-active-active-clusters-setting-up-start-replication-first)
+ [

## 步驟 5：在主動-主動叢集中的其他資料庫執行個體上啟動複寫
](#mysql-active-active-clusters-setting-up-start-replication-other)
+ [

## 步驟 6：(建議) 檢查主動-主動叢集的狀態
](#mysql-active-active-clusters-setting-up-view)
+ [

## 步驟 7：(選用) 將資料匯入至主動-主動叢集中的資料庫執行個體
](#mysql-active-active-clusters-import)

## 步驟 1：在一或多個自訂參數群組中設定主動-主動叢集參數
<a name="mysql-active-active-clusters-setting-up-parameter-group"></a>

主動-主動叢集中的 RDS for MySQL 資料庫執行個體必須與具有必要參數正確設定的自訂參數群組相關聯。如需參數及其各自必要設定的相關資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。

您可以在新的參數群組或現有的參數群組中設定這些參數。不過，為了避免意外影響不屬於主動-主動叢集的資料庫執行個體，強烈建議您建立新的自訂參數群組。主動-主動叢集中的資料庫執行個體可以與相同的資料庫參數群組或不同的資料庫參數群組建立關聯。

您可以使用 AWS 管理主控台 或 AWS CLI 建立新的自訂參數群組。如需詳細資訊，請參閱[在 Amazon RDS 中建立資料庫參數群組](USER_WorkingWithParamGroups.Creating.md)。下列範例會執行 [create-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-parameter-group.html) AWS CLI 命令，以建立名為 RDS for MySQL 8.0 `myactivepg`的自訂資料庫參數群組：

針對 Linux、macOS 或 Unix：

```
aws rds create-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --db-parameter-group-family mysql8.0 \
  --description "Parameter group for active-active clusters"
```

在 Windows 中：

```
aws rds create-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --db-parameter-group-family mysql8.0 ^
  --description "Parameter group for active-active clusters"
```

您也可以使用 AWS 管理主控台 或 AWS CLI 來設定自訂參數群組中的參數。如需詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

下列範例會執行 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 命令，以設定 RDS for MySQL 8.0 的參數。若要搭配 RDS for MySQL 8.4 使用此範例，請將 `slave_preserve_commit_order` 變更為 `replica_preserve_commit_order`。

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" \
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" \
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" \
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" \
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

在 Windows 中：

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='rds.group_replication_enabled',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='rds.custom_dns_resolution',ParameterValue='1',ApplyMethod=pending-reboot" ^
               "ParameterName='enforce_gtid_consistency',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='gtid-mode',ParameterValue='ON',ApplyMethod=pending-reboot" ^
               "ParameterName='binlog_format',ParameterValue='ROW',ApplyMethod=immediate" ^
               "ParameterName='slave_preserve_commit_order',ParameterValue='ON',ApplyMethod=immediate" ^
               "ParameterName='group_replication_group_name',ParameterValue='11111111-2222-3333-4444-555555555555',ApplyMethod=pending-reboot"
```

## 步驟 2：為主動-主動叢集建立新的 RDS for MySQL 資料庫執行個體
<a name="mysql-active-active-clusters-setting-up-db-instances"></a>

下列版本的 RDS for MySQL 資料庫執行個體支援主動-主動叢集：
+ 所有 MySQL 8.4 版
+ MySQL 8.0.35 版和更高的次要版本

您可以為叢集建立最多九個新的資料庫執行個體。

您可以使用 AWS 管理主控台 或 AWS CLI 建立新的資料庫執行個體。如需建立資料庫執行個體的詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。當您建立資料庫執行個體時，請將其與您在上一個步驟中建立或修改的資料庫參數群組建立關聯。

## 步驟 3：在主動-主動叢集中指定資料庫執行個體
<a name="mysql-active-active-clusters-setting-up-associate-parameter-groups"></a>

在與每個資料庫執行個體相關聯的資料庫參數群組中，將 `group_replication_group_seeds` 參數設定為要包含在叢集中的資料庫執行個體端點。

您可以使用 AWS 管理主控台 或 AWS CLI 來設定 參數。設定此參數後，您不需要重新啟動資料庫執行個體。如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

下列範例會執行 [modify-db-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-parameter-group.html) AWS CLI 命令來設定參數：

在 Linux、macOS 或 Unix 中：

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myactivepg \
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

在 Windows 中：

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myactivepg ^
  --parameters "ParameterName='group_replication_group_seeds',ParameterValue='myactivedb1.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb2.123456789012.us-east-1.rds.amazonaws.com:3306,myactivedb3.123456789012.us-east-1.rds.amazonaws.com:3306',ApplyMethod=immediate"
```

**提示**  
請確實設定與主動-主動叢集中的資料庫執行個體相關聯的每個資料庫參數群組中的 `group_replication_group_seeds` 參數。

## 步驟 4：初始化資料庫執行個體上的群組，並啟動複寫
<a name="mysql-active-active-clusters-setting-up-start-replication-first"></a>

您可以選擇任何新的資料庫來初始化群組，並啟動複寫。若要這樣做，請完成下列步驟：

1. 選擇主動-主動叢集中的資料庫執行個體，並連線至 SQL 用戶端中的該資料庫執行個體。如需連線至 RDS for MySQL 資料庫執行個體的詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

1. 在 SQL 用戶端中，執行下列預存程序，並將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。`rdsgrprepladmin` 使用者會保留給主動-主動叢集中的群組複寫連線。此使用者的密碼在主動-主動叢集中的所有資料庫執行個體上都必須相同。

   ```
   call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
   call mysql.rds_group_replication_create_user('group_replication_user_password');
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   call mysql.rds_group_replication_start(1);
   ```

   此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

   此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `1`，以使用目前的資料庫執行個體來初始化新群組。

   如需範例中所呼叫之預存程序的詳細資訊，請參閱 [管理主動-主動叢集](mysql-stored-proc-active-active-clusters.md)。

## 步驟 5：在主動-主動叢集中的其他資料庫執行個體上啟動複寫
<a name="mysql-active-active-clusters-setting-up-start-replication-other"></a>

對於主動-主動叢集中的每個資料庫執行個體，請使用 SQL 用戶端連線到執行個體，然後執行下列預存程序。將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。

```
call mysql.rds_set_configuration('binlog retention hours', 168); -- 7 days binlog
call mysql.rds_group_replication_create_user('group_replication_user_password');
call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
call mysql.rds_group_replication_start(0);
```

此範例會將 `binlog retention hours` 值設定為 `168`，這表示二進位日誌檔案會在每個資料庫執行個體上保留七天。您可以調整此值以符合您的需求。

此範例會在 `mysql.rds_group_replication_start` 預存程序中指定 `0`，以將目前的資料庫執行個體加入現有的群組。

**提示**  
請確實在主動-主動叢集中的所有其他資料庫執行個體上執行這些預存程序。

## 步驟 6：(建議) 檢查主動-主動叢集的狀態
<a name="mysql-active-active-clusters-setting-up-view"></a>

若要確保叢集的每個成員都已正確設定，請連線至主動-主動叢集中的資料庫執行個體，並執行下列 SQL 命令，以檢查叢集的狀態：

```
SELECT * FROM performance_schema.replication_group_members;
```

您的輸出針對 `MEMBER_STATE` 的每個資料庫執行個體應會顯示 `ONLINE`，如下列範例輸出所示：

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

如需可能 `MEMBER_STATE` 值的相關資訊，請參閱 MySQL 文件中的[群組複寫伺服器狀態](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)。

## 步驟 7：(選用) 將資料匯入至主動-主動叢集中的資料庫執行個體
<a name="mysql-active-active-clusters-import"></a>

您可以將資料從 MySQL 資料庫匯入至主動-主動叢集中的資料庫執行個體。匯入資料後，群組複寫會將其複寫至叢集中的其他資料庫執行個體。

如需匯入資料的相關資訊，請參閱 [以較短的停機時間將資料匯入至 Amazon RDS for MySQL 資料庫](mysql-importing-data-reduced-downtime.md)。

# 將資料庫執行個體新增至主動-主動叢集
<a name="mysql-active-active-clusters-adding"></a>

您可以透過還原資料庫快照或將資料庫執行個體還原至某個時間點，將資料庫執行個體新增至 Amazon RDS for MySQL 主動-主動叢集。主動-主動叢集最多可包含九個資料庫執行個體。

當您將資料庫執行個體復原到某個時間點時，它通常包含比從資料庫快照還原的資料庫執行個體更近期的交易。當資料庫執行個體有較新的交易時，則當您開始複寫時，需要套用的交易較少。因此，使用時間點復原將資料庫執行個體新增至叢集通常比從資料庫快照還原更快。

**Topics**
+ [

## 使用時間點復原將資料庫執行個體新增至主動-主動叢集
](#mysql-active-active-clusters-adding-pitr)
+ [

## 使用資料庫快照將資料庫執行個體新增至主動-主動叢集
](#mysql-active-active-clusters-adding-snapshot)

## 使用時間點復原將資料庫執行個體新增至主動-主動叢集
<a name="mysql-active-active-clusters-adding-pitr"></a>

您可以在叢集中的資料庫執行個體上執行時間點復原，將資料庫執行個體新增至主動-主動叢集。

如需將資料庫執行個體復原至不同 AWS 區域 中某個時間點的資訊，請參閱 [將自動備份複寫至另一個備份 AWS 區域](USER_ReplicateBackups.md)。

**使用時間點復原將資料庫執行個體新增至主動-主動叢集**

1. 在主動-主動叢集中的資料庫執行個體上執行時間點復原，以建立新的資料庫執行個體。

   您可以在叢集中的任何資料庫執行個體上執行時間點復原，以建立新的資料庫執行個體。如需說明，請參閱[將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)。
**重要**  
在時間點復原期間，將新的資料庫執行個體與已設定主動-主動叢集參數的資料庫參數群組建立關聯。否則，群組複寫不會在新的資料庫執行個體上啟動。如需參數及其各自必要設定的相關資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。
**提示**  
如果您在開始時間點復原之前拍攝資料庫執行個體的快照，則可以減少在新資料庫執行個體上套用交易所需的時間。

1. 將資料庫執行個體新增至與主動-主動叢集中資料庫執行個體相關聯的每個資料庫參數群組中的 `group_replication_group_seeds` 參數，包括與新資料庫執行個體相關聯的資料庫參數群組。

   如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

1. 在 SQL 用戶端中，連線至新的資料庫執行個體，並呼叫 [mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_set_recovery_channel) 預存程序。將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。

   ```
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   ```

1. 使用 SQL 用戶端，呼叫 [mysql.rds\$1group\$1replication\$1start](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_start) 預存程序以開始複寫：

   ```
   call mysql.rds_group_replication_start(0);
   ```

## 使用資料庫快照將資料庫執行個體新增至主動-主動叢集
<a name="mysql-active-active-clusters-adding-snapshot"></a>

您可以透過在叢集中建立資料庫執行個體的資料庫快照，然後還原資料庫快照，將資料庫執行個體新增至主動-主動叢集。

如需將快照複製到不同 AWS 區域 的詳細資訊，請參閱 [跨區域快照複製的考量事項](USER_CopySnapshot.md#USER_CopySnapshot.AcrossRegions)。

**使用資料庫快照將資料庫執行個體新增至主動-主動叢集**

1. 在主動-主動叢集中建立資料庫執行個體的資料庫快照。

   您可以在叢集中建立任何資料庫執行個體的資料庫快照。如需說明，請參閱[為 Amazon RDS 的單一可用區域資料庫執行個體建立資料庫快照](USER_CreateSnapshot.md)。

1. 從資料庫快照還原資料庫執行個體。

   在快照還原作業期間，將新的資料庫執行個體與已設定主動-主動叢集參數的資料庫參數群組建立關聯。如需參數及其各自必要設定的相關資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。

   如需從資料庫快照還原資料庫執行個體的相關資訊，請參閱 [還原至資料庫執行個體](USER_RestoreFromSnapshot.md)。

1. 將資料庫執行個體新增至與主動-主動叢集中資料庫執行個體相關聯的每個資料庫參數群組中的 `group_replication_group_seeds` 參數，包括與新資料庫執行個體相關聯的資料庫參數群組。

   如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

1. 在 SQL 用戶端中，連線至新的資料庫執行個體，並呼叫 [mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_set_recovery_channel) 預存程序。將 *group\$1replication\$1user\$1password* 取代為 `rdsgrprepladmin` 使用者的密碼。

   ```
   call mysql.rds_group_replication_set_recovery_channel('group_replication_user_password');
   ```

1. 使用 SQL 用戶端，呼叫 [mysql.rds\$1group\$1replication\$1start](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_start) 預存程序以開始複寫：

   ```
   call mysql.rds_group_replication_start(0);
   ```

# 監控主動-主動叢集
<a name="mysql-active-active-clusters-monitoring"></a>

在 Amazon RDS for MySQL 中監控主動-主動叢集對於追蹤效能、複寫完整性和節點同步至關重要。您可以連線至叢集中的資料庫執行個體，並執行下列 SQL 命令，以監控主動-主動叢集：

```
SELECT * FROM performance_schema.replication_group_members;
```

您的輸出針對每個資料庫的 `MEMBER_STATE` 之執行個體應會顯示 `ONLINE`，如下列範例輸出所示：

```
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST    | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 9854d4a2-5d7f-11ee-b8ec-0ec88c43c251 | ip-10-15-3-137 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | 9e2e9c28-5d7f-11ee-8039-0e5d58f05fef | ip-10-15-3-225 |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
| group_replication_applier | a6ba332d-5d7f-11ee-a025-0a5c6971197d | ip-10-15-1-83  |        3306 | ONLINE       | PRIMARY     | 8.0.35         | MySQL                      |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
```

如需可能 `MEMBER_STATE` 值的相關資訊，請參閱 MySQL 文件中的[群組複寫伺服器狀態](https://dev.mysql.com/doc/refman/8.0/en/group-replication-server-states.html)。

# 在主動-主動叢集中的資料庫執行個體上停止群組複寫
<a name="mysql-active-active-clusters-stopping"></a>

您可以在主動-主動叢集中的資料庫執行個體上停止群組複寫。停止群組複寫時，資料庫執行個體會置於 super-read-only 模式，直到複寫重新啟動，或該資料庫執行個體從主動-主動叢集中移除為止。如需 super-read-only 模式的相關資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_super_read_only)。

**暫時停止主動-主動叢集的群組複寫**

1. 使用 SQL 用戶端連線至主動-主動叢集中的資料庫執行個體。

   如需連線至 RDS for MySQL 資料庫執行個體的詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

1. 在 SQL 用戶端中，呼叫 [mysql.rds\$1group\$1replication\$1stop](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_stop) 預存程序：

   ```
   call mysql.rds_group_replication_stop();
   ```

# 重新命名主動-主動叢集中的資料庫執行個體
<a name="mysql-active-active-clusters-renaming"></a>

您可以變更主動-主動叢集中的資料庫執行個體名稱。若要重新命名主動-主動叢集中的多個資料庫執行個體，請逐一對各個資料庫執行個體變更。請重新命名一個資料庫執行個體，並將其重新加入叢集，再重新命名下一個資料庫執行個體。

**重新命名主動-主動叢集中的資料庫執行個體**

1. 連線至 SQL 用戶端中的資料庫執行個體，並呼叫 [mysql.rds\$1group\$1replication\$1stop](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_stop) 預存程序：

   ```
   call mysql.rds_group_replication_stop();
   ```

1. 依照 [重新命名資料庫執行個體](USER_RenameInstance.md) 中的指示，將資料庫執行個體重新命名。

1. 修改與主動-主動叢集中的資料庫執行個體相關聯的每個資料庫參數群組中的 `group_replication_group_seeds` 參數。

   在參數設定中，將舊的資料庫執行個體端點取代為新的資料庫執行個體端點。如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

1. 連線至 SQL 用戶端中的資料庫執行個體，並呼叫 [mysql.rds\$1group\$1replication\$1start](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_start) 預存程序：

   ```
   call mysql.rds_group_replication_start(0);
   ```

# 從主動-主動叢集中移除資料庫執行個體
<a name="mysql-active-active-clusters-remove"></a>

當您從主動-主動叢集移除資料庫執行個體時，它會還原為獨立資料庫執行個體。

**從主動-主動叢集中移除資料庫執行個體**

1. 連線至 SQL 用戶端中的資料庫執行個體，並呼叫 [mysql.rds\$1group\$1replication\$1stop](mysql-stored-proc-active-active-clusters.md#mysql_rds_group_replication_stop) 預存程序：

   ```
   call mysql.rds_group_replication_stop();
   ```

1. 修改將保留在主動-主動叢集中的資料庫執行個體的 `group_replication_group_seeds` 參數。

   在 `group_replication_group_seeds` 參數中，刪除您要從主動-主動叢集中移除的資料庫執行個體。如需設定參數的詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

1. 修改您要從主動-主動叢集中移除的資料庫執行個體的參數，使其不再是叢集的一部分。

   您可以將資料庫執行個體與不同的參數群組建立關聯，或修改與資料庫執行個體相關聯的資料庫參數群組中的參數。要修改的參數包括 `group_replication_group_name`、`rds.group_replication_enabled` 和 `group_replication_group_seeds`。如需主動-主動叢集參數的詳細資訊，請參閱 [主動-主動叢集的必要參數設定](mysql-active-active-clusters-parameters.md)。

   主動-主動如果您修改了資料庫參數群組中的參數，請確定資料庫參數群組並未與主動-主動叢集中的其他資料庫執行個體相關聯。

1. 將您從主動-主動叢集中移除的資料庫執行個體重新開機，使新參數設定生效。

   如需說明，請參閱[在資料庫執行個體](USER_RebootInstance.md)。

# 使用複寫從 MySQL 資料庫執行個體匯出資料
<a name="MySQL.Procedural.Exporting.NonRDSRepl"></a>

如要從 RDS for MySQL 資料庫執行個體，將資料匯出至在 Amazon RDS 外部執行的 MySQL 執行個體，您可使用複寫。在此案例中，MySQL 資料庫執行個體是*來源 MySQL 資料庫執行個體*，而在 Amazon RDS 外部執行的 MySQL 執行個體則是*外部 MySQL 資料庫*。

外部 MySQL 資料庫可以在資料中心以內部部署方式執行，或在 Amazon EC2 執行個體上執行。外部 MySQL 資料庫必須執行與來源 MySQL 資料庫執行個體相同的版本，或更新版本。

只有在從來源 MySQL 資料庫執行個體匯出資料庫期間，才支援複寫到外部 MySQL 資料庫。在匯出資料後且應用程式可以開始存取外部 MySQL 執行個體時，就應該終止複寫。

下列清單顯示要採取的步驟。後續幾節會詳細討論各步驟。

1. 準備外部 MySQL 資料庫執行個體。

1. 準備用於複寫的來源 MySQL 資料庫執行個體。

1. 使用 mysqldump 公用程式將資料庫從來源 MySQL 資料庫執行個體轉移到外部 MySQL 資料庫。

1. 開始複寫到外部 MySQL 資料庫。

1. 匯出完成之後，請停止複寫。

## 準備外部 MySQL 資料庫
<a name="MySQL.Procedural.Exporting.NonRDSRepl.PrepareRDS"></a>

請執行下列步驟來準備外部 MySQL 資料庫。

**準備外部 MySQL 資料庫**

1. 安裝外部 MySQL 資料庫。

1. 以主要使用者身分連線至外部 MySQL 資料庫。然後建立支援存取資料庫的管理員、應用程式和服務所需的使用者。

1. 遵循 MySQL 文件中的指示，準備外部 MySQL 資料庫作為複本。如需詳細資訊，請參閱 MySQL 文件中的[設定複本組態](https://dev.mysql.com/doc/refman/8.0/en/replication-howto-slavebaseconfig.html)。

1. 設定輸出規則，讓外部 MySQL 資料庫在匯出期間充當僅供讀取複本。輸出規則可讓外部 MySQL 資料庫在複寫期間連線到來源 MySQL 資料庫執行個體。指定輸出規則，以允許經由傳輸控制通訊協定 (TCP) 連接至來源 MySQL 資料庫執行個體的連接埠和 IP 位址。

   為您的環境指定適當的輸出規則：
   + 如果外部 MySQL 資料庫正在以 Amazon VPC 服務為基礎之 Virtual Private Cloud (VPC) 的 Amazon EC2 執行個體中執行，請在 VPC 安全群組中指定輸出規則。如需詳細資訊，請參閱[使用安全群組控制存取](Overview.RDSSecurityGroups.md)。
   + 如果外部 MySQL 資料庫以內部部署方式安裝，請在防火牆中指定輸出規則。

1. 如果外部 MySQL 資料庫在 VPC 中執行，除了安全群組輸出規則之外，另請為 VPC 存取控制清單 (ACL) 規則設定規則：
   + 設定 ACL 輸入規則，以允許 TCP 流量從來源 MySQL 資料庫執行個體的 IP 位址流向連接埠 1024–65535。
   + 設定 ACL 輸出規則，以允許傳出 TCP 流量流向來源 MySQL 資料庫執行個體的連接埠和 IP 位址。

   如需 Amazon VPC 網路 ACL 的詳細資訊，請參閱*《Amazon VPC 使用者指南》*中的[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

1. (選用) 將 `max_allowed_packet` 參數設定為最大值，以避免複寫錯誤。我們建議您使用此設定。

## 準備來源 MySQL 資料庫執行個體
<a name="MySQL.Procedural.Exporting.NonRDSRepl.PrepareSource"></a>

執行下列步驟，準備來源 MySQL 資料庫執行個體做為複寫來源。

**準備來源 MySQL 資料庫執行個體**

1. 確定用戶端電腦有足夠磁碟空間在設定複寫時儲存二進位日誌。

1. 連線至來源 MySQL 資料庫執行個體，並依照 MySQL 文件中[建立複寫的使用者](http://dev.mysql.com/doc/refman/8.0/en/replication-howto-repuser.html)的指示建立複寫帳戶。

1. 在執行來源 MySQL 資料庫執行個體的系統上設定輸入規則，以允許外部 MySQL 資料庫在複寫期間連線。指定輸入規則，以允許從外部 MySQL 資料庫的 IP 地址，經由 TCP 連接至來源 MySQL 資料庫執行個體所使用的連接埠。

1. 指定輸出規則：
   + 如果來源 MySQL 資料庫執行個體在 VPC 中執行，請在 VPC 安全群組中指定輸入規則。如需詳細資訊，請參閱[使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

1. 如果來源 MySQL 資料庫執行個體在 VPC 中執行，則除了安全群組輸入規則，還需要設定 VPC ACL 規則。
   + 設定 ACL 輸入規則，以允許從外部 MySQL 資料庫的 IP 位址，經由 TCP 連接至 Amazon RDS 執行個體所使用的連接埠。
   + 設定 ACL 輸出規則，以允許從連接埠 1024–65535 經由 TCP 連接至外部 MySQL 資料庫的 IP 位址。

   如需 Amazon VPC 網路 ACL 的詳細資訊，請參閱*《Amazon VPC 使用者指南》*中的[網路 ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)。

1. 確定備份保留期的設定夠長，以避免在匯出期間清除二進位日誌。如果在匯出完成之前清除任何日誌，則您必須重新開始複寫。如需設定備份保留期的詳細資訊，請參閱 [備份簡介](USER_WorkingWithAutomatedBackups.md)。

1. 使用 `mysql.rds_set_configuration` 預存程序來設定夠長的二進位日誌保留期，以避免在匯出期間清除二進位日誌。如需詳細資訊，請參閱[存取 MySQL 二進位日誌](USER_LogAccess.MySQL.Binarylog.md)。

1. 請從來源 MySQL 資料庫執行個體建立 Amazon RDS 僅供讀取複本，以進一步確保不會清除來源 MySQL 資料庫執行個體的二進位日誌。如需詳細資訊，請參閱[建立僅供讀取複本](USER_ReadRepl.Create.md)。

1. 建立 Amazon RDS 僅供讀取複本之後，請呼叫 `mysql.rds_stop_replication` 預存程序來停止複寫程序。來源 MySQL 資料庫執行個體不再清除其二進位日誌檔案，因此可用於複寫程序。

1. (選用) 將 `max_allowed_packet` 參數和 `slave_max_allowed_packet` 參數同時設定為最大值，以避免複寫錯誤。這兩個參數的最大值為 1 GB。我們建議兩個參數都使用此設定。如需有關設定參數的詳細資訊，請參閱 [修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

## 複製資料庫
<a name="MySQL.Procedural.Exporting.NonRDSRepl.CopyData"></a>

執行下列步驟來複製資料庫。

**複製資料庫**

1. 連線到來源 MySQL 資料庫執行個體的 RDS 僅供讀取複本，然後執行 MySQL `SHOW REPLICA STATUS\G` 陳述式。請注意下列項目的值：
   + `Master_Host`
   + `Master_Port`
   + `Master_Log_File`
   + `Exec_Master_Log_Pos`
**注意**  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

1. 使用 mysqldump 公用程式建立快照，以將資料從 Amazon RDS 複製到本機用戶端電腦。確定用戶端電腦有足夠空間，可保留待複寫資料庫的 `mysqldump` 檔案。如果資料庫非常龐大，此程序可能需要數小時的時間。依照 MySQL 文件中的[使用 mysqldump 建立資料快照](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)的指示操作。

   下列範例會在用戶端上執行 `mysqldump`，並將傾印寫入檔案。

   針對 Linux、macOS 或 Unix：

   ```
   mysqldump -h source_MySQL_DB_instance_endpoint \
       -u user \
       -ppassword \
       --port=3306 \
       --single-transaction \
       --routines \
       --triggers \
       --databases  database database2 > path/rds-dump.sql
   ```

   在 Windows 中：

   ```
   mysqldump -h source_MySQL_DB_instance_endpoint ^
       -u user ^
       -ppassword ^
       --port=3306 ^
       --single-transaction ^
       --routines ^
       --triggers ^
       --databases  database database2 > path\rds-dump.sql
   ```

   您可以將備份檔案載入至外部 MySQL 資料庫中。如需詳細資訊，請參閱 MySQL 文件中的[重新載入 SQL 格式備份](https://dev.mysql.com/doc/refman/8.0/en/reloading-sql-format-dumps.html)。您可以執行另一個公用程式，將資料載入至外部 MySQL 資料庫中。

## 完成匯出
<a name="MySQL.Procedural.Exporting.NonRDSRepl.CompleteExp"></a>

執行下列步驟以完成匯出。

**完成匯出**

1. 使用 MySQL `CHANGE MASTER` 陳述式來設定外部 MySQL 資料庫。指定獲授予 `REPLICATION SLAVE` 許可之使用者的 ID 和密碼。指定您從 RDS 僅供讀取複本上執行的 MySQL `SHOW REPLICA STATUS\G` 陳述式所取得的 `Master_Host`、`Master_Port`、`Relay_Master_Log_File` 和 `Exec_Master_Log_Pos` 值。如需詳細資訊，請參閱 MySQL 文件中的 [CHANGE MASTER TO 陳述式](https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html)。
**注意**  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

1. 使用 MySQL `START REPLICA` 命令啟動從來源 MySQL 資料庫執行個體複寫到外部 MySQL 資料庫。

   這樣做會從來源 MySQL 資料庫執行個體開始複寫，並匯出自停止從僅供 Amazon RDS 讀取複本複寫之後發生的所有來源變更。
**注意**  
MySQL 以前的版本使用 `START SLAVE` 而不是 `START REPLICA`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `START SLAVE`。

1. 在外部 MySQL 資料庫上執行 MySQL `SHOW REPLICA STATUS\G` 命令，以確認它是以僅供讀取複本的方式運作。如需解譯結果的詳細資訊，請參閱 MySQL 文件中的 [SHOW SLAVE \$1 REPLICA STATUS 陳述式](https://dev.mysql.com/doc/refman/8.0/en/show-slave-status.html)。

1. 當外部 MySQL 資料庫上的複寫已與來源 MySQL 資料庫執行個體同步之後，請使用 MySQL `STOP REPLICA` 命令停止來源 MySQL 資料庫執行個體複寫。
**注意**  
MySQL 以前的版本使用 `STOP SLAVE` 而不是 `STOP REPLICA`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `STOP SLAVE`。

1. 在 Amazon RDS 僅供讀取複本上，呼叫 `mysql.rds_start_replication` 預存程序。這麼做可讓 Amazon RDS 開始從來源 MySQL 資料庫執行個體中清除二進位日誌檔案。

# MySQL 資料庫執行個體的選項
<a name="Appendix.MySQL.Options"></a>

以下說明執行 MySQL 資料庫引擎的 Amazon RDS 執行個體適用的選項或其他功能。若要啟用這些選項，您可以將它們新增至自訂選項群組，然後使選項群組與您的資料庫執行個體產生關聯。如需使用選項群組的相關詳細資訊，請參閱[使用選項群組](USER_WorkingWithOptionGroups.md)。

Amazon RDS 支援 MySQL 的下列選項：


****  

| 選項 | 選項 ID | 引擎版本 | 
| --- | --- | --- | 
|  [MariaDB 稽核外掛程式支援 MySQL](Appendix.MySQL.Options.AuditPlugin.md)  |  `MARIADB_AUDIT_PLUGIN`  | 所有 MySQL 8.4 版本MySQL 8.0.28 和更新的 8.0 版所有 MySQL 5.7 版本 | 
|  [MySQL memcached 支援](Appendix.MySQL.Options.memcached.md)  |  `MEMCACHED`  |  所有 MySQL 5.7 和 8.0 版本  | 

# MariaDB 稽核外掛程式支援 MySQL
<a name="Appendix.MySQL.Options.AuditPlugin"></a>

Amazon RDS 針對 MySQL 資料庫執行個體提供以開放原始碼 MariaDB 稽核外掛程式為基礎的稽核外掛程式。如需詳細資訊，請參閱 [MySQL Server GitHub 儲存庫的稽核外掛程式](https://github.com/aws/audit-plugin-for-mysql)。

**注意**  
MySQL 的稽核外掛程式以 MariaDB 稽核外掛程式為基礎。在本文中，我們將其稱為 MariaDB 稽核外掛程式。

MariaDB 稽核外掛程式會記錄資料庫活動，包含登入資料庫的使用者，以及針對資料庫執行的查詢。資料庫活動的記錄會儲存在日誌檔中。

## 稽核外掛程式選項設定
<a name="Appendix.MySQL.Options.AuditPlugin.Options"></a>

Amazon RDS 支援 MariaDB 稽核外掛程式的下列設定。


| 選項設定 | 有效值 | 預設值 | 描述 | 
| --- | --- | --- | --- | 
| `SERVER_AUDIT_FILE_PATH` | `/rdsdbdata/log/audit/` | `/rdsdbdata/log/audit/` |  日誌檔的位置。日誌檔包含 `SERVER_AUDIT_EVENTS` 中指定之活動的記錄。如需更多詳細資訊，請參閱 [檢視並列出資料庫日誌檔案](USER_LogAccess.Procedural.Viewing.md) 及 [ MySQL資料庫日誌檔案](USER_LogAccess.Concepts.MySQL.md)。  | 
| `SERVER_AUDIT_FILE_ROTATE_SIZE` | 1–1000000000 | 1000000 |  達到時導致檔案輪換的大小 (以位元組表示)。如需更多詳細資訊，請參閱 [RDS for MySQL 資料庫日誌概觀](USER_LogAccess.MySQL.LogFileSize.md)。  | 
| `SERVER_AUDIT_FILE_ROTATIONS` | 0–100 | 9 |  要在 `server_audit_output_type=file` 時儲存的日誌輪換次數。如果設定為 0，則日誌檔永遠不會輪換。如需詳細資訊，請參閱[RDS for MySQL 資料庫日誌概觀](USER_LogAccess.MySQL.LogFileSize.md)及[下載資料庫日誌檔案](USER_LogAccess.Procedural.Downloading.md)。  | 
| `SERVER_AUDIT_EVENTS` | `CONNECT`, `QUERY`, `QUERY_DDL`, `QUERY_DML`, `QUERY_DML_NO_SELECT`, `QUERY_DCL` | `CONNECT`, `QUERY` |  要記錄在日誌中之活動的類型。安裝 MariaDB 稽核外掛程式是自行記錄的。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html) 對於 MySQL，不支援 `TABLE`。  | 
| `SERVER_AUDIT_INCL_USERS` | 多個以逗號分隔的值 | 無 |  只包括來自所指定使用者的活動。預設情況下，會記錄所有使用者的活動。`SERVER_AUDIT_INCL_USERS` 和 `SERVER_AUDIT_EXCL_USERS` 是相互排斥的。如果您將值新增至 `SERVER_AUDIT_INCL_USERS`，請確保未將任何值新增至 `SERVER_AUDIT_EXCL_USERS`。  | 
| `SERVER_AUDIT_EXCL_USERS` | 多個以逗號分隔的值 | 無 |  排除來自所指定使用者的活動。預設情況下，會記錄所有使用者的活動。`SERVER_AUDIT_INCL_USERS` 和 `SERVER_AUDIT_EXCL_USERS` 是相互排斥的。如果您將值新增至 `SERVER_AUDIT_EXCL_USERS`，請確保未將任何值新增至 `SERVER_AUDIT_INCL_USERS`。  `rdsadmin` 使用者會每次查詢資料庫，以檢查資料庫的運作狀態。根據您的其他設定，此活動可能會導致您的日誌檔大小非常快速地變得非常大。如果您不需要記錄此活動，請將 `rdsadmin` 使用者新增至 `SERVER_AUDIT_EXCL_USERS` 清單。   即使針對此選項設定指定了使用者，也會一律記錄所有使用者的 `CONNECT` 活動。   | 
| `SERVER_AUDIT_LOGGING` | `ON` | `ON` |  記錄為作用中狀態。唯一有效的值為 `ON`。Amazon RDS 不支援停用記錄。如果想要停用記錄，請移除 MariaDB 稽核外掛程式。如需更多詳細資訊，請參閱 [移除 MariaDB 稽核外掛程式](#Appendix.MySQL.Options.AuditPlugin.Remove)。  | 
| `SERVER_AUDIT_QUERY_LOG_LIMIT` | 0–2147483647 | 1024 |  記錄中查詢字串長度的限制。  | 

## 新增 MariaDB 稽核外掛程式
<a name="Appendix.MySQL.Options.AuditPlugin.Add"></a>

將 MariaDB 稽核外掛程式新增至資料庫執行個體的一般程序如下：
+ 建立新的選項群組，或是複製或修改現有選項群組
+ 將選項新增至選項群組
+ 將選項群組與資料庫執行個體關聯

在您新增 MariaDB 稽核外掛程式之後，不需要重新啟動資料庫執行個體。只要選項群組作用中，稽核就會立即開始。

**重要**  
新增 MariaDB 稽核外掛程式至資料庫執行個體可能會導致停機。我們建議在維護視窗下或資料庫低負載的時候新增 MariaDB 稽核外掛程式。

**新增 MariaDB 稽核外掛程式**

1. 判斷要使用的選項群組。您可以建立新的選項群組或使用現有的選項群組。如果您要使用現有的選項群組，請跳到下一個步驟。否則，建立自訂的資料庫選項群組。為**引擎**選擇 **mysql**，然後為**主要引擎版本**選擇 **5.7**、**8.0** 或 **8.4**。如需詳細資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 **MARIADB\$1AUDIT\$1PLUGIN** 選項新增至選項群組，並設定選項設定。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。如需每項設定的詳細資訊，請參閱[稽核外掛程式選項設定](#Appendix.MySQL.Options.AuditPlugin.Options)。

1. 將選項群組套用至新的或現有的資料庫執行個體。
   + 針對新的資料庫執行個體，您會在啟動執行個體時套用選項群組。如需更多詳細資訊，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
   + 針對現有的資料庫執行個體，您可以透過修改執行個體並附加新的選項群組來套用選項群組。如需詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## 稽核日誌格式
<a name="Appendix.MySQL.Options.AuditPlugin.LogFormat"></a>

日誌檔案以 UTF-8 格式的逗號分隔變數 (CSV) 檔案表示。

**提示**  
日誌檔案項目不會循序排列。若要排序項目，請使用時間戳記值。若要查看最新事件，您可能必須檢閱所有日誌檔案。為了更靈活排序和搜尋日誌資料，請開啟設定，將稽核日誌上傳到 CloudWatch，然後使用 CloudWatch 界面檢視這些日誌。  
 若要查看包含更多欄位類型和以 JSON 格式輸出的稽核資料，您也可以使用資料庫活動串流功能。如需詳細資訊，請參閱[使用資料庫活動串流來監控 Amazon RDS](DBActivityStreams.md)。

稽核日誌檔案的每一列依指定順序包含以下逗號分隔的資訊：


| 欄位 | 描述 | 
| --- | --- | 
|  timestamp  |  所記錄事件的 `YYYYMMDD` 後有 `HH:MI:SS` (24 小時制)。  | 
|  serverhost  |  為其記錄事件之執行個體的名稱。  | 
|  username  |  使用者的連線使用者名稱。  | 
|  host  |  使用者連線來源的主機。  | 
|  connectionid  |  所記錄操作的連線 ID 號碼。  | 
|  queryid  |  查詢 ID 號碼，可用來尋找關聯式資料表事件和相關的查詢。若為 `TABLE` 事件，則會新增多行。  | 
|  operation  |  記錄的動作類型。可能值為：`CONNECT`、`QUERY`、`READ`、`WRITE`、`CREATE`、`ALTER`、`RENAME` 及 `DROP`。  | 
|  database  |  由 `USE` 命令設定的作用中資料庫。  | 
|  物件  |  若為 `QUERY` 事件，此值指出資料庫所執行的查詢。若為 `TABLE` 事件，則指出資料表名稱。  | 
|  retcode  |  所記錄操作的傳回碼。  | 
|  connection\$1type  |  與伺服器之連線的安全狀態。可能值為： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html)  | 

## 檢視和下載 MariaDB 稽核外掛程式日誌
<a name="Appendix.MySQL.Options.AuditPlugin.Log"></a>

在啟用 MariaDB 稽核外掛程式之後，您可以採取與存取任何其他文字型日誌檔相同的方式來存取日誌檔中的結果。稽核日誌檔位於 `/rdsdbdata/log/audit/`。如需在主控台中檢視日誌檔的相關資訊，請參閱[檢視並列出資料庫日誌檔案](USER_LogAccess.Procedural.Viewing.md)。如需下載日誌檔的相關資訊，請參閱[下載資料庫日誌檔案](USER_LogAccess.Procedural.Downloading.md)。

## 修改 MariaDB 稽核外掛程式設定
<a name="Appendix.MySQL.Options.AuditPlugin.ModifySettings"></a>

在啟用 MariaDB 稽核外掛程式之後，您可以修改設定。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。如需每項設定的詳細資訊，請參閱[稽核外掛程式選項設定](#Appendix.MySQL.Options.AuditPlugin.Options)。

## 移除 MariaDB 稽核外掛程式
<a name="Appendix.MySQL.Options.AuditPlugin.Remove"></a>

Amazon RDS 不支援在 MariaDB 稽核外掛程式中關閉記錄。不過，您可以從資料庫執行個體中移除外掛程式。當您移除 MariaDB 稽核外掛程式時，資料庫執行個體會自動重新啟動來停止稽核。

若要從資料庫執行個體中移除 MariaDB 稽核外掛程式，請執行下列其中一個動作：
+ 從其所屬的選項群組中移除 MariaDB 稽核外掛程式。此變更會影響使用選項群組的所有資料庫執行個體。如需詳細資訊，請參閱 [從選項群組移除選項](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption) 
+ 修改資料庫執行個體，並指定不包括外掛程式的不同選項群組。此變更會影響單一資料庫執行個體。您可以指定預設的 (空白) 選項群組或不同的自訂選項群組。如需更多詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

# MySQL memcached 支援
<a name="Appendix.MySQL.Options.memcached"></a>

Amazon RDS 支援透過 `memcached` 界面，藉此使用 MySQL 5.6 所推出的 InnoDB 資料表。藉由 `memcached` API，應用程式即可以類似 NoSQL 索引鍵/值資料儲存的方式，使用 InnoDB 資料表。

**注意**  
MySQL 8.4 不再提供 memcached 介面。當您將資料庫執行個體升級至 MySQL 8.4 時，您必須在現有的選項群組中停用 `memcached`。

`memcached` 界面是簡單的索引鍵型快取。應用程式使用 `memcached` 來插入、操控及擷取快取的索引鍵-值資料對。MySQL 5.6 引進一個實作協助程式服務的外掛程式，該服務透過 `memcached` 通訊協定公開 InnoDB 資料表中的資料。如需有關 MySQL `memcached` 外掛程式的詳細資訊，請參閱 [InnoDB 與 Memcached 的整合](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached.html)。

**如要啟用 RDS for MySQL 資料庫執行個體的 memcached 支援**

1. 決定要用於控制 `memcached` 界面存取的安全群組。如果已經在使用此 SQL 界面的應用程式和將會存取 `memcached` 界面的應用程式是同一批，您可以使用此 SQL 界面使用的現有 VPC 安全群組。如果是不同的應用程式將存取 `memcached` 界面，請定義新的 VPC 或資料庫安全群組。如需管理安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md) 

1. 請建立自訂資料庫選項群組，選取 MySQL 做為引擎類型和版本。如需建立選項群組的相關資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 `MEMCACHED` 選項新增至選項群組。指定 `memcached` 界面將使用的連接埠，以及指定安全群組來控制對界面的存取。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 如有需要，修改選項設定以便設定 `memcached` 參數。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

1. 將選項群組套用至執行個體。一旦套用選項群組，Amazon RDS 即會啟用該執行個體的 `memcached` 支援。
   + 當您在啟動新執行個體時指定自訂選項群組，即啟用了新執行個體的 `memcached` 支援。如需有關啟動 MySQL 執行個體的詳細資訊，請參閱[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
   + 當您在修改現有執行個體時指定自訂選項群組，即啟用了現有執行個體的 `memcached` 支援。如需修改 資料庫執行個體的詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

1. 指定可以透過 `memcached` 界面存取 MySQL 資料表中的哪幾欄。`memcached` 外掛程式會在名為 `containers` 的專用資料庫中建立名為 `innodb_memcache` 的目錄資料表。您在 `containers` 資料表中插入一個資料列，以映射透過 `memcached` 存取的 InnoDB 資料表。指定 InnoDB 資料表中的一欄用於存放 `memcached` 索引鍵值，並指定一或多欄用於存放與此索引鍵相關聯的資料值。也要指定名稱，讓 `memcached` 應用程式可用來指向這幾欄。如需在 `containers` 資料表中插入資料列的詳細資訊，請參閱 [InnoDB Memcached 外掛程式內部](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html)。如需映射 InnoDB 資料表以及透過 `memcached` 存取它的範例，請參閱[撰寫 InnoDB Memcached 外掛程式的應用程式](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-developing.html)。

1. 如果存取 `memcached` 界面的應用程式所在的電腦或 EC2 執行個體，和使用 SQL 界面的應用程式所在的不同，請為這些電腦新增連線資訊，以連線至與 MySQL 執行個體關聯的 VPC 安全群組。如需管理安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

修改執行個體並指定您的 MySQL 版本的預設選項群組，即可關閉執行個體的 `memcached` 支援。如需修改 資料庫執行個體的詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## MySQL memcached 安全考量
<a name="w2aac47c83c15c13"></a>

`memcached` 通訊協定不支援使用者驗證。如需 MySQL `memcached` 安全性考量的詳細資訊，請參閱 MySQL 文件中的 [InnoDB Memcached 外掛程式的安全性考量](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-security.html)。

您可採取以下動作幫助增加 `memcached` 界面的安全：
+ 在將 `MEMCACHED` 選項新增至選項群組時，指定非預設 (11211) 的連接埠。
+ 確保您將 `memcached` 界面與 VPC 安全群組 (會限制對已知信任用戶端地址或 EC2 執行個體的存取) 相關聯。如需管理安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

## MySQL memcached 連線資訊
<a name="w2aac47c83c15c15"></a>

應用程式必須同時指定 Amazon RDS 執行個體的 DNS 名稱與 `memcached` 連接埠號碼，才能存取 `memcached` 界面。例如，如果執行個體的 DNS 名稱是 `my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com`，且 memcached 界面使用 11212 連接埠，則在 PHP 中指定的連線資訊就是：

 

```
1. <?php
2. 
3. $cache = new Memcache;
4. $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212);
5. ?>
```

**尋找 MySQL 資料庫執行個體的 DNS 名稱及 Memcached 連接埠**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在 的右上角 AWS 管理主控台，選取包含資料庫執行個體的區域。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 MySQL 資料庫執行個體名稱以顯示其詳細資訊。

1. 請注意 **Connect (連線)** 區段中 **Endpoint (端點)** 欄位的值。DNS 名稱與端點名稱相同。此外，請注意 **Connect (連線)** 區段中的連接埠不是用於存取 `memcached` 界面。

1. 在 **Details (詳細資訊)** 區段中，注意 **Option Group (選項群組)** 欄位中列出的名稱。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇 MySQL 資料庫執行個體使用的選項群組名稱，以顯示選項群組的詳細資訊。在 **Options (選項)** 區段中，請注意 **MEMCACHED** 選項的 **Port (連接埠)** 設定值。

## MySQL memcached 選項設定
<a name="w2aac47c83c15c17"></a>

Amazon RDS 會公開 MySQL `memcached` 參數，並將其做為 Amazon RDS `MEMCACHED` 選項中的選項設定。

### MySQL memcached 參數
<a name="w2aac47c83c15c17b4"></a>
+  `DAEMON_MEMCACHED_R_BATCH_SIZE` – 整數，指定要執行多少個 `memcached` 讀取操作 (get) 之後才 COMMIT (遞交) 開始新交易。允許的值為 1 到 4294967295；預設值是 1。此選項要在執行個體重新啟動後才會生效。
+  `DAEMON_MEMCACHED_W_BATCH_SIZE` – 整數，指定要執行多少個 `memcached` 寫入操作 (例如 add、set 或 incr) 之後才 COMMIT (遞交) 開始新交易。允許的值為 1 到 4294967295；預設值是 1。此選項要在執行個體重新啟動後才會生效。
+  `INNODB_API_BK_COMMIT_INTERVAL` – 整數，指定自動遞交使用 InnoDB `memcached` 界面的閒置連線的遞交頻率。允許的值為 1 到 1073741824；預設值是 5。此選項會立即生效，不需要重新啟動執行個體。
+  `INNODB_API_DISABLE_ROWLOCK` – 布林值，用於停用 (1 (true)) 或啟用 (0 (false)) 使用 InnoDB `memcached` 界面時的資料列鎖定。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `INNODB_API_ENABLE_MDL` – 布林值，設為 0 (false) 可鎖定 InnoDB `memcached` 外掛程式所使用的資料表，使您無法透過 SQL 界面刪除資料表或以 DDL 更改資料表。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `INNODB_API_TRX_LEVEL` – 整數，指定 `memcached` 界面處理的查詢的交易隔離層級。允許的值為 0 到 3。預設為 0。此選項要在執行個體重新啟動後才會生效。

Amazon RDS 會設定這些 MySQL `memcached` 參數，並且無法修改以下項目：`DAEMON_MEMCACHED_LIB_NAME`、`DAEMON_MEMCACHED_LIB_PATH` 與 `INNODB_API_ENABLE_BINLOG`。MySQL 管理員使用 `daemon_memcached_options` 所設定的參數，在 Amazon RDS 中皆為個別的 `MEMCACHED` 選項設定。

### MySQL daemon\$1memcached\$1options 參數
<a name="w2aac47c83c15c17b6"></a>
+  `BINDING_PROTOCOL` – 字串，指定要使用的繫結通訊協定。允許的值為 `auto`、`ascii` 或 `binary`。預設值是 `auto`，表示伺服器會自動與用戶端交涉通訊協定。此選項要在執行個體重新啟動後才會生效。
+  `BACKLOG_QUEUE_LIMIT` – 整數，指定可以有幾個等待 處理的網路連線。`memcached`增加此限制可能會減少無法連線到 `memcached` 執行個體的用戶端收到的錯誤，但不會提高伺服器的效能。允許的值為 1 到 2048；預設值是 1024。此選項要在執行個體重新啟動後才會生效。
+  `CAS_DISABLED` – 布林值，可啟用 (1 (true)) 或停用 (0 (false)) 比較與交換 (CAS)，CAS 可將每個項目的大小減少 8 個位元組。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `CHUNK_SIZE` – 整數，指定可為最小項目的金鑰、值、標記配置的區塊大小下限 (位元組)。允許的值為 1 到 48。預設值為 48，使用較小的值可大幅增進記憶體效能。此選項要在執行個體重新啟動後才會生效。
+  `CHUNK_SIZE_GROWTH_FACTOR` – 浮動數值，控制新區塊的大小。新區塊的大小是先前區塊大小乘以 `CHUNK_SIZE_GROWTH_FACTOR`。允許的值為 1 到 2；預設值是 1.25。此選項要在執行個體重新啟動後才會生效。
+  `ERROR_ON_MEMORY_EXHAUSTED` – 布林值，設為 1 (true) 即指定在已經沒有記憶體可儲存項目時，`memcached` 要傳回錯誤而不是移出項目。如果設為 0 (false)，`memcached` 會在沒有記憶體時移出項目。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `MAX_SIMULTANEOUS_CONNECTIONS` – 整數，指定並行連線的數量上限。設為小於 10 的值可阻止 MySQL 啟動。允許的值為 10 到 1024；預設值是 1024。此選項要在執行個體重新啟動後才會生效。
+  `VERBOSITY` – 字串，指定 `memcached` 服務在 MySQL 錯誤日誌中記錄的資訊層級。預設值為 v。此選項要在執行個體重新啟動後才會生效。允許的值為：
  +  `v` – 在執行主要事件迴圈時，記錄錯誤並發出警告。
  +  `vv` – 除了 v 記錄的資訊之外，也記錄每個用戶端命令和回應。
  +  `vvv` – 除了 w 記錄的資訊之外，也記錄內部狀態轉換。

Amazon RDS 會自行設定以下不可修改的 MySQL `DAEMON_MEMCACHED_OPTIONS` 參數：`DAEMON_PROCESS`、`LARGE_MEMORY_PAGES`、`MAXIMUM_CORE_FILE_LIMIT`、`MAX_ITEM_SIZE`、`LOCK_DOWN_PAGE_MEMORY`、`MASK`、`IDFILE`、`REQUESTS_PER_EVENT`、`SOCKET` 與 `USER`。

# MySQL 的參數
<a name="Appendix.MySQL.Parameters"></a>

依預設，MySQL 資料庫執行個體會使用 MySQL 資料庫專用的資料庫參數群組。此參數群組包含 MySQL 資料庫引擎的參數。如需使用參數群組和設定參數的相關資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

RDS for MySQL 參數會設為您已選取之儲存引擎的預設值。如需 MySQL 參數的詳細資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html)。如需 MySQL 儲存引擎的詳細資訊，請參閱 [支援的 RDS for MySQL 儲存引擎](MySQL.Concepts.FeatureSupport.md#MySQL.Concepts.Storage)。

您可以使用 RDS 主控台或 AWS CLI 查看特定 RDS for MySQL 版本的可用參數。如需有關在 RDS 主控台中查看 MySQL 參數群組參數的資訊，請參閱 [在 Amazon RDS 中檢視資料庫參數群組的參數值](USER_WorkingWithParamGroups.Viewing.md)。

藉由 AWS CLI，您可以執行 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-parameters.html) 命令來查看 RDS for MySQL 版本的參數。為 `--db-parameter-group-family` 選項指定下列其中一個值：
+ `mysql8.4`
+ `mysql8.0`
+ `mysql5.7`

例如，若要檢視 RDS for MySQL 8.0 版的參數，請執行下列命令。

```
aws rds describe-engine-default-parameters --db-parameter-group-family mysql8.0
```

您的輸出結果類似以下內容。

```
{
    "EngineDefaults": {
        "Parameters": [
            {
                "ParameterName": "activate_all_roles_on_login",
                "ParameterValue": "0",
                "Description": "Automatically set all granted roles as active after the user has authenticated successfully.",
                "Source": "engine-default",
                "ApplyType": "dynamic",
                "DataType": "boolean",
                "AllowedValues": "0,1",
                "IsModifiable": true
            },
            {
                "ParameterName": "allow-suspicious-udfs",
                "Description": "Controls whether user-defined functions that have only an xxx symbol for the main function can be loaded",
                "Source": "engine-default",
                "ApplyType": "static",
                "DataType": "boolean",
                "AllowedValues": "0,1",
                "IsModifiable": false
            },
            {
                "ParameterName": "auto_generate_certs",
                "Description": "Controls whether the server autogenerates SSL key and certificate files in the data directory, if they do not already exist.",
                "Source": "engine-default",
                "ApplyType": "static",
                "DataType": "boolean",
                "AllowedValues": "0,1",
                "IsModifiable": false
            },            
        ...
```

若要檢視 RDS for MySQL 8.0 版的可修改參數，請執行下列命令。

對於 Linux、macOS 或 Unix：

```
aws rds describe-engine-default-parameters --db-parameter-group-family mysql8.0 \
   --query 'EngineDefaults.Parameters[?IsModifiable==`true`]'
```

在 Windows 中：

```
aws rds describe-engine-default-parameters --db-parameter-group-family mysql8.0 ^
   --query "EngineDefaults.Parameters[?IsModifiable==`true`]"
```

# MySQL 資料庫執行個體的常用 DBA 任務
<a name="Appendix.MySQL.CommonDBATasks"></a>

您可以在以下內容中找到某些一般 DBA 任務的 Amazon RDS 特定實作說明，這些實作方法皆適用於執行 MySQL 資料庫引擎的資料庫執行個體。為了提供受管理的服務體驗，Amazon RDS 並不會提供資料庫執行個體的殼層存取權。此外，其也會將存取權限制在某些需要進階權限的系統程序和資料表。

如需在 Amazon RDS 上使用 MySQL 日誌檔案的詳細資訊，請參閱 [ MySQL資料庫日誌檔案](USER_LogAccess.Concepts.MySQL.md)

## 了解預先定義的使用者
<a name="Appendix.MySQL.CommonDBATasks.users"></a>

Amazon RDS 會使用新的 RDS for MySQL 資料庫執行個體自動建立多個預先定義的使用者。預先定義的使用者及其權限無法進行變更。您無法為這些預先定義的使用者停止、重新命名或修改權限。嘗試這麼做會造成錯誤。
+ **rdsadmin** – 為處理具有 `superuser` 權限的管理員將在獨立 MySQL 資料庫上執行的許多管理任務而建立的使用者。RDS for MySQL 在內部將此使用者用於許多管理任務。
+ **rdsrepladmin** – Amazon RDS 在內部用來支援 RDS for MySQL 資料庫執行個體和叢集上複寫活動的使用者。

如需其他一般 DBA 任務的詳細資訊，請參閱下列主題：

**Topics**
+ [

## 了解預先定義的使用者
](#Appendix.MySQL.CommonDBATasks.users)
+ [

# RDS for MySQL 的角色型權限模型
](Appendix.MySQL.CommonDBATasks.privilege-model.md)
+ [

# RDS for MySQL 的動態權限
](Appendix.MySQL.CommonDBATasks.dynamic-privileges.md)
+ [

# 結束 RDS for MySQL 的工作階段或查詢
](Appendix.MySQL.CommonDBATasks.End.md)
+ [

# 略過 RDS for MySQL 目前的複寫錯誤
](Appendix.MySQL.CommonDBATasks.SkipError.md)
+ [

# 使用 InnoDB 資料表空間來改善 RDS for MySQL 的損毀復原時間
](Appendix.MySQL.CommonDBATasks.Tables.md)
+ [

# 管理 RDS for MySQL 的全域狀態歷史記錄
](Appendix.MySQL.CommonDBATasks.GoSH.md)
+ [

# 在 MySQL 8.4 中設定緩衝集區大小和重做日誌容量
](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)

# RDS for MySQL 的角色型權限模型
<a name="Appendix.MySQL.CommonDBATasks.privilege-model"></a>

從 RDS for MySQL 8.0.36 版開始，您無法直接修改 `mysql` 資料庫中的資料表。特別是，您無法透過對 `grant` 資料表執行資料處理語言 (DML) 操作來建立資料庫使用者。相反地，您可以使用 MySQL 帳戶管理陳述式，例如 `CREATE USER`、`GRANT` 和 `REVOKE`，將角色型權限授予使用者。您也無法建立其他類型的物件，例如 `mysql` 資料庫中已存放的程序。您仍然可以查詢 `mysql` 資料表。如果您使用二進位日誌複寫，則直接對來源資料庫執行個體上 `mysql` 資料表所做的變更不會複寫至目標叢集。

在某些情況下，您的應用程式可能會使用捷徑來建立使用者或其他物件，方法是插入至 `mysql` 資料表。若是這樣，請變更您應用程式的程式碼來使用對應的陳述式，例如 `CREATE USER`。

若要在遷移期間從外部 MySQL 資料庫匯出資料庫使用者的中繼資料，請使用下列其中一個方法：
+ 使用 MySQL Shell 的執行個體傾印公用程式搭配篩選條件來排除使用者、角色和授權。以下範例顯示要使用的命令語法。請確定 `outputUrl` 是空的。

  ```
  mysqlsh user@host -- util.dumpInstance(outputUrl,{excludeSchemas:['mysql'],users: true})
  ```

  如需詳細資訊，請參閱《MySQL 參考手冊》中的[執行個體傾印公用程式、結構描述傾印公用程式和資料表傾印公用程式](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html)。
+ 使用 `mysqlpump` 用戶端公用程式。此範例包含 `mysql` 系統資料庫中資料表以外的所有資料表。它也包括 `CREATE USER` 和 `GRANT` 陳述式，來重新產生所遷移資料庫中的所有 MySQL 使用者。

  ```
  mysqlpump --exclude-databases=mysql --users
  ```

  MySQL 8.4 不再提供 `mysqlpump` 用戶端公用程式。請改用 `mysqldump`。

若要簡化許多使用者或應用程式的權限管理，您可以使用 `CREATE ROLE` 陳述式來建立具有一組權限的角色。然後，您可以使用 `GRANT` 和 `SET ROLE` 陳述式，以及 `current_role` 函數，將角色指派給使用者或應用程式、切換目前角色，並檢查哪些角色有效。如需 MySQL 8.0 中角色型權限系統的詳細資訊，請參閱《MySQL 參考手冊》中的[使用角色](https://dev.mysql.com/doc/refman/8.0/en/roles.html)。

**重要**  
我們強烈建議您不要直接在您的應用程式中使用主要使用者。而是遵循最佳實務，使用以應用程式所需的最低權限建立的資料庫使用者。

從 8.0.36 版開始，RDS for MySQL 包含具有下列所有權限的特殊角色。此角色已命名為 `rds_superuser_role`。每個資料庫執行個體的主要管理使用者已獲授予此角色。`rds_superuser_role` 角色包含所有資料庫物件的下列權限：
+  `ALTER` 
+  `APPLICATION_PASSWORD_ADMIN` 
+  `ALTER ROUTINE` 
+  `CREATE` 
+  `CREATE ROLE` 
+  `CREATE ROUTINE` 
+  `CREATE TEMPORARY TABLES` 
+  `CREATE USER` 
+  `CREATE VIEW` 
+  `DELETE` 
+  `DROP` 
+  `DROP ROLE` 
+  `EVENT` 
+  `EXECUTE` 
+  `INDEX` 
+  `INSERT` 
+  `LOCK TABLES` 
+  `PROCESS` 
+  `REFERENCES` 
+  `RELOAD` 
+  `REPLICATION CLIENT` 
+  `REPLICATION SLAVE` 
+  `ROLE_ADMIN` 
+  `SET_USER_ID` 
+  `SELECT` 
+  `SHOW DATABASES` 
+  `SHOW VIEW` 
+  `TRIGGER` 
+  `UPDATE` 
+  `XA_RECOVER_ADMIN`

 角色定義還包括 `WITH GRANT OPTION`，以便管理使用者可以將該角色授與其他使用者。尤其，管理員必須授與執行二進位日誌複寫所需的任何權限，以 MySQL 叢集做為目標。

**提示**  
 若要查看許可的完整詳細資訊，請使用下列陳述式。  

```
SHOW GRANTS FOR rds_superuser_role@'%';
```

 當使用 RDS for MySQL 8.0.36 版及更新版本中的角色授予存取權時，您也可以使用 `SET ROLE role_name` 或 `SET ROLE ALL` 陳述式啟用角色。下列範例會顯示作法。以適當的角色名稱替代 `CUSTOM_ROLE`。

```
# Grant role to user
mysql> GRANT CUSTOM_ROLE TO 'user'@'domain-or-ip-address'

# Check the current roles for your user. In this case, the CUSTOM_ROLE role has not been activated.
# Only the rds_superuser_role is currently in effect.
mysql> SELECT CURRENT_ROLE();
+--------------------------+
| CURRENT_ROLE()           |
+--------------------------+
| `rds_superuser_role`@`%` |
+--------------------------+
1 row in set (0.00 sec)

# Activate all roles associated with this user using SET ROLE.
# You can activate specific roles or all roles.
# In this case, the user only has 2 roles, so we specify ALL.
mysql> SET ROLE ALL;
Query OK, 0 rows affected (0.00 sec)

# Verify role is now active
mysql> SELECT CURRENT_ROLE();
+--------------------------------------------------+
| CURRENT_ROLE()                                   |
+--------------------------------------------------+
| `CUSTOM_ROLE`@`%`,`rds_superuser_role`@`%` |
+--------------------------------------------------+
```

# RDS for MySQL 的動態權限
<a name="Appendix.MySQL.CommonDBATasks.dynamic-privileges"></a>

動態權限是 MySQL 權限，您可以使用 `GRANT` 陳述式明確授予。根據您的 RDS for MySQL 版本，RDS 可讓您僅授予特定動態權限。RDS 不允許其中的某些權限，因為它們可能會干擾特定資料庫操作，例如複寫和備份。

下表顯示您可以為不同的 MySQL 版本授予哪些權限。如果您要從低於 8.0.36 的 MySQL 版本升級至 8.0.36 或更新版本，如果不再允許授予特定權限，則可能需要更新您應用程式的程式碼。


| 權限 | MySQL 8.0.35 及更低版本 | MySQL 8.0.36 和更高的次要版本 | MySQL 8.4.3 及更新版本 | 
| --- | --- | --- | --- | 
|  [ALLOW\$1NONEXISTENT\$1DEFINER](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_allow-nonexistent-definer)   |  不適用  |  不適用  |  不允許  | 
|  [APPLICATION\$1PASSWORD\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_application-password-admin)  |  已允許  |  已允許  |  允許  | 
|  [AUDIT\$1ABORT\$1EXEMPT](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_audit-abort-exempt)  |  允許  |  不允許  |  不允許  | 
|  [AUDIT\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_audit-admin)  |  不允許  |  不允許  |  不允許  | 
|  [AUTHENTICATION\$1POLICY\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_authentication-policy-admin)  |  允許  |  不允許  | 不允許 | 
|  [BACKUP\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_backup-admin)  |  允許  |  不允許  |  不允許  | 
|  [BINLOG\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_binlog-admin)  |  允許  |  不允許  |  不允許  | 
|  [BINLOG\$1ENCRYPTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_binlog-encryption-admin)  |  不允許  |  不允許  |  不允許  | 
|  [CLONE\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_clone-admin)  |  不允許  |  不允許  |  不允許  | 
|  [CONNECTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_connection-admin)  |  允許  |  不允許  |  不允許  | 
|  [ENCRYPTION\$1KEY\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_encryption-key-admin)  |  不允許  |  不允許  |  不允許  | 
|  [FIREWALL\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_firewall-admin)  |  不允許  |  不允許  |  不允許  | 
|  [FIREWALL\$1EXEMPT](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_firewall-exempt)  |  允許  |  不允許  |  不允許  | 
|  [FIREWALL\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_firewall-user)  |  不允許  |  不允許  |  不允許  | 
|  [FLUSH\$1OPTIMIZER\$1COSTS](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-optimizer-costs)  |  已允許  |  已允許  |  允許  | 
|  [FLUSH\$1PRIVILEGES](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_flush-privileges)  |  不適用  |  不適用  |  允許  | 
|  [FLUSH\$1STATUS](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-status)  |  已允許  |  已允許  |  允許  | 
|  [FLUSH\$1TABLES](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-tables)  |  已允許  |  已允許  |  允許  | 
|  [FLUSH\$1USER\$1RESOURCES](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_flush-user-resources)  |  已允許  |  已允許  |  允許  | 
|  [GROUP\$1REPLICATION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_group-replication-admin)  |  不允許  |  不允許  |  不允許  | 
|  [GROUP\$1REPLICATION\$1STREAM](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_group-replication-stream)  |  不允許  |  不允許  |  不允許  | 
|  [INNODB\$1REDO\$1LOG\$1ARCHIVE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_innodb-redo-log-archive)  |  不允許  |  不允許  |  不允許  | 
|  [INNODB\$1REDO\$1LOG\$1ENABLE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_innodb-redo-log-enable)  |  不允許  |  不允許  |  不允許  | 
|  [MASKING\$1DICTIONARIES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_masking-dictionaries-admin)  |  不允許  |  不允許  |  不允許  | 
|  [NDB\$1STORED\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_ndb-stored-user)  |  不允許  |  不允許  |  不允許  | 
|  [OPTIMIZE\$1LOCAL\$1TABLE](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_optimize-local-table)  |  不適用  |  不適用  |  不允許  | 
|  [PASSWORDLESS\$1USER\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_passwordless-user-admin)  |  不允許  |  不允許  |  不允許  | 
|  [PERSIST\$1RO\$1VARIABLES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_persist-ro-variables-admin)  |  不允許  |  不允許  |  不允許  | 
|  [REPLICATION\$1APPLIER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-applier)  |  允許  |  不允許  |  不允許  | 
|  [REPLICATION\$1SLAVE\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-slave-admin)  |  不允許  |  不允許  |  不允許  | 
|  [RESOURCE\$1GROUP\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_resource-group-admin)  |  允許  |  不允許  |  不允許  | 
|  [RESOURCE\$1GROUP\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_resource-group-user)  |  允許  |  不允許  |  不允許  | 
|  [ROLE\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_role-admin)  |  已允許  |  已允許  |  允許  | 
|  [SENSITIVE\$1VARIABLES\$1OBSERVER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_sensitive-variables-observer)  |  已允許  |  已允許  | 允許 | 
|  [SERVICE\$1CONNECTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_service-connection-admin)  |  允許  |  不允許  |  不允許  | 
|  [SESSION\$1VARIABLES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_session-variables-admin)  |  已允許  |  已允許  |  允許  | 
|  [SET\$1ANY\$1DEFINER](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_set-any-definer)  |  不適用  |  不適用  |  允許  | 
|  [SET\$1USER\$1ID](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_set-user-id)  |  已允許  |  允許  |  不適用  | 
|  [SHOW\$1ROUTINE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_show-routine)  |  已允許  |  已允許  |  允許  | 
|  [SKIP\$1QUERY\$1REWRITE](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_skip-query-rewrite)  |  不允許  |  不允許  |  不允許  | 
|  [SYSTEM\$1USER](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_system-user)  |  不允許  |  不允許  |  不允許  | 
|  [SYSTEM\$1VARIABLES\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_system-variables-admin)  |  不允許  |  不允許  |  不允許  | 
|  [TABLE\$1ENCRYPTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_table-encryption-admin)  |  不允許  |  不允許  |  不允許  | 
|  [TELEMETRY\$1LOG\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_telemetry-log-admin)  |  允許  |  不允許  |  不允許  | 
|  [TP\$1CONNECTION\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_tp-connection-admin)  |  不允許  |  不允許  | 不允許 | 
|  [TRANSACTION\$1GTID\$1TAG](https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html#priv_transaction-gtid-tag)   |  不適用  |  不適用  | 不允許 | 
|  [VERSION\$1TOKEN\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_version-token-admin)  |  不允許  |  不允許  |  不允許  | 
|  [XA\$1RECOVER\$1ADMIN](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_xa-recover-admin)  |  已允許  |  已允許  |  允許  | 

# 結束 RDS for MySQL 的工作階段或查詢
<a name="Appendix.MySQL.CommonDBATasks.End"></a>

您可以使用 `rds_kill` 和 `rds_kill_query` 命令，結束資料庫執行個體上的使用者工作階段或查詢。首先連接到您的 MySQL 資料庫執行個體，然後發出適當的命令，如下所示。如需更多詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

```
CALL mysql.rds_kill(thread-ID)
CALL mysql.rds_kill_query(thread-ID)
```

例如，若要結束正在執行緒 99 上執行的工作階段，您將輸入下列命令：

```
CALL mysql.rds_kill(99); 
```

若要結束正在執行緒 99 上執行的查詢，您將輸入下列命令：

```
CALL mysql.rds_kill_query(99); 
```

# 略過 RDS for MySQL 目前的複寫錯誤
<a name="Appendix.MySQL.CommonDBATasks.SkipError"></a>

您可以略過僅供讀取複本上的錯誤，前提是此錯誤導致僅供讀取複本停止回應，而且此錯誤不會影響資料的完整性。

**注意**  
首先驗證是否可以安全地略過有問題的錯誤。在 MySQL 公用程式中，連線至僅供讀取複本並執行下列 MySQL 命令：  

```
SHOW REPLICA STATUS\G 
```
如需傳回值的相關資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)。  
MySQL 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MySQL 是 8.0.23 之前的版本，請使用 `SHOW SLAVE STATUS`。

您可採用以下方式，略過僅供讀取複本上的錯誤。

**Topics**
+ [

## 呼叫 mysql.rds\$1skip\$1repl\$1error 程序
](#Appendix.MySQL.CommonDBATasks.SkipError.procedure)
+ [

## 設定 slave\$1skip\$1errors 參數
](#Appendix.MySQL.CommonDBATasks.SkipError.parameter)

## 呼叫 mysql.rds\$1skip\$1repl\$1error 程序
<a name="Appendix.MySQL.CommonDBATasks.SkipError.procedure"></a>

Amazon RDS 提供一種預存程序，您可以呼叫此程序，以略過僅供讀取複本上的錯誤。首先連接到您的僅供讀取複本，然後發出適當的命令，如下所示。如需詳細資訊，請參閱[連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

 若要略過錯誤，請發出下列命令：

```
CALL mysql.rds_skip_repl_error; 
```

如果您在來源資料庫執行個體上，或在未發現複寫錯誤的僅供讀取複本上執行此命令，則此命令沒有效用。

如需詳細資訊，例如支援 `mysql.rds_skip_repl_error` 的 MySQL 版本，請參閱 [mysql.rds\$1skip\$1repl\$1error](mysql-stored-proc-replicating.md#mysql_rds_skip_repl_error)。

**重要**  
如果您嘗試呼叫 `mysql.rds_skip_repl_error` 並遇到下列錯誤：`ERROR 1305 (42000): PROCEDURE mysql.rds_skip_repl_error does not exist`，請將 MySQL 資料庫執行個體升級到最新次要版本，或 [mysql.rds\$1skip\$1repl\$1error](mysql-stored-proc-replicating.md#mysql_rds_skip_repl_error) 列出的其中一個最低的次要版本。

## 設定 slave\$1skip\$1errors 參數
<a name="Appendix.MySQL.CommonDBATasks.SkipError.parameter"></a>

若要略過一或多個錯誤，您可以在僅供讀取複本上設定 `slave_skip_errors` 靜態參數。您可以設定此參數，以略過一或多個特定的複寫錯誤碼。目前，您只能針對 RDS for MySQL 5.7 資料庫執行個體設定此參數。在變更此參數的設定之後，請務必重新啟動您的資料庫執行個體，新設定才會生效。如需設定此參數的相關資訊，請參閱 [MySQL 文件](https://dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html#sysvar_slave_skip_errors)：

建議您在個別的資料庫參數群組中設定此參數。您只能將此資料庫參數群組與需要略過錯誤的僅供讀取複本建立關聯。遵循此最佳實務可減少對其他資料庫執行個體和僅供讀取複本的潛在影響。

**重要**  
針對此參數設定非預設值可能會導致複寫不一致。只有在您已用盡其他選項來解決問題，並確定對僅供讀取複本資料產生潛在影響時，才會將此參數設定為非預設值。

# 使用 InnoDB 資料表空間來改善 RDS for MySQL 的損毀復原時間
<a name="Appendix.MySQL.CommonDBATasks.Tables"></a>

MySQL 中的每個資料表都包含資料表定義、資枓和索引。MySQL 儲存引擎 InnoDB 會將資料表資料和索引儲存在*資料表空間*中。InnoDB 會建立全域共用的資料表空間，其中包含資料字典和其他相關中繼資料，而且它可以包含資料表資料和索引。InnoDB 也可以針對每個資料表和分割區建立個別的資料表空間。這些個別的資料表空間會儲存在副檔名為 .ibd 的檔案中，而且每個資料表空間的標題都包含一個專門識別它的數字。

Amazon RDS 會在 MySQL 參數群組中提供名為 `innodb_file_per_table` 的參數。此參數會控制 InnoDB 是否將新的資料表資料和索引加入至共用的資料表空間 (方法為將參數值設為 0) 或加入至個別的資料表空間 (方法為將參數值設為 1)。Amazon RDS 會將 `innodb_file_per_table` 參數的預設值設為 1，這允許您捨棄個別的 InnoDB 資料表，並回收那些資料表針對資料庫執行個體使用的儲存體。在大部分使用案例中，將 `innodb_file_per_table` 參數設為 1 是建議的設定。

當您有大量的資料表 (例如，當您使用標準 (磁性) 或一般用途 SSD 儲存體時超過 1000 個資料表，或當您使用佈建 IOPS 儲存體時超過 10,000 個資料表) 時，您應該將 `innodb_file_per_table` 參數設為 0。將此參數設為 0 時，不會建立個別資料表空間，而且這樣做可縮短資料庫損毀復原所需的時間。

MySQL 會在損毀復原週期處理每個中繼檔案。相較於有多個資料表時，處理數千個資料表檔案所需的時間，可以忽略 MySQL 在共用的資料表空間中處理中繼資訊所需的時間。因為資料表空間號碼會儲存在每個檔案的標題內，所以讀取所有資料表空間檔案的合計時間可能高達七小時。例如，標準儲存體上的一百萬個 InnoDB 資料表空間在損毀復原週期可能需要五到八小時的處理時間。在某些情況下，InnoDB 可以判斷在損毀復原週期之後是否需要額外清除，以便它將開始另一個損毀復原週期，這將延長復原時間。請記住，除了處理資料表空間資訊外，損毀復原週期也會包含轉返交易、修正中斷的頁面，以及其他操作。

因為 `innodb_file_per_table` 參數位於常數群組中，所以您可以變更參數值，方法為編輯資料庫執行個體所使用的參數群組，而不必重新啟動資料庫執行個體。例如，在將設定從 1 (建立個別資料表) 變更為 0 (使用共用的資料表空間) 之後，當現有的資料表繼續具有個別資料表空間時，新的 InnoDB 資料表將新增至共用的資料表空間。若要將 InnoDB 資料表移至共用的資料表空間，您必須使用 `ALTER TABLE` 命令。

## 將多個資料表空間遷移至共用的資料表空間
<a name="Appendix.MySQL.CommonDBATasks.MigrateMultiTbs"></a>

您可以將 InnoDB 資料表的中繼資料移至它自己的資料表空間，這將根據 `innodb_file_per_table` 參數設定，重建資料表中繼資料。首先連接到您的 MySQL 資料庫執行個體，然後發出適當的命令，如下所示。如需更多詳細資訊，請參閱 [連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。

```
ALTER TABLE table_name ENGINE = InnoDB, ALGORITHM=COPY; 
```

例如，以下查詢會針對不在共用的資料表空間中的每一個 InnoDB 資料表傳回 `ALTER TABLE` 陳述式。

**若為 MySQL 5.7 資料庫執行個體：**

```
SELECT CONCAT('ALTER TABLE `', 
REPLACE(LEFT(NAME , INSTR((NAME), '/') - 1), '`', '``'), '`.`', 
REPLACE(SUBSTR(NAME FROM INSTR(NAME, '/') + 1), '`', '``'), '` ENGINE=InnoDB, ALGORITHM=COPY;') AS Query 
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES 
WHERE SPACE <> 0 AND LEFT(NAME, INSTR((NAME), '/') - 1) NOT IN ('mysql','');
```

**適用於 MySQL 8.4 和 8.0 資料庫執行個體：**

```
SELECT CONCAT('ALTER TABLE `', 
REPLACE(LEFT(NAME , INSTR((NAME), '/') - 1), '`', '``'), '`.`', 
REPLACE(SUBSTR(NAME FROM INSTR(NAME, '/') + 1), '`', '``'), '` ENGINE=InnoDB, ALGORITHM=COPY;') AS Query 
FROM INFORMATION_SCHEMA.INNODB_TABLES 
WHERE SPACE <> 0 AND LEFT(NAME, INSTR((NAME), '/') - 1) NOT IN ('mysql','');
```

重建 MySQL 資料表將資料表的中繼資料移至共用的資料表空間，暫時需要額外的儲存空間來重建資料表，所以資料庫執行個體必須具有可用的儲存空間。重建期間，會鎖定資料表，而且查詢無法存取它。對於不經常存取的小型表格或表格，可能不需要擔心此問題。對於在大量並行環境中經常存取的大型表格或表格，您可以在僅供讀取複本上重建資料表。

您可以建立僅供讀取複本，並將資料表中繼資料遷移至僅供讀取複本上共用的資料表空間。當 ALTER TABLE 陳述式封鎖僅供讀取複本上的存取權時，來源資料庫執行個體不會受到影響。在資料表重建過程中，當僅供讀取複本延遲時，來源資料庫執行個體將繼續產生其二進位記錄。由於重建需要額外的儲存空間，重播日誌檔案可能因此變大，所以您應該建立其配置的儲存體大於來源資料庫執行個體的僅供讀取複本。

若要建立僅供讀取複本並重建 InnoDB 資料表，以使用共用的資料表空間，請採取以下步驟：

1. 確保已在來源資料庫執行個體上啟用備份保留，以便啟用二進位記錄。

1. 使用 AWS 管理主控台 或 AWS CLI 為來源資料庫執行個體建立僅供讀取複本。因為建立僅供讀取複本涉及許多與損毀復原相同的程序，所以如果有大量 InnoDB 資料表空間，則建立程序可能需要一些時間。在僅供讀取複本上配置更多的儲存空間，超過目前在來源資料庫執行個體上使用的儲存空間。

1. 建立僅供讀取複本後，請使用參數設定 `read_only = 0` 和 `innodb_file_per_table = 0` 建立參數群組。接著請將參數群組與僅供讀取複本產生關聯。

1. 針對您要在複本上遷移的所有資料表，發出下列 SQL 陳述式：

   ```
   ALTER TABLE name ENGINE = InnoDB
   ```

1. 在僅供讀取複本上完成了所有 `ALTER TABLE` 陳述式時，請驗證僅供讀取複本是否連線至來源資料庫執行個體，以及這兩個執行個體是否同步。

1. 使用主控台或 CLI 將僅供讀取複本升級為執行個體。確定用於新獨立資料庫執行個體的參數群組已將 `innodb_file_per_table` 參數設為 0。變更新獨立資料庫執行個體的名稱，並將任何應用程式指向新的獨立資料庫執行個體。

# 管理 RDS for MySQL 的全域狀態歷史記錄
<a name="Appendix.MySQL.CommonDBATasks.GoSH"></a>

**提示**  
若要分析資料庫效能，您也可以使用 Amazon RDS 上的 Performance Insights。如需詳細資訊，請參閱[在 Amazon RDS 上使用績效詳情監控資料庫負載](USER_PerfInsights.md)。

MySQL 會維護許多提供其操作相關資訊的狀態變數。此值可協助您偵測資料庫執行個體上的鎖定或記憶體問題。這些狀態變數的值是從上次啟動資料庫執行個體以來累積的。您可以使用 `FLUSH STATUS` 命令，將大部分狀態變數重設為 0。

為了允許在一段时間內監控這些值，Amazon RDS 提供一組程序，將在一段時間內快照這些狀態變數的值，並將它們以及自從上次快照後的任何變更寫入至資料表。此基礎設施 (稱為全域狀態歷史記錄 (GoSH)) 安裝在所有從版本 5.5.23 開始的 MySQL 資料庫執行個體。GoSH 預設為停用。

若要啟用 GoSH，首先從資料庫參數群組啟用事件排程器，方法是將參數 `event_scheduler` 設為 `ON`。對於執行 MySQL 5.7 的 MySQL 資料庫執行個體，同樣將參數 `show_compatibility_56` 設為 `1`。如需建立和修改資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。如需啟用此參數的副作用相關資訊，請參閱《MySQL 5.7 參考手冊》**中的 [show\$1compatibility\$156](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_show_compatibility_56)。

然後，您可以使用下表中的程序，來啟用和設定 GoSH。首先連接到您的 MySQL 資料庫執行個體，然後發出適當的命令，如下所示。如需詳細資訊，請參閱[連線至您的 MySQL 資料庫執行個體](USER_ConnectToInstance.md)。針對每個程序，執行下列命令並取代 **procedure-name**：

```
CALL procedure-name; 
```

下表列出您可以在上一個命令中用於 **procedure-name** 的所有程序。


| 程序 | 描述 | 
| --- | --- | 
| `mysql.rds_enable_gsh_collector` |  啟用 GoSH 來依據 `rds_set_gsh_collector` 指定的間隔建立預設快照。  | 
| `mysql.rds_set_gsh_collector` |  指定快照之間的間隔 (以分鐘為單位)。預設值為 5。  | 
| `mysql.rds_disable_gsh_collector` |  停用快照。  | 
| `mysql.rds_collect_global_status_history` |  隨需建立快照。  | 
| `mysql.rds_enable_gsh_rotation` |  啟用依 `mysql.rds_global_status_history` 指定的間隔將 `mysql.rds_global_status_history_old` 資料表的內容輪換至 `rds_set_gsh_rotation`。  | 
| `mysql.rds_set_gsh_rotation` |  指定資料表輪換之間的間隔 (以天為單位)。預設值為 7。  | 
| `mysql.rds_disable_gsh_rotation` |  停用資料表輪換。  | 
| `mysql.rds_rotate_global_status_history` |  隨需將 `mysql.rds_global_status_history` 資料表的內容輪換至 `mysql.rds_global_status_history_old`。  | 

當 GoSH 執行中時，您可以查詢寫入它的資料表。例如，若要查詢 Innodb 緩衝集區的命中率，您將發出下列查詢：

```
select a.collection_end, a.collection_start, (( a.variable_Delta-b.variable_delta)/a.variable_delta)*100 as "HitRatio" 
    from mysql.rds_global_status_history as a join mysql.rds_global_status_history as b on a.collection_end = b.collection_end
    where a. variable_name = 'Innodb_buffer_pool_read_requests' and b.variable_name = 'Innodb_buffer_pool_reads'
```

# 在 MySQL 8.4 中設定緩衝集區大小和重做日誌容量
<a name="Appendix.MySQL.CommonDBATasks.Config.Size.8.4"></a>

在 MySQL 8.4 中，Amazon RDS 預設會啟用 `innodb_dedicated_server` 參數。使用 `innodb_dedicated_server` 參數，資料庫引擎會計算 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 參數。如需如何計算這些參數的資訊，請參閱 MySQL 文件中的[設定 InnoDB 緩衝集區大小](https://dev.mysql.com/doc/refman/8.4/en/innodb-buffer-pool-resize.html)和[重做日誌](https://dev.mysql.com/doc/refman/8.4/en/innodb-redo-log.html)。

`innodb_dedicated_server` 啟用後，`innodb_buffer_pool_size` 參數會根據資料庫執行個體類別記憶體計算。下表顯示偵測到的伺服器記憶體和對應的緩衝集區大小。


| 偵測到的伺服器記憶體 | 緩衝集區大小 | 
| --- | --- | 
|  < 1 GB  |  預設值為 128 MB  | 
|  1 GB 到 4 GB  |  *偵測到的伺服器記憶體* \$1 0.5  | 
|  > 4 GB  |  *偵測到的伺服器記憶體* \$1 0.75  | 

`innodb_redo_log_capacity` 參數會隨著執行個體類別自動擴展至 (vCPU 數量 / 2) GB，上限為 16 GB。較大的執行個體類別具有較大的重做日誌容量，可改善寫入密集型工作負載的效能和彈性。

從 MySQL 8.0 升級到 MySQL 8.4 之前，請務必增加儲存空間，以因應升級完成後可能發生的重做日誌大小增加的潛在情況。如需詳細資訊，請參閱[增加資料庫執行個體的儲存容量](USER_PIOPS.ModifyingExisting.md)。

如果您不希望 `innodb_dedicated_server` 參數計算 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 參數的值，您可以透過在自訂參數群組中為其設定特定值來覆寫這些值。或者，您可以停用 `innodb_dedicated_server` 參數，並設定自訂參數群組中 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 參數的值。如需詳細資訊，請參閱[預設和自訂參數群組](parameter-groups-overview.md#parameter-groups-overview.custom)。

如果您透過將 `innodb_dedicated_server` 參數設定為 `0` 來停用參數，且未針對 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 參數設定值，則 Amazon RDS 會將後兩個參數分別設定為 128 MB 和 100 MB。這些預設值會導致較大的執行個體類別效能不佳。

# MySQL 資料庫執行個體的本機時區
<a name="MySQL.Concepts.LocalTimeZone"></a>

MySQL 資料庫執行個體的時區預設為國際標準時間 (UTC)。您也可針對應用程式，將資料庫執行個體的時區設為本機時區。

若要設定資料庫執行個體的本機時區，請將資料庫執行個體參數群組中的 `time_zone` 參數設為本節稍後所列任一支援的值。當您設定參數群組的 `time_zone` 參數後，原本使用該參數群組的所有資料庫執行個體和僅供讀取複本會改為使用新的本機時區。如需設定參數群組參數的相關資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

設定本機時區後，所有資料庫的新連線都會反映此變更。如果在您變更本機時區時有任何已開啟的連線，在您關閉連線然後開啟新連線後，才會看見本機時區更新。

您可為資料庫執行個體以及其中一或多個僅供讀取複本，設定不同的本機時區。若要執行這項操作，請為該資料庫執行個體和僅供讀取複本使用不同的參數群組，然後將各個參數群組中的 `time_zone` 參數設定為不同的本機時區。

如果您正在執行跨 AWS 區域 複寫作業，來源資料庫執行個體和僅供讀取複本會使用不同的參數群組 (參數群組為 AWS 區域 專屬)。若要在每個執行個體使用相同的本機時區，您必須設定執行個體和僅供讀取複本之參數群組中的 `time_zone` 參數。

從資料庫快照還原資料庫執行個體時，本機時區會設為 UTC。您也可在還原作業完成後，將時區更新為本機時區。如果您將資料庫執行個體還原至某個時間點，該還原資料庫執行個體的本機時區會使用還原資料庫執行個體參數群組中的時區設定。

網際網路號碼分配局 (IANA) 每年會在 [https://www.iana.org/time-zones](https://www.iana.org/time-zones) 發布數次新時區。每次 RDS 發布 MySQL 的新次要維護版本時，它都會在發布時隨附最新的時區資料。當您使用最新的 RDS for MySQL 版本時，您會有來自 RDS 的最新時區資料。為確保您的資料庫執行個體擁有最新的時區資料，建議您升級至更高的資料庫引擎版本。或者，您也可以手動修改 MariaDB 資料庫執行個體中的時區表。若要這麼做，你可以使用 SQL 命令或在 SQL 用戶端執行 [mysql\$1tzinfo\$1to\$1sql tool](https://dev.mysql.com/doc/refman/8.0/en/mysql-tzinfo-to-sql.html)。手動更新時區資料後，請重新啟動資料庫執行個體以讓變更生效。RDS 不會修改或重設執行中資料庫執行個體的時區資料。只有在您執行資料庫引擎版本升級時，才會安裝新的時區資料。

您可以將本機時區設為下列任一值。


| 區域 | 時區 | 
| --- | --- | 
|  非洲  |  非洲/開羅，非洲/卡薩布蘭卡，非洲/哈拉雷，非洲/蒙羅維亞，非洲/奈洛比，非洲/的黎波里，非洲/溫吐克  | 
|  美洲  |  America/Araguaina、America/Asuncion、America/Bogota、America/Buenos\$1Aires、America/Caracas、America/Chihuahua、America/Cuiaba、America/Denver、America/Fortaleza、America/Guatemala、America/Halifax、America/Manaus、America/Matamoros、America/Monterrey、Amer/Montevideo、America/Phoenix、Amer/Santiago、A/Tijuana  | 
|  亞洲  |  亞洲/安曼，亞洲/阿什哈巴德，亞洲/巴格達，亞洲/巴庫，亞洲/曼谷，亞洲/貝魯特，亞洲/加爾各答，亞洲/大馬士革，亞洲/達卡，亞洲/伊爾庫次克，亞洲/耶路撒冷，亞洲/喀布爾，亞洲/喀拉蚩，亞洲/加德滿都，亞洲/克拉斯諾雅斯克，亞洲/馬加丹，亞洲/馬斯喀特，亞洲/新西伯利亞，亞洲/利雅德，亞洲/首爾，亞洲/上海，亞洲/新加坡，亞洲/台北，亞洲/德黑蘭，亞洲/東京，亞洲/庫倫，亞洲/海參崴，亞洲/雅庫次克，亞洲/葉里溫  | 
|  大西洋  |  Atlantic/Azores  | 
|  澳洲  |  澳洲/阿德萊德，澳洲/布利斯班，澳洲/達爾文，澳洲/荷巴特，澳洲/伯斯，澳洲/雪梨  | 
|  巴西  |  巴西/迪諾羅尼亞，巴西/東部  | 
|  加拿大  |  加拿大/紐芬蘭，加拿大/薩克其萬省，加拿大/育空  | 
|  歐洲  |  歐洲/阿姆斯特丹，歐洲/雅典，歐洲/都柏林，歐洲/赫爾辛基，歐洲/伊斯坦堡，歐洲/卡里寧格勒，歐洲/莫斯科，歐洲/巴黎，歐洲/布拉格，歐洲/塞拉耶佛  | 
|  太平洋  |  太平洋/奧克蘭、太平洋/斐濟、太平洋/關島、太平洋/檀香山、太平洋/薩摩亞  | 
|  美國  |  美國/阿拉斯加，美國/中部，美國/東印第安納州，美國/東部，美國/太平洋  | 
|  UTC  |  UTC  | 

# 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 耗用量。

# RDS for MySQL 預存程序參考
<a name="Appendix.MySQL.SQLRef"></a>

這些主題描述執行 MySQL 資料庫引擎之 Amazon RDS 執行個體可用的系統預存程序。主要使用者必須執行這些程序。

**Topics**
+ [

# 收集和維護全域狀態歷史記錄
](mysql-stored-proc-gsh.md)
+ [

# 設定、啟動和停止二進位日誌 (binlog) 複寫
](mysql-stored-proc-replicating.md)
+ [

# 結束工作階段或查詢
](mysql-stored-proc-ending.md)
+ [

# 管理主動-主動叢集
](mysql-stored-proc-active-active-clusters.md)
+ [

# 管理多來源複寫
](mysql-stored-proc-multi-source-replication.md)
+ [

# 使用 GTID 複寫交易
](mysql-stored-proc-gtid.md)
+ [

# 輪換查詢日誌
](mysql-stored-proc-logging.md)
+ [

# 設定和顯示二進位日誌組態
](mysql-stored-proc-configuring.md)
+ [

# 預備 InnoDB 快取
](mysql-stored-proc-warming.md)

# 收集和維護全域狀態歷史記錄
<a name="mysql-stored-proc-gsh"></a>

Amazon RDS 會提供一組程序，將在一段時間內快照狀態變數的值，並將它們以及自從上次快照後的任何變更寫入至資料表。此基礎設施稱為「全域狀態歷史記錄」。如需詳細資訊，請參閱[管理 RDS for MySQL 的全域狀態歷史記錄](Appendix.MySQL.CommonDBATasks.GoSH.md)。

下列預存程序會管理收集及維護「全域狀態歷史記錄」的方式。

**Topics**
+ [

## mysql.rds\$1collect\$1global\$1status\$1history
](#mysql_rds_collect_global_status_history)
+ [

## mysql.rds\$1disable\$1gsh\$1collector
](#mysql_rds_disable_gsh_collector)
+ [

## mysql.rds\$1disable\$1gsh\$1rotation
](#mysql_rds_disable_gsh_rotation)
+ [

## mysql.rds\$1enable\$1gsh\$1collector
](#mysql_rds_enable_gsh_collector)
+ [

## mysql.rds\$1enable\$1gsh\$1rotation
](#mysql_rds_enable_gsh_rotation)
+ [

## mysql.rds\$1rotate\$1global\$1status\$1history
](#mysql_rds_rotate_global_status_history)
+ [

## mysql.rds\$1set\$1gsh\$1collector
](#mysql_rds_set_gsh_collector)
+ [

## mysql.rds\$1set\$1gsh\$1rotation
](#mysql_rds_set_gsh_rotation)

## mysql.rds\$1collect\$1global\$1status\$1history
<a name="mysql_rds_collect_global_status_history"></a>

隨需建立全域狀態歷史記錄的快照。

### 語法
<a name="rds_collect_global_status_history-syntax"></a>

 

```
CALL mysql.rds_collect_global_status_history;
```

## mysql.rds\$1disable\$1gsh\$1collector
<a name="mysql_rds_disable_gsh_collector"></a>

停用全域狀態歷史記錄建立的快照。

### 語法
<a name="mysql_rds_disable_gsh_collector-syntax"></a>

 

```
CALL mysql.rds_disable_gsh_collector;
```

## mysql.rds\$1disable\$1gsh\$1rotation
<a name="mysql_rds_disable_gsh_rotation"></a>

關閉 `mysql.global_status_history` 表格的輪換。

### 語法
<a name="mysql_rds_disable_gsh_rotation-syntax"></a>

 

```
CALL mysql.rds_disable_gsh_rotation;
```

## mysql.rds\$1enable\$1gsh\$1collector
<a name="mysql_rds_enable_gsh_collector"></a>

啟用全域狀態歷史記錄來依據 `rds_set_gsh_collector` 指定的間隔建立預設快照。

### 語法
<a name="mysql_rds_enable_gsh_collector-syntax"></a>

 

```
CALL mysql.rds_enable_gsh_collector;
```

## mysql.rds\$1enable\$1gsh\$1rotation
<a name="mysql_rds_enable_gsh_rotation"></a>

啟用依 `mysql.global_status_history` 指定的間隔將 `mysql.global_status_history_old` 資料表的內容輪換至 `rds_set_gsh_rotation`。

### 語法
<a name="mysql_rds_enable_gsh_rotation-syntax"></a>

 

```
CALL mysql.rds_enable_gsh_rotation;
```

## mysql.rds\$1rotate\$1global\$1status\$1history
<a name="mysql_rds_rotate_global_status_history"></a>

隨需將 `mysql.global_status_history` 資料表的內容輪換至 `mysql.global_status_history_old`。

### 語法
<a name="mysql_rds_rotate_global_status_history-syntax"></a>

 

```
CALL mysql.rds_rotate_global_status_history;
```

## mysql.rds\$1set\$1gsh\$1collector
<a name="mysql_rds_set_gsh_collector"></a>

指定全域狀態歷史記錄建立快照之間的間隔 (以分鐘為單位)。

### 語法
<a name="mysql_rds_set_gsh_collector-syntax"></a>

 

```
CALL mysql.rds_set_gsh_collector(intervalPeriod);
```

### 參數
<a name="mysql_rds_set_gsh_collector-parameters"></a>

 *intervalPeriod*   
快照之間的間隔 (以分鐘為單位)。預設值為 `5`。

## mysql.rds\$1set\$1gsh\$1rotation
<a name="mysql_rds_set_gsh_rotation"></a>

指定 `mysql.global_status_history` 資料表輪換之間的間隔 (以天為單位)。

### 語法
<a name="mysql_rds_set_gsh_rotation-syntax"></a>

 

```
CALL mysql.rds_set_gsh_rotation(intervalPeriod);
```

### 參數
<a name="mysql_rds_set_gsh_rotation-parameters"></a>

 *intervalPeriod*   
資料表輪換之間的間隔 (以天為單位)。預設值為 `7`。

# 設定、啟動和停止二進位日誌 (binlog) 複寫
<a name="mysql-stored-proc-replicating"></a>

下列預存程序控制交易從外部資料庫複寫到 RDS for MySQL 中，或從 RDS for MySQL 複寫到外部資料庫的方式。

使用這些預存程序來管理使用者以 `caching_sha2_password` 設定的複寫進行的複寫，您必須透過指定 `SOURCE_SSL=1` 來設定 TLS。`caching_sha2_password` 是 RDS for MySQL 8.4 的預設身分驗證外掛程式。如需詳細資訊，請參閱 [使用 SSL/TLS 加密](mysql-ssl-connections.md)。

如需有關設定、使用和管理讀取複本的詳細資訊，請參閱 [使用 MySQL 僅供讀取複本](USER_MySQL.Replication.ReadReplicas.md)。

**Topics**
+ [

## mysql.rds\$1next\$1master\$1log (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）
](#mysql_rds_next_master_log)
+ [

## mysql.rds\$1next\$1source\$1log (RDS for MySQL 主要版本 8.4 及更高版本)
](#mysql_rds_next_source_log)
+ [

## mysql.rds\$1reset\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)
](#mysql_rds_reset_external_master)
+ [

## mysql.rds\$1reset\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)
](#mysql_rds_reset_external_source)
+ [

## mysql.rds\$1set\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)
](#mysql_rds_set_external_master)
+ [

## mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)
](#mysql_rds_set_external_source)
+ [

## mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position (RDS for MySQL 主要版本 8.0 及更低版本)
](#mysql_rds_set_external_master_with_auto_position)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position (RDS for MySQL 主要版本 8.4 及更新版本)
](#mysql_rds_set_external_source_with_auto_position)
+ [

## mysql.rds\$1set\$1external\$1master\$1with\$1delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)
](#mysql_rds_set_external_master_with_delay)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1delay (RDS for MySQL 主要版本 8.4 及更新版本)
](#mysql_rds_set_external_source_with_delay)
+ [

## mysql.rds\$1set\$1external\$1source\$1gtid\$1purged
](#mysql_rds_set_external_source_gtid_purged)
+ [

## mysql.rds\$1set\$1master\$1auto\$1position (RDS for MySQL 主要版本 8.0 及更低版本）
](#mysql_rds_set_master_auto_position)
+ [

## mysql.rds\$1set\$1source\$1auto\$1position (RDS for MySQL 主要版本 8.4 及更新版本)
](#mysql_rds_set_source_auto_position)
+ [

## mysql.rds\$1set\$1source\$1delay
](#mysql_rds_set_source_delay)
+ [

## mysql.rds\$1skip\$1repl\$1error
](#mysql_rds_skip_repl_error)
+ [

## mysql.rds\$1start\$1replication
](#mysql_rds_start_replication)
+ [

## mysql.rds\$1start\$1replication\$1until
](#mysql_rds_start_replication_until)
+ [

## mysql.rds\$1stop\$1replication
](#mysql_rds_stop_replication)

## mysql.rds\$1next\$1master\$1log (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）
<a name="mysql_rds_next_master_log"></a>

將來源資料庫執行個體日誌位置變更為來源資料庫執行個體上下一個二進位日誌的開頭。只有當您在僅供讀取複本上收到複寫輸入/輸出錯誤 1236 時，才使用此程序。

### 語法
<a name="mysql_rds_next_master_log-syntax"></a>

 

```
CALL mysql.rds_next_master_log(
curr_master_log
);
```

### 參數
<a name="mysql_rds_next_master_log-parameters"></a>

 *curr\$1master\$1log*   
目前主控端日誌檔案的索引。例如，若目前檔案的名稱是 `mysql-bin-changelog.012345`，則索引為 12345。若要查明目前主控端日誌檔案名稱，請執行 `SHOW REPLICA STATUS` 命令並檢視 `Master_Log_File` 欄位。

### 使用須知
<a name="mysql_rds_next_master_log-usage-notes"></a>

主要使用者必須執行 `mysql.rds_next_master_log` 程序。

**警告**  
只有當複寫來源的異地同步備份資料庫執行個體在容錯移轉之後複寫失敗時，且 `mysql.rds_next_master_log` 的 `Last_IO_Errno` 欄位報告輸入/輸出錯誤 1236，才呼叫 `SHOW REPLICA STATUS`。  
在容錯移轉事件發生之前，如果來源執行個體中的交易未寫入磁碟上的二進位日誌，則呼叫 `mysql.rds_next_master_log` 會導致僅供讀取複本遺失資料。您可以將來源執行個體參數 `sync_binlog` 和 `innodb_support_xa` 設為 `1`，以降低此情況發生的機率，雖然這麼做會降低效能。如需詳細資訊，請參閱 [對 MySQL 僅供讀取複本問題進行故障診斷](USER_ReadRepl.Troubleshooting.md)。

### 範例
<a name="mysql_rds_next_master_log-examples"></a>

假設 RDS for MySQL 僅供讀取複本上的複寫失敗。在僅供讀取複本上執行 `SHOW REPLICA STATUS\G` 將傳回下列結果：

```
*************************** 1. row ***************************
             Replica_IO_State:
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: MasterUser
                  Source_Port: 3306
                Connect_Retry: 10
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: relaylog.012340
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 30223232
              Relay_Log_Space: 5248928866
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Master: NULL
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 67285976
```

`Last_IO_Errno` 欄位顯示執行個體收到輸入/輸出錯誤 1236。`Master_Log_File` 欄位顯示檔案名稱是 `mysql-bin-changelog.012345`，這表示日誌檔案索引為 `12345`。若要解決錯誤，您可以呼叫 `mysql.rds_next_master_log` 並指定下列參數：

```
CALL mysql.rds_next_master_log(12345);
```

## mysql.rds\$1next\$1source\$1log (RDS for MySQL 主要版本 8.4 及更高版本)
<a name="mysql_rds_next_source_log"></a>

將來源資料庫執行個體日誌位置變更為來源資料庫執行個體上下一個二進位日誌的開頭。只有當您在僅供讀取複本上收到複寫輸入/輸出錯誤 1236 時，才使用此程序。

### 語法
<a name="mysql_rds_next_source_log-syntax"></a>

 

```
CALL mysql.rds_next_source_log(
curr_source_log
);
```

### Parameters
<a name="mysql_rds_next_source_log-parameters"></a>

 *curr\$1source\$1log*   
目前來源日誌檔案的索引。例如，若目前檔案的名稱是 `mysql-bin-changelog.012345`，則索引為 12345。若要查明目前來源日誌檔案名稱，請執行 `SHOW REPLICA STATUS` 命令並檢視 `Source_Log_File` 欄位。

### 使用須知
<a name="mysql_rds_next_source_log-usage-notes"></a>

管理使用者必須執行 `mysql.rds_next_source_log` 程序。

**警告**  
只有當複寫來源的異地同步備份資料庫執行個體在容錯移轉之後複寫失敗時，且 `mysql.rds_next_source_log` 的 `Last_IO_Errno` 欄位報告輸入/輸出錯誤 1236，才呼叫 `SHOW REPLICA STATUS`。  
在容錯移轉事件發生之前，如果來源執行個體中的交易未寫入磁碟上的二進位日誌，則呼叫 `mysql.rds_next_source_log` 會導致僅供讀取複本遺失資料。您可以將來源執行個體參數 `sync_binlog` 和 `innodb_support_xa` 設為 `1`，以降低此情況發生的機率，雖然這麼做會降低效能。如需詳細資訊，請參閱 [對 MySQL 僅供讀取複本問題進行故障診斷](USER_ReadRepl.Troubleshooting.md)。

### 範例
<a name="mysql_rds_next_source_log-examples"></a>

假設 RDS for MySQL 僅供讀取複本上的複寫失敗。在僅供讀取複本上執行 `SHOW REPLICA STATUS\G` 將傳回下列結果：

```
*************************** 1. row ***************************
             Replica_IO_State:
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: MasterUser
                  Source_Port: 3306
                Connect_Retry: 10
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: relaylog.012340
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 30223232
              Relay_Log_Space: 5248928866
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: NULL
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Client requested source to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 67285976
```

`Last_IO_Errno` 欄位顯示執行個體收到輸入/輸出錯誤 1236。`Source_Log_File` 欄位顯示檔案名稱是 `mysql-bin-changelog.012345`，這表示日誌檔案索引為 `12345`。若要解決錯誤，您可以呼叫 `mysql.rds_next_source_log` 並指定下列參數：

```
CALL mysql.rds_next_source_log(12345);
```

## mysql.rds\$1reset\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)
<a name="mysql_rds_reset_external_master"></a>

將 RDS for MySQL 資料庫執行個體重新設定為不再是 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_reset_external_master-syntax"></a>

 

```
CALL mysql.rds_reset_external_master;
```

### 使用須知
<a name="mysql_rds_reset_external_master-usage-notes"></a>

主要使用者必須執行 `mysql.rds_reset_external_master` 程序。此程序必須在要做為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的將被移除的 MySQL 資料庫執行個體上執行。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

如需使用複寫從 Amazon RDS 外部執行的 MySQL 執行個體匯入資料的詳細資訊，請參閱[使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

## mysql.rds\$1reset\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)
<a name="mysql_rds_reset_external_source"></a>

將 RDS for MySQL 資料庫執行個體重新設定為不再是 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_reset_external_source-syntax"></a>

 

```
CALL mysql.rds_reset_external_source;
```

### 使用須知
<a name="mysql_rds_reset_external_source-usage-notes"></a>

管理使用者必須執行 `mysql.rds_reset_external_source` 程序。此程序必須在要做為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的將被移除的 MySQL 資料庫執行個體上執行。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。  
如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。如需使用複寫從 Amazon RDS 外部執行的 MySQL 執行個體匯入資料的詳細資訊，請參閱[使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

## mysql.rds\$1set\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)
<a name="mysql_rds_set_external_master"></a>

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

**注意**  
您可以使用 [mysql.rds\$1set\$1external\$1master\$1with\$1delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_set_external_master_with_delay) 預存程序來設定外部來源資料庫執行個體與延遲的複寫。

### 語法
<a name="mysql_rds_set_external_master-syntax"></a>

 

```
CALL mysql.rds_set_external_master (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
);
```

### 參數
<a name="mysql_rds_set_external_master-parameters"></a>

 *host\$1name*   
要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

 *host\$1port*   
要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
在 Amazon RDS 外部執行的 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *mysql\$1binary\$1log\$1file\$1name*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *mysql\$1binary\$1log\$1file\$1location*   
複寫在 `mysql_binary_log_file_name` 二進位日誌中開始讀取複寫資訊的位置。  
您可以藉由在來源資料庫執行個體上執行 `SHOW MASTER STATUS` 來判斷 binlog 檔案名稱和位置。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `MASTER_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

### 使用須知
<a name="mysql_rds_set_external_master-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_external_master` 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

在執行 `mysql.rds_set_external_master` 之前，您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線至 Amazon RDS 外部執行的 MySQL 執行個體，您必須指定 `replication_user_name` 和 `replication_user_password` 值，以指出在外部 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的複寫使用者。

**將外部 MySQL 執行個體設定為來源資料庫執行個體**

1. 使用您選擇的 MySQL 用戶端，連線至外部 MySQL 執行個體，並建立用於複寫的使用者帳戶。下列是 範例。

   **MySQL 5.7**

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```

   **MySQL 8.0**

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY 'password';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 在外部 MySQL 執行個體上，將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 'repl\$1user' 使用者。

   **MySQL 5.7**

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```

   **MySQL 8.0**

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

若要使用加密複寫，請將來源資料庫執行個體設定為使用 SSL 連線。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_master` 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication) 來啟動複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_reset_external_master) 來移除僅供讀取複本組態。

呼叫 `mysql.rds_set_external_master` 時，Amazon RDS 將時間、使用者和 `set master` 的動作記錄在 `mysql.rds_history` 和 `mysql.rds_replication_status` 資料表中。

### 範例
<a name="mysql_rds_set_external_master-examples"></a>

在 MySQL 資料庫執行個體上執行時，下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

```
call mysql.rds_set_external_master(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  1);
```

## mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)
<a name="mysql_rds_set_external_source"></a>

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_source-syntax"></a>

 

```
CALL mysql.rds_set_external_source (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
);
```

### 參數
<a name="mysql_rds_set_external_source-parameters"></a>

 *host\$1name*   
要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

 *host\$1port*   
要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
在 Amazon RDS 外部執行的 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *mysql\$1binary\$1log\$1file\$1name*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *mysql\$1binary\$1log\$1file\$1location*   
複寫在 `mysql_binary_log_file_name` 二進位日誌中開始讀取複寫資訊的位置。  
您可以藉由在來源資料庫執行個體上執行 `SHOW MASTER STATUS` 來判斷 binlog 檔案名稱和位置。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設值為 0。  
不支援 `SOURCE_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

### 使用須知
<a name="mysql_rds_set_external_source-usage-notes"></a>

管理使用者必須執行 `mysql.rds_set_external_source` 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 RDS for MySQL 資料庫執行個體上執行。

 在執行 `mysql.rds_set_external_source` 之前，您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線至 Amazon RDS 外部執行的 MySQL 執行個體，您必須指定 `replication_user_name` 和 `replication_user_password` 值，以指出在外部 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的複寫使用者。

**將外部 MySQL 執行個體設定為來源資料庫執行個體**

1. 使用您選擇的 MySQL 用戶端，連線至外部 MySQL 執行個體，並建立用於複寫的使用者帳戶。下列是 範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 在外部 MySQL 執行個體上，將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 'repl\$1user' 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

若要使用加密複寫，請將來源資料庫執行個體設定為使用 SSL 連線。此外，使用 [mysql.rds\$1import\$1binlog\$1ssl\$1material](url-rds-user;mysql_rds_import_binlog_ssl_material.html) 程序，將憑證授權單位憑證、用戶端憑證和用戶端金鑰匯入資料庫執行個體或資料庫叢集。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_source` 將 RDS for MySQL 資料庫執行個體設定為僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication) 來啟動複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](#mysql_rds_reset_external_source) 來移除僅供讀取複本組態。

呼叫 `mysql.rds_set_external_source` 時，Amazon RDS 將時間、使用者和 `set master` 的動作記錄在 `mysql.rds_history` 和 `mysql.rds_replication_status` 資料表中。

### 範例
<a name="mysql_rds_set_external_source-examples"></a>

在 RDS for MySQL 資料庫執行個體上執行時，下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。

```
call mysql.rds_set_external_source(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  1);
```

## mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position (RDS for MySQL 主要版本 8.0 及更低版本)
<a name="mysql_rds_set_external_master_with_auto_position"></a>

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。此程序也會依據全域交易識別符 (GTID) 設定延遲複寫和複寫。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_master_with_auto_position-syntax"></a>

 

```
CALL mysql.rds_set_external_master_with_auto_position (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
);
```

### 參數
<a name="mysql_rds_set_external_master_with_auto_position-parameters"></a>

 *host\$1name*   
要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

 *host\$1port*   
要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
在 Amazon RDS 外部執行的 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `MASTER_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

### 使用須知
<a name="mysql_rds_set_external_master_with_auto_position-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_external_master_with_auto_position` 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

RDS for MySQL 5.7 版，以及 RDS for MySQL 8.0.26 版和更新的 8.0 版都支援此程序。

在執行 `mysql.rds_set_external_master_with_auto_position` 之前，您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體，您必須指定 `replication_user_name` 和 `replication_user_password` 的值。這些值必須指明具有 MySQL 外部執行個體 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的複寫使用者。

**將外部 MySQL 執行個體設定為來源資料庫執行個體**

1. 使用您選擇的 MySQL 用戶端，連線至外部 MySQL 執行個體，並建立用於複寫的使用者帳戶。以下是範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. 在外部 MySQL 執行個體上，將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 `'repl_user'` 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com'
   IDENTIFIED BY 'SomePassW0rd'
   ```

如需更多詳細資訊，請參閱 [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_master_with_auto_position` 之前，請務必呼叫 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](#mysql_rds_set_external_source_gtid_purged)，以從外部來源設定具有指定 GTID 範圍的 `gtid_purged` 系統變數。

呼叫 `mysql.rds_set_external_master_with_auto_position` 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication) 來啟動複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_reset_external_master) 來移除僅供讀取複本組態。

當您呼叫 `mysql.rds_set_external_master_with_auto_position`，Amazon RDS 會將時間、使用者、`set master` 的動作記錄在 `mysql.rds_history` 和 `mysql.rds_replication_status` 資料表中。

進行災難復原時，您可以透過 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序來使用此程序。若要變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點，可以執行 `mysql.rds_set_external_master_with_auto_position` 程序。在 `mysql.rds_start_replication_until_gtid` 程序停止複寫後，您可使用 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md) 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 `mysql.rds_rds_start_replication_until_gtid` 程序，需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易，可以使用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 預存程序。如需有關依據 GTID 複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

### 範例
<a name="mysql_rds_set_external_master_with_auto_position-examples"></a>

在 MySQL 資料庫執行個體上執行時，下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體，其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

```
call mysql.rds_set_external_master_with_auto_position(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position (RDS for MySQL 主要版本 8.4 及更新版本)
<a name="mysql_rds_set_external_source_with_auto_position"></a>

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。此程序也會依據全域交易識別符 (GTID) 設定延遲複寫和複寫。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_source_with_auto_position-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_auto_position (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
);
```

### 參數
<a name="mysql_rds_set_external_source_with_auto_position-parameters"></a>

 *host\$1name*   
要成為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 的主機名稱或 IP 地址。

 *host\$1port*   
要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
在 Amazon RDS 外部執行的 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `SOURCE_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

### 使用須知
<a name="mysql_rds_set_external_source_with_auto_position-usage-notes"></a>

管理使用者必須執行 `mysql.rds_set_external_source_with_auto_position` 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

在執行 `mysql.rds_set_external_source_with_auto_position` 之前，您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體，您必須指定 `replication_user_name` 和 `replication_user_password` 的值。這些值必須指明具有 MySQL 外部執行個體 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的複寫使用者。

**將外部 MySQL 執行個體設定為來源資料庫執行個體**

1. 使用您選擇的 MySQL 用戶端，連線至外部 MySQL 執行個體，並建立用於複寫的使用者帳戶。以下是範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. 在外部 MySQL 執行個體上，將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 `'repl_user'` 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com'
   IDENTIFIED BY 'SomePassW0rd'
   ```

如需更多詳細資訊，請參閱 [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_source_with_auto_position` 之前，請務必呼叫 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](#mysql_rds_set_external_source_gtid_purged)，以從外部來源設定具有指定 GTID 範圍的 `gtid_purged` 系統變數。

呼叫 `mysql.rds_set_external_source_with_auto_position` 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication) 來啟動複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](#mysql_rds_reset_external_source) 來移除僅供讀取複本組態。

當您呼叫 `mysql.rds_set_external_source_with_auto_position`，Amazon RDS 會將時間、使用者、`set master` 的動作記錄在 `mysql.rds_history` 和 `mysql.rds_replication_status` 資料表中。

進行災難復原時，您可以透過 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序來使用此程序。若要變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點，可以執行 `mysql.rds_set_external_source_with_auto_position` 程序。在 `mysql.rds_start_replication_until_gtid` 程序停止複寫後，您可使用 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md) 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 `mysql.rds_rds_start_replication_until_gtid` 程序，需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易，可以使用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 預存程序。如需有關依據 GTID 複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

### 範例
<a name="mysql_rds_set_external_source_with_auto_position-examples"></a>

在 MySQL 資料庫執行個體上執行時，下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體，其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

```
call mysql.rds_set_external_source_with_auto_position(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1master\$1with\$1delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)
<a name="mysql_rds_set_external_master_with_delay"></a>

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本，並設定延遲複寫。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_master_with_delay-syntax"></a>

 

```
CALL mysql.rds_set_external_master_with_delay(
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
);
```

### 參數
<a name="mysql_rds_set_external_master_with_delay-parameters"></a>

 *host\$1name*   
要成為來源資料庫執行個體、在 Amazon RDS 外部執行的 MySQL 執行個體的主機名稱或 IP 地址。

 *host\$1port*   
要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的 SSH 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
在 Amazon RDS 外部執行的 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *mysql\$1binary\$1log\$1file\$1name*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *mysql\$1binary\$1log\$1file\$1location*   
在 `mysql_binary_log_file_name` 二進位日誌中的複寫將開始讀取複寫資訊的位置。  
您可以藉由在來源資料庫執行個體上執行 `SHOW MASTER STATUS` 來判斷 binlog 檔案名稱和位置。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `MASTER_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

### 使用須知
<a name="mysql_rds_set_external_master_with_delay-usage-notes"></a>

 主要使用者必須執行 `mysql.rds_set_external_master_with_delay` 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

 在執行 `mysql.rds_set_external_master_with_delay` 之前，您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體，您必須指定 `replication_user_name` 和 `replication_user_password` 的值。這些值必須指明具有 MySQL 外部執行個體 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的複寫使用者。

**將外部 MySQL 執行個體設定為來源資料庫執行個體**

1. 使用您選擇的 MySQL 用戶端，連線至外部 MySQL 執行個體，並建立用於複寫的使用者帳戶。以下是範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. 在外部 MySQL 執行個體上，將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 `'repl_user'` 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com'
   IDENTIFIED BY 'SomePassW0rd'
   ```

如需更多詳細資訊，請參閱 [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_master_with_delay` 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication) 來啟動複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_reset_external_master) 來移除僅供讀取複本組態。

當您呼叫 `mysql.rds_set_external_master_with_delay`，Amazon RDS 會將時間、使用者、`set master` 的動作記錄在 `mysql.rds_history` 和 `mysql.rds_replication_status` 資料表中。

進行災難復原時，您可以透過 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序來使用此程序。若要變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點，可以執行 `mysql.rds_set_external_master_with_delay` 程序。在 `mysql.rds_start_replication_until` 程序停止複寫後，您可使用 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md) 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 `mysql.rds_rds_start_replication_until_gtid` 程序，需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易，可以使用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 預存程序。如需有關依據 GTID 複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

以下的 RDS for MySQL 版本中可使用 `mysql.rds_set_external_master_with_delay` 程序：
+ MySQL 8.0.26 和更新的 8.0 版
+ 所有 5.7 版

### 範例
<a name="mysql_rds_set_external_master_with_delay-examples"></a>

在 MySQL 資料庫執行個體上執行時，下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體，其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

```
call mysql.rds_set_external_master_with_delay(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1source\$1with\$1delay (RDS for MySQL 主要版本 8.4 及更新版本)
<a name="mysql_rds_set_external_source_with_delay"></a>

將 RDS for MySQL 資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本，並設定延遲複寫。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_source_with_delay-syntax"></a>

```
CALL mysql.rds_set_external_source_with_delay (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
);
```

### 參數
<a name="mysql_rds_set_external_source_with_delay-parameters"></a>

 *host\$1name*   
要成為來源資料庫執行個體、在 Amazon RDS 外部執行的 MySQL 執行個體的主機名稱或 IP 地址。

 *host\$1port*   
要設定為來源資料庫執行個體之 MySQL 執行個體 (在 Amazon RDS 外部執行) 所使用的連線埠。如果網路組態包含會轉換連線埠號碼的 SSH 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
在 Amazon RDS 外部執行的 MySQL 執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於外部執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *mysql\$1binary\$1log\$1file\$1name*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *mysql\$1binary\$1log\$1file\$1location*   
在 `mysql_binary_log_file_name` 二進位日誌中的複寫將開始讀取複寫資訊的位置。  
您可以藉由在來源資料庫執行個體上執行 `SHOW MASTER STATUS` 來判斷 binlog 檔案名稱和位置。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `SOURCE_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

### 使用須知
<a name="mysql_rds_set_external_source_with_delay-usage-notes"></a>

管理使用者必須執行 `mysql.rds_set_external_source_with_delay` 程序。此程序必須在要設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 之僅供讀取複本的 MySQL 資料庫執行個體上執行。

 在執行 `mysql.rds_set_external_source_with_delay` 之前，您必須將 Amazon RDS 外部執行的 MySQL 執行個體設定為來源資料庫執行個體。若要連線到 Amazon RDS 外部執行的 MySQL 執行個體，您必須指定 `replication_user_name` 和 `replication_user_password` 的值。這些值必須指明具有 MySQL 外部執行個體 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的複寫使用者。

**將外部 MySQL 執行個體設定為來源資料庫執行個體**

1. 使用您選擇的 MySQL 用戶端，連線至外部 MySQL 執行個體，並建立用於複寫的使用者帳戶。以下是範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
   ```

1. 在外部 MySQL 執行個體上，將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 `'repl_user'` 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com'
   IDENTIFIED BY 'SomePassW0rd'
   ```

如需更多詳細資訊，請參閱 [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)。

**注意**  
如果可能，建議您使用僅供讀取複本來管理兩個 Amazon RDS 資料庫執行個體間的複寫。當您這麼做時，建議您僅使用此程序和其他與複寫相關的預存程序。這些做法使得 Amazon RDS 資料庫執行個體之間能夠實行更複雜的複寫拓撲。我們提供這些預存程序主要是為了對 Amazon RDS 外部執行的 MySQL 執行個體啟用複寫。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_source_with_delay` 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication) 來啟動複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](#mysql_rds_reset_external_source) 來移除僅供讀取複本組態。

當您呼叫 `mysql.rds_set_external_source_with_delay`，Amazon RDS 會將時間、使用者、`set master` 的動作記錄在 `mysql.rds_history` 和 `mysql.rds_replication_status` 資料表中。

進行災難復原時，您可以透過 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序來使用此程序。若要變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點，可以執行 `mysql.rds_set_external_source_with_delay` 程序。在 `mysql.rds_start_replication_until` 程序停止複寫後，您可使用 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md) 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 `mysql.rds_rds_start_replication_until_gtid` 程序，需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易，可以使用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 預存程序。如需有關依據 GTID 複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

### 範例
<a name="mysql_rds_set_external_master_with_delay-examples"></a>

在 MySQL 資料庫執行個體上執行時，下列範例會將資料庫執行個體設定為 MySQL 執行個體 (在 Amazon RDS 外部執行) 的僅供讀取複本。它會在 MySQL 資料庫執行個體上設最小複寫延遲為一小時 (3600 秒)。在 Amazon RDS 外部執行的 MySQL 來源資料庫執行個體，其中變更至少一小時內不會套用在 MySQL 資料庫執行個體僅供讀取複本上。

```
call mysql.rds_set_external_source_with_delay(
  'Externaldb.some.com',
  3306,
  'repl_user',
  'SomePassW0rd',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600);
```

## mysql.rds\$1set\$1external\$1source\$1gtid\$1purged
<a name="mysql_rds_set_external_source_gtid_purged"></a>

從外部來源設定具有指定 GTID 範圍的 [gtid\$1purged](https://dev.mysql.com/doc/refman/8.0/en/replication-options-gtids.html#sysvar_gtid_purged) 系統變數。設定 GTID 型複寫以使用自動定位繼續複寫時需要 `gtid_purged` 值。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_source_gtid_purged-syntax"></a>

 

```
CALL mysql.rds_set_external_source_gtid_purged(
  server_uuid
  , start_pos
  , end_pos
);
```

### Parameters
<a name="mysql_rds_set_external_source_gtid_purged-parameters"></a>

 *server\$1uuid*   
要匯入 GTID 範圍之外部伺服器的通用唯一識別符 (UUID)。

 *start\$1pos*   
要設定的 GTID 範圍開始位置。

 *end\$1pos*   
要設定的 GTID 範圍結束位置。

### 使用須知
<a name="mysql_rds_set_external_source_gtid_purged-usage-notes"></a>

`mysql.rds_set_external_source_gtid_purged` 程序僅適用於 MySQL 8.0.37 和更新的 8.0 版本。

在呼叫 [mysql.rds\$1set\$1external\$1master\$1with\$1auto\$1position (RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_set_external_master_with_auto_position)、[mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position (RDS for MySQL 主要版本 8.4 及更新版本)](#mysql_rds_set_external_source_with_auto_position) 或 [mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel](mysql-stored-proc-multi-source-replication.md#mysql_rds_set_external_source_with_auto_position_for_channel) 之前，請先呼叫 `mysql.rds_set_external_source_gtid_purged`。

在呼叫 `mysql.rds_set_external_source_gtid_purged` 之前，請務必停止資料庫的所有作用中複寫通道。若要檢查通道的狀態，請使用 `SHOW REPLICA STATUS` MySQL 陳述式。若要停止通道上的複寫，請呼叫 [mysql.rds\$1stop\$1replication\$1for\$1channel](mysql-stored-proc-multi-source-replication.md#mysql_rds_stop_replication_for_channel)。

您指定的 GTID 範圍必須是現有 `GTID_PURGED` 值的超集。此預存程序會在設定 `GTID_PURGED` 值之前檢查下列值：
+ `server_uuid` 有效。
+ `start_pos` 的值大於 `0` 的值且小於 `end_pos` 的值。
+ `end_pos` 的值大於或等於 `start_pos` 的值。

如果在外部伺服器上設定的 GTID 包含多個值範圍，請考慮使用不同的 GTID 設定值多次呼叫程序。

當您呼叫 `mysql.rds_set_external_source_gtid_purged` 時，Amazon RDS 會將時間、使用者、`set gtid_purged` 的動作記錄在 `mysql.rds_history` 資料表中。

如果您未針對用於複寫的備份適當設定 `gtid_purged` 值，這可能會導致複寫程序期間交易遺失或重複。執行下列步驟來設定正確的 `gtid_purged` 值。

**在複本上設定 gtid\$1purged 值**

1. 決定要使用做為複寫起點的時間點或特定備份檔案。這可以是邏輯備份 (mysqldump 檔案) 或實體備份 (Amazon RDS 快照)。

1. 決定 `gtid_executed` 值。此值代表在伺服器上提交的所有 GTID 集合。若要擷取此值，請在來源執行個體上執行下列其中一項操作：
   + 在進行備份時執行 SQL 陳述式 `SELECT @@GLOBAL.GTID_EXECUTED;`。
   + 如果個別備份公用程式中包含任何相關選項，請從備份檔案擷取值。如需詳細資訊，請參閱 MySQL 文件中的 [set-gtid-purged](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html#option_mysqldump_set-gtid-purged) 選項。

1. 決定要用於呼叫 `mysql.rds_set_external_source_gtid_purged` 的 `gtid_purged` 值。`gtid_purged` 值應該包含已在來源執行個體上執行且不再需要複寫的所有 GTID。因此，`gtid_purged` 值應該是您在上一個步驟中擷取之 `gtid_executed` 值的子集。

   若要判斷 `gtid_purged` 值，請識別未包含在備份中且不再需要複寫的 GTID。您可以透過分析二進制日誌或使用 mysqlbinlog 等工具，尋找已從二進制日誌中清除的 GTID，藉以執行此操作。

   或者，如果您有一個一致的備份，其中包含備份點之前的所有二進制日誌，您可以將 `gtid_purged` 值設定為與備份點的 `gtid_executed` 值相同。

1. 在您確定與備份一致的適當 `gtid_purged` 值後，請呼叫 RDS for MySQL 資料庫執行個體上的 `mysql.rds_set_external_source_gtid_purged` 預存程序來設定該值。

### 範例
<a name="mysql_rds_set_external_source_gtid_purged-examples"></a>

在 MySQL 資料庫執行個體上執行時，下列範例會設定來自外部 MySQL 伺服器的 GTID 範圍，其 UUID 為 `12345678-abcd-1234-efgh-123456789abc`，起始位置為 `1`，結束位置為 `100`。產生的 GTID 值設定為 `+12345678-abcd-1234-efgh-123456789abc:1-100`。

```
CALL mysql.rds_set_external_source_gtid_purged('12345678-abcd-1234-efgh-123456789abc', 1, 100);
```

## mysql.rds\$1set\$1master\$1auto\$1position (RDS for MySQL 主要版本 8.0 及更低版本）
<a name="mysql_rds_set_master_auto_position"></a>

將複寫模式設為依據二進制日誌檔案位置或全域交易識別符 (GTID)。

### 語法
<a name="mysql_rds_set_master_auto_position-syntax"></a>

 

```
CALL mysql.rds_set_master_auto_position (
auto_position_mode
);
```

### 參數
<a name="mysql_rds_set_master_auto_position-parameters"></a>

 *auto\$1position\$1mode*   
此值指示要使用日誌檔案位置複寫或是 GTID 複寫：  
+ `0` – 使用依據二進制日誌檔案位置的複寫模式。預設值為 `0`。
+ `1` – 使用依據 GTID 的複寫方法。

### 使用須知
<a name="mysql_rds_set_master_auto_position-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_master_auto_position` 程序。

RDS for MySQL 5.7 版，以及 RDS for MySQL 8.0.26 版和更新的 8.0 版都支援此程序。

## mysql.rds\$1set\$1source\$1auto\$1position (RDS for MySQL 主要版本 8.4 及更新版本)
<a name="mysql_rds_set_source_auto_position"></a>

將複寫模式設為依據二進制日誌檔案位置或全域交易識別符 (GTID)。

### 語法
<a name="mysql_rds_set_source_auto_position-syntax"></a>

```
CALL mysql.rds_set_source_auto_position (auto_position_mode);
```

### 參數
<a name="mysql_rds_set_source_auto_position-parameters"></a>

*auto\$1position\$1mode*  
此值指示要使用日誌檔案位置複寫或是 GTID 複寫：  
+  `0` – 使用依據二進制日誌檔案位置的複寫模式。預設值為 `0`。
+  `1` – 使用依據 GTID 的複寫方法。

### 使用須知
<a name="mysql_rds_set_source_auto_position-usage-notes"></a>

管理使用者必須執行 `mysql.rds_set_source_auto_position` 程序。

## mysql.rds\$1set\$1source\$1delay
<a name="mysql_rds_set_source_delay"></a>

設定最低秒數，以延遲來源資料庫執行個體到目前僅供讀取複本的複寫。當您連線到僅供讀取複本時，請使用此程序來延遲從來源資料庫執行個體的複寫。

### 語法
<a name="mysql_rds_set_source_delay-syntax"></a>

```
CALL mysql.rds_set_source_delay(
delay
);
```

### 參數
<a name="mysql_rds_set_source_delay-parameters"></a>

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

### 使用須知
<a name="mysql_rds_set_source_delay-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_source_delay` 程序。

進行災難復原時，您可以透過 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 預存程序或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序來使用此程序。若要變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點，可以執行 `mysql.rds_set_source_delay` 程序。在 `mysql.rds_start_replication_until` 或 `mysql.rds_start_replication_until_gtid` 程序停止複寫後，您可使用[提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 `mysql.rds_rds_start_replication_until_gtid` 程序，需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易，可以使用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 預存程序。如需依據 GTID 複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

以下的 RDS for MySQL 版本中可使用 `mysql.rds_set_source_delay` 程序：
+ 所有 RDS for MySQL 8.4 版本
+ MySQL 8.0.26 和更新的 8.0 版
+ 所有 5.7 版

### 範例
<a name="mysql_rds_set_source_delay-examples"></a>

若要延遲來源資料庫執行個體到目前僅供讀取複本的複寫至少一小時 (3,600 秒)，您可透過下列參數呼叫 `mysql.rds_set_source_delay`：

```
CALL mysql.rds_set_source_delay(3600);
```

## mysql.rds\$1skip\$1repl\$1error
<a name="mysql_rds_skip_repl_error"></a>

略過和刪除 MySQL 資料庫僅供讀取複本上的複寫錯誤。

### 語法
<a name="mysql_rds_skip_repl_error-syntax"></a>

 

```
CALL mysql.rds_skip_repl_error;
```

### 使用須知
<a name="mysql_rds_skip_repl_error-usage-notes"></a>

主要使用者必須在僅供讀取複本上執行 `mysql.rds_skip_repl_error` 程序。如需有關此程序的詳細資訊，請參閱[呼叫 mysql.rds\$1skip\$1repl\$1error 程序](Appendix.MySQL.CommonDBATasks.SkipError.md#Appendix.MySQL.CommonDBATasks.SkipError.procedure)。

若要判斷是否有錯誤，執行 MySQL `SHOW REPLICA STATUS\G` 命令。如果複寫錯誤不嚴重，您可以執行 `mysql.rds_skip_repl_error` 來略過錯誤。如果有多個錯誤，`mysql.rds_skip_repl_error` 會刪除第一個錯誤，然後警告還有其他錯誤。然後，您可以使用 `SHOW REPLICA STATUS\G`，以針對下一個錯誤判斷正確的行動步驟。如需傳回值的相關資訊，請參閱 MySQL 文件中的 [SHOW REPLICA STATUS 陳述式](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)。

如需有關解決 Amazon RDS 複寫錯誤的詳細資訊，請參閱 [對 MySQL 僅供讀取複本問題進行故障診斷](USER_ReadRepl.Troubleshooting.md)。

#### 複寫已停止錯誤
<a name="skip_repl_error.stopped-error"></a>

當您呼叫 `mysql.rds_skip_repl_error` 程序時，可能會收到錯誤訊息，指出複本已關閉或停用。

如果您在主要執行個體而非僅供讀取複本上執行程序，此錯誤訊息就會出現。您必須在僅供讀取複本上執行此程序，程序才能運作。

如果您在僅供讀取複本上執行程序，但複寫無法成功重新啟動，此錯誤訊息也可能出現。

如果您需要略過大量錯誤，複寫延遲可能增加至超出二進位日誌(binlog) 檔案的預設保留期間。在此情況下，由於在清除 binlog 檔案之前已在僅供讀取複本上重播該檔案，您可能會遇到嚴重錯誤。此清除動作會導致複寫停止，而您將無法再呼叫 `mysql.rds_skip_repl_error` 命令來略過複寫錯誤。

透過增加 binlog 檔案在來源資料庫執行個體上保留的小時數，即可以減輕此問題。在延長二進位記錄檔保留時間之後，您可以重新啟動複寫，並視需要呼叫 `mysql.rds_skip_repl_error` 命令。

若要設定 binlog 保留時間，請使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 程序，並指定 `'binlog retention hours'`組態參數加上資料庫叢集上保留 binlog 檔案的時數。下列範例會將 binlog 檔案的保留期間設定為 48 小時。

```
CALL mysql.rds_set_configuration('binlog retention hours', 48);
```

## mysql.rds\$1start\$1replication
<a name="mysql_rds_start_replication"></a>

從 RDS for MySQL 資料庫執行個體起始複寫。

**注意**  
您可使用 [mysql.rds\$1start\$1replication\$1until](#mysql_rds_start_replication_until) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序從 RDS for MySQL 資料庫執行個體來啟動複寫，並從特定的二進位日誌檔案位置停止複寫。

### 語法
<a name="mysql_rds_start_replication-syntax"></a>

 

```
CALL mysql.rds_start_replication;
```

### 使用須知
<a name="mysql_rds_start_replication-usage-notes"></a>

主要使用者必須執行 `mysql.rds_start_replication` 程序。

如果要從 Amazon RDS 外部的 MySQL 執行個體匯入資料，請呼叫 [mysql.rds\$1set\$1external\$1master (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_set_external_master) 或 [mysql.rds\$1set\$1external\$1source (RDS for MySQL 主要版本 8.4 及更新版本)](#mysql_rds_set_external_source) 來建置複寫組態，再呼叫僅供讀取複本上的 `mysql.rds_start_replication` 來啟動複寫程序。如需詳細資訊，請參閱[將備份還原至 Amazon RDS for MySQL 資料庫執行個體](MySQL.Procedural.Importing.md)。

若要將資料匯出至 Amazon RDS 外部的 MySQL 執行個體，請在僅供讀取複本上呼叫 `mysql.rds_start_replication` 和 `mysql.rds_stop_replication` 來控制某些複寫動作，例如清除二進位日誌。如需詳細資訊，請參閱[使用複寫從 MySQL 資料庫執行個體匯出資料](MySQL.Procedural.Exporting.NonRDSRepl.md)。

您也可以對僅供讀取複本呼叫 `mysql.rds_start_replication`，以重新啟動您先前呼叫 `mysql.rds_stop_replication` 所停止的任何複寫程序。如需詳細資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

## mysql.rds\$1start\$1replication\$1until
<a name="mysql_rds_start_replication_until"></a>

從 RDS for MySQL 資料庫執行個體啟動複寫，並從特定的二進位日誌檔案位置停止複寫。

### 語法
<a name="mysql_rds_start_replication_until-syntax"></a>

 

```
CALL mysql.rds_start_replication_until (
replication_log_file
  , replication_stop_point
);
```

### 參數
<a name="mysql_rds_start_replication_until-parameters"></a>

 *replication\$1log\$1file*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *replication\$1stop\$1point *   
在 `replication_log_file` 二進位日誌中的複寫將停止的位置。

### 使用須知
<a name="mysql_rds_start_replication_until-usage-notes"></a>

主要使用者必須執行 `mysql.rds_start_replication_until` 程序。

以下的 RDS for MySQL 版本中可使用 `mysql.rds_start_replication_until` 程序：
+ 所有 RDS for MySQL 8.4 版本
+ MySQL 8.0.26 和更新的 8.0 版
+ 所有 5.7 版

您可以透過延遲複寫來使用此程序進行災難復原。若您已延遲複寫設定，您可使用此程序變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點。在此程序停止複寫後，您可使用 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md) 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

您可使用以下預存程序來設定延遲複寫：
+ [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration)
+ [mysql.rds\$1set\$1external\$1master\$1with\$1delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](#mysql_rds_set_external_master_with_delay)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1delay (RDS for MySQL 主要版本 8.4 及更新版本)](#mysql_rds_set_external_source_with_delay)
+ [mysql.rds\$1set\$1source\$1delay](#mysql_rds_set_source_delay)

`replication_log_file` 參數的指定檔名必須與來源資料庫執行個體 binlog 檔案的名稱相同。

當 `replication_stop_point` 參數指定了過去的一個停止位置，複寫即會立即停止。

### 範例
<a name="mysql_rds_start_replication_until-examples"></a>

以下範例會啟動複寫並複寫變更，直到達到 `120` 二進位日誌檔案中的位置 `mysql-bin-changelog.000777` 為止。

```
call mysql.rds_start_replication_until(
  'mysql-bin-changelog.000777',
  120);
```

## mysql.rds\$1stop\$1replication
<a name="mysql_rds_stop_replication"></a>

從 MySQL 資料庫執行個體停止複寫。

### 語法
<a name="mysql_rds_stop_replication-syntax"></a>

 

```
CALL mysql.rds_stop_replication;
```

### 使用須知
<a name="mysql_rds_stop_replication-usage-notes"></a>

主要使用者必須執行 `mysql.rds_stop_replication` 程序。

如果您要將複寫設定為從 Amazon RDS 外部執行的 MySQL 執行個體匯入資料，在匯入完成之後，請在僅供讀取複本上呼叫 `mysql.rds_stop_replication` 來停止複寫程序。如需詳細資訊，請參閱[將備份還原至 Amazon RDS for MySQL 資料庫執行個體](MySQL.Procedural.Importing.md)。

如果您要設定複寫將資料匯出至 Amazon RDS 外部的 MySQL 執行個體，請在僅供讀取複本上呼叫 `mysql.rds_start_replication` 和 `mysql.rds_stop_replication` 來控制某些複寫動作，例如清除二進位日誌。如需詳細資訊，請參閱[使用複寫從 MySQL 資料庫執行個體匯出資料](MySQL.Procedural.Exporting.NonRDSRepl.md)。

您也可以使用 `mysql.rds_stop_replication`，以停止兩個 Amazon RDS 資料庫執行個體之間的複寫。您停止複寫通常是為了在僅供讀取複本上執行長時間的操作，例如在僅供讀取複本上建立大型索引。您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication](#mysql_rds_start_replication)，以重新啟動您已停止的任何複寫程序。如需詳細資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

# 結束工作階段或查詢
<a name="mysql-stored-proc-ending"></a>

下列預存程序會結束工作階段或查詢。

**Topics**
+ [

## mysql.rds\$1kill
](#mysql_rds_kill)
+ [

## mysql.rds\$1kill\$1query
](#mysql_rds_kill_query)

## mysql.rds\$1kill
<a name="mysql_rds_kill"></a>

結束 MySQL 伺服器的連線。

### 語法
<a name="mysql_rds_kill-syntax"></a>

```
CALL mysql.rds_kill(processID);
```

### 參數
<a name="mysql_rds_kill-parameters"></a>

 *processID*   
要結束之連線執行緒的身分。

### 使用須知
<a name="mysql_rds_kill-usage-notes"></a>

MySQL 伺服器的每個連線都在個別執行緒中執行。若要結束連線，請使用 `mysql.rds_kill` 程序並傳入該連線的執行緒 ID。若要取得執行緒 ID，請使用 MySQL [SHOW PROCESSLIST](https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html) 命令。

如需限制的詳細資訊，請參閱[MySQL 預存程序限制](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures)。

### 範例
<a name="mysql_rds_kill-examples"></a>

下列範例結束執行緒 ID 為 4243 的連線：

```
CALL mysql.rds_kill(4243);
```

## mysql.rds\$1kill\$1query
<a name="mysql_rds_kill_query"></a>

結束對 MySQL 伺服器執行的查詢。

### 語法
<a name="mysql_rds_kill_query-syntax"></a>

```
CALL mysql.rds_kill_query(processID);
```

### 參數
<a name="mysql_rds_kill_query-parameters"></a>

 *processID*   
正在執行要結束之查詢的處理序或執行緒的身分。

### 使用須知
<a name="mysql_rds_kill_query-usage-notes"></a>

若要停止對 MySQL 伺服器執行的查詢，請使用 `mysql_rds_kill_query` 程序並傳入執行查詢之執行緒的連線 ID。然後程序就會終止連線。

若要取得 ID，請查詢 MySQL [INFORMATION\$1SCHEMA PROCESSLIST 資料表](https://dev.mysql.com/doc/refman/8.0/en/information-schema-processlist-table.html)或使用 MySQL [SHOW PROCESSLIST](https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html) 命令。`SHOW PROCESSLIST` 或 `SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST` 中 ID 欄的值為 *processID*。

如需限制的詳細資訊，請參閱[MySQL 預存程序限制](MySQL.KnownIssuesAndLimitations.md#MySQL.Concepts.KnownIssuesAndLimitations.KillProcedures)。

### 範例
<a name="mysql_rds_kill_query-examples"></a>

下列範例會停止查詢執行緒 ID 為 230040 的查詢：

```
CALL mysql.rds_kill_query(230040);
```

# 管理主動-主動叢集
<a name="mysql-stored-proc-active-active-clusters"></a>

下列預存程序會設定和管理 RDS for MySQL 主動-主動叢集。如需詳細資訊，請參閱 [為 RDS for MySQL 設定主動-主動叢集](mysql-active-active-clusters.md)。

這些預存程序僅適用於執行下列版本的 RDS for MySQL 資料庫執行個體：
+ 所有 MySQL 8.4 版
+ MySQL 8.0.35 和更高的次要版本

**Topics**
+ [

## mysql.rds\$1group\$1replication\$1advance\$1gtid
](#mysql_rds_group_replication_advance_gtid)
+ [

## mysql.rds\$1group\$1replication\$1create\$1user
](#mysql_rds_group_replication_create_user)
+ [

## mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel
](#mysql_rds_group_replication_set_recovery_channel)
+ [

## mysql.rds\$1group\$1replication\$1start
](#mysql_rds_group_replication_start)
+ [

## mysql.rds\$1group\$1replication\$1stop
](#mysql_rds_group_replication_stop)

## mysql.rds\$1group\$1replication\$1advance\$1gtid
<a name="mysql_rds_group_replication_advance_gtid"></a>

在目前的資料庫執行個體上建立預留位置 GTID。

### 語法
<a name="mysql_rds_group_replication_advance_gtid-syntax"></a>

```
CALL mysql.rds_group_replication_advance_gtid(
begin_id
, end_id
, server_uuid
);
```

### 參數
<a name="mysql_rds_group_replication_advance_gtid-parameters"></a>

 *begin\$1id*   
要建立的開始交易 ID。

 *end\$1id*   
要建立的結束交易 ID。

 *begin\$1id*   
要建立之交易的 `group_replication_group_name`。在與資料庫執行個體相關聯的資料庫參數群組中，`group_replication_group_name` 指定為 UUID。

### 使用須知
<a name="mysql_rds_group_replication_advance_gtid-usage-notes"></a>

在主動-主動叢集中，若要讓資料庫執行個體加入群組，所有在新資料庫執行個體上執行的 GTID 交易都必須存在於叢集中的其他成員上。在少數情況下，若在執行個體加入群組之前執行交易，新的資料庫執行個體可能會有更多交易。在此情況下，您無法移除任何現有的交易，但您可以使用此程序，在群組中的其他資料庫執行個體上建立對應的預留位置 GTID。執行此操作前，請確認交易*不會影響複寫的資料*。

當您呼叫此程序時，將會以空白內容建立 `server_uuid:begin_id-end_id` 的 GTID 交易。為避免發生複寫問題，切勿在其他情況下使用此程序。

**重要**  
請避免在主動-主動叢集正常運作時呼叫此程序。除非您了解您建立的交易可能有何後果，否則請勿呼叫此程序。呼叫此程序可能會導致資料不一致。

### 範例
<a name="mysql_rds_group_replication_advance_gtid-examples"></a>

下列範例會在目前的資料庫執行個體上建立預留位置 GTID：

```
CALL mysql.rds_group_replication_advance_gtid(5, 6, '11111111-2222-3333-4444-555555555555');
```

## mysql.rds\$1group\$1replication\$1create\$1user
<a name="mysql_rds_group_replication_create_user"></a>

為資料庫執行個體上的群組複寫建立複寫使用者 `rdsgrprepladmin`。

### 語法
<a name="mysql_rds_group_replication_create_user-syntax"></a>

```
CALL mysql.rds_group_replication_create_user(
replication_user_password
);
```

### 參數
<a name="mysql_rds_group_replication_create_user-parameters"></a>

 *replication\$1user\$1password*   
複寫使用者 `rdsgrprepladmin` 的密碼。

### 使用須知
<a name="mysql_rds_group_replication_create_user-usage-notes"></a>
+ 複寫使用者 `rdsgrprepladmin` 的密碼在主動-主動叢集中的所有資料庫執行個體上必須相同。
+ 這個 `rdsgrprepladmin` 使用者名稱會保留給群組複寫連線。其他使用者 (包括主要使用者) 都無法使用此使用者名稱。

### 範例
<a name="mysql_rds_group_replication_create_user-examples"></a>

下列範例會為資料庫執行個體上的群組複寫建立複寫使用者 `rdsgrprepladmin`。

```
CALL mysql.rds_group_replication_create_user('password');
```

## mysql.rds\$1group\$1replication\$1set\$1recovery\$1channel
<a name="mysql_rds_group_replication_set_recovery_channel"></a>

為主動-主動叢集設定 `group_replication_recovery` 通道。此程序會使用保留的 `rdsgrprepladmin` 使用者來設定通道。

### 語法
<a name="mysql_rds_group_replication_set_recovery_channel-syntax"></a>

```
CALL mysql.rds_group_replication_set_recovery_channel(
replication_user_password);
```

### 參數
<a name="mysql_rds_group_replication_set_recovery_channel-parameters"></a>

 *replication\$1user\$1password*   
複寫使用者 `rdsgrprepladmin` 的密碼。

### 使用須知
<a name="mysql_rds_group_replication_set_recovery_channel-usage-notes"></a>

複寫使用者 `rdsgrprepladmin` 的密碼在主動-主動叢集中的所有資料庫執行個體上必須相同。對 `mysql.rds_group_replication_create_user` 的呼叫會指定密碼。

### 範例
<a name="mysql_rds_group_replication_set_recovery_channel-examples"></a>

下列範例會為主動-主動叢集設定 `group_replication_recovery` 通道：

```
CALL mysql.rds_group_replication_set_recovery_channel('password');
```

## mysql.rds\$1group\$1replication\$1start
<a name="mysql_rds_group_replication_start"></a>

在目前的資料庫執行個體上啟動群組複寫。

### 語法
<a name="mysql_rds_group_replication_start-syntax"></a>

```
CALL mysql.rds_group_replication_start(
bootstrap
);
```

### 參數
<a name="mysql_rds_group_replication_start-parameters"></a>

 *引導*   
指定要初始化新群組還是加入現有群組的值。`1` 會使用目前的資料庫執行個體初始化新群組。`0` 會連線至與資料庫執行個體相關聯的資料庫參數群組中的 `group_replication_group_seeds` 參數所定義的端點，藉以將目前的資料庫執行個體加入現有群組。

### 範例
<a name="mysql_rds_group_replication_start-examples"></a>

下列範例會使用目前的資料庫執行個體初始化新群組：

```
CALL mysql.rds_group_replication_start(1);
```

## mysql.rds\$1group\$1replication\$1stop
<a name="mysql_rds_group_replication_stop"></a>

在目前的資料庫執行個體上停止群組複寫。

### 語法
<a name="mysql_rds_group_replication_stop-syntax"></a>

```
CALL mysql.rds_group_replication_stop();
```

### 使用須知
<a name="mysql_rds_group_replication_stop-usage-notes"></a>

在一個資料庫執行個體上停止複寫，並不會影響主動-主動叢集中的任何其他資料庫執行個體。

# 管理多來源複寫
<a name="mysql-stored-proc-multi-source-replication"></a>

下列預存程序會在 RDS for MySQL 多來源複本上設定及管理複寫通道。如需更多詳細資訊，請參閱 [為 Amazon RDS for MySQL 設定多來源複寫](mysql-multi-source-replication.md)。

這些預存程序僅適用於執行下列引擎版本的 RDS for MySQL 資料庫執行個體：
+ 所有 8.4 版
+ 8.0.35 和更高的次要版本
+ 5.7.44 及更高次要版本

使用預存程序管理使用 `caching_sha2_passwword` 所設定複寫使用者的複寫時，您必須指定 `SOURCE_SSL=1` 來設定 TLS。`caching_sha2_password` 是 RDS for MySQL 8.4 的預設身分驗證外掛程式。

**注意**  
雖然本文件將來源資料庫執行個體稱為 RDS for MySQL 資料庫執行個體，但這些程序也適用於在 Amazon RDS 外部執行的 MySQL 執行個體。

**Topics**
+ [

## mysql.rds\$1next\$1source\$1log\$1for\$1channel
](#mysql_rds_next_source_log_for_channel)
+ [

## mysql.rds\$1reset\$1external\$1source\$1for\$1channel
](#mysql_rds_reset_external_source_for_channel)
+ [

## mysql.rds\$1set\$1external\$1source\$1for\$1channel
](#mysql_rds_set_external_source_for_channel)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel
](#mysql_rds_set_external_source_with_auto_position_for_channel)
+ [

## mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel
](#mysql_rds_set_external_source_with_delay_for_channel)
+ [

## mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel
](#mysql_rds_set_source_auto_position_for_channel)
+ [

## mysql.rds\$1set\$1source\$1delay\$1for\$1channel
](#mysql_rds_set_source_delay_for_channel)
+ [

## mysql.rds\$1skip\$1repl\$1error\$1for\$1channel
](#mysql_rds_skip_repl_error_for_channel)
+ [

## mysql.rds\$1start\$1replication\$1for\$1channel
](#mysql_rds_start_replication_for_channel)
+ [

## mysql.rds\$1start\$1replication\$1until\$1for\$1channel
](#mysql_rds_start_replication_until_for_channel)
+ [

## mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel
](#mysql_rds_start_replication_until_gtid_for_channel)
+ [

## mysql.rds\$1stop\$1replication\$1for\$1channel
](#mysql_rds_stop_replication_for_channel)

## mysql.rds\$1next\$1source\$1log\$1for\$1channel
<a name="mysql_rds_next_source_log_for_channel"></a>

將來源資料庫執行個體日誌位置變更為通道的來源資料庫執行個體上下一個二進位日誌的開頭。只有當您在多來源複本上收到複寫輸入/輸出錯誤 1236 時，才使用此程序。

### 語法
<a name="mysql_rds_next_source_log_for_channel-syntax"></a>

 

```
CALL mysql.rds_next_source_log_for_channel(
curr_master_log,
channel_name           
);
```

### 參數
<a name="mysql_rds_next_source_log_for_channel-parameters"></a>

 *curr\$1master\$1log*  
目前來源日誌檔案的索引。例如，若目前檔案的名稱是 `mysql-bin-changelog.012345`，則索引為 12345。若要查明目前來源日誌檔案名稱，請執行 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'` 命令並檢視 `Source_Log_File` 欄位。

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_next_source_log_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_next_source_log_for_channel` 程序。例如，如果有 IO\$1Thread 錯誤，則您可以使用此程序來略過目前二進位日誌檔中的所有事件，並從 `channel_name` 中指定通道的下一個二進位日誌檔繼續複寫。

### 範例
<a name="mysql_rds_group_replication_advance_gtid-examples"></a>

假設多來源複本上的通道複寫失敗。在多來源複本上執行 `SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G` 將傳回下列結果：

```
mysql> SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com
                  Source_User: ReplicationUser
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql-bin-changelog.012345
          Read_Source_Log_Pos: 1219393
               Relay_Log_File: replica-relay-bin.000003
                Relay_Log_Pos: 30223388
        Relay_Source_Log_File: mysql-bin-changelog.012345
           Replica_IO_Running: No
          Replica_SQL_Running: Yes
              Replicate_Do_DB:.
              .
              .
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error:
               .
               .
                 Channel_name: channel_1
              .
              .
 -- Some fields are omitted in this example output
```

`Last_IO_Errno` 欄位顯示執行個體收到輸入/輸出錯誤 1236。`Source_Log_File` 欄位顯示檔案名稱是 `mysql-bin-changelog.012345`，這表示日誌檔案索引為 `12345`。若要解決錯誤，您可以呼叫 `mysql.rds_next_source_log_for_channel` 並指定下列參數：

```
CALL mysql.rds_next_source_log_for_channel(12345,'channel_1');
```

## mysql.rds\$1reset\$1external\$1source\$1for\$1channel
<a name="mysql_rds_reset_external_source_for_channel"></a>

停止指定通道上的複寫程序，並從多來源複本中移除通道和相關聯的組態。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_reset_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_reset_external_source_for_channel (channel_name);
```

### 參數
<a name="mysql_rds_reset_external_source_for_channel-parameters"></a>

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_reset_external_source_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_reset_external_source_for_channel` 程序。此程序會刪除屬於所要移除通道的所有轉送日誌。

## mysql.rds\$1set\$1external\$1source\$1for\$1channel
<a name="mysql_rds_set_external_source_for_channel"></a>

設定 RDS for MySQL 資料庫執行個體上的複寫通道，以從另一個 RDS for MySQL 資料庫執行個體複寫資料。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

**注意**  
您可以改為使用 [mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel](#mysql_rds_set_external_source_with_delay_for_channel) 預存程序，以延遲複寫來設定此通道。

### 語法
<a name="mysql_rds_set_external_source_for_channel-syntax"></a>



```
CALL mysql.rds_set_external_source_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , channel_name
);
```

### 參數
<a name="mysql_rds_set_external_source_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 來源資料庫執行個體的主機名稱或 IP 位址。

 *host\$1port*   
RDS for MySQL 來源資料庫執行個體所使用的連接埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
RDS for MySQL 來源資料庫執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於來源資料庫執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *mysql\$1binary\$1log\$1file\$1name*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *mysql\$1binary\$1log\$1file\$1location*   
複寫在 `mysql_binary_log_file_name` 二進位日誌中開始讀取複寫資訊的位置。  
您可以藉由在來源資料庫執行個體上執行 `SHOW BINARY LOG STATUS`，以判斷 binlog 檔案名稱和位置。  
MySQL 以前的版本使用 `SHOW MASTER STATUS` 而不是 `SHOW BINARY LOG STATUS`。如果您使用的 MySQL 是 8.4 之前的版本，請使用 `SHOW MASTER STATUS`。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `SOURCE_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *channel\$1name*   
複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_set_external_source_for_channel-usage-notes"></a>

 主要使用者必須執行 `mysql.rds_set_external_source_for_channel` 程序。此程序必須在您要建立複寫通道的目標 RDS for MySQL 資料庫執行個體上執行。

 在執行 `mysql.rds_set_external_source_for_channel` 之前，請利用多來源複本所需的權限，在來源資料庫執行個體上設定複寫使用者。若要將多來源複本連線至來源資料庫執行個體，您必須指定在來源資料庫執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可之複寫使用者的 `replication_user_name` 和 `replication_user_password` 值。

**設定來源資料庫執行個體上的複寫使用者**

1. 使用您選擇的 MySQL 用戶端，連線至來源資料庫執行個體，並建立用於複寫的使用者帳戶。以下是範例。
**重要**  
作為安全最佳實務，請指定以下範例中所顯示預留位置值以外的密碼。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 在來源資料庫執行個體上，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 'repl\$1user' 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com';
   ```

若要使用加密複寫，請將來源資料庫執行個體設定為使用 SSL 連線。

呼叫 `mysql.rds_set_external_source_for_channel` 以設定此複寫通道之後，您可以呼叫複本上的 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 來啟動通道上的複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) 以停止通道上的複寫，並從複本中移除通道組態。

當您呼叫 `mysql.rds_set_external_source_for_channel` 時，Amazon RDS 會將 `set channel source` 的時間、使用者和動作記錄在 `mysql.rds_history` 資料表中 (不含通道特定詳細資訊)，以及記錄在 `mysql.rds_replication_status` 資料表中 (含通道名稱)。此資訊僅用於內部使用和監控目的。若要記錄用於稽核目的的完整程序呼叫，請考慮根據您應用程式的特定需求啟用稽核日誌或一般日誌。

### 範例
<a name="mysql_rds_set_external_source_for_channel-examples"></a>

在 RDS for MySQL 資料庫執行個體上執行時，下列範例會設定在此資料庫執行個體上名為 `channel_1` 的複寫通道，以從主機 `sourcedb.example.com` 和連接埠 `3306` 指定的來源複寫資料。

```
call mysql.rds_set_external_source_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.0777',
  120,
  0,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_external_source_with_auto_position_for_channel"></a>

在具有選用複寫延遲的 RDS for MySQL 資料庫執行個體上設定複寫通道。複寫也會以全域交易識別符 (GTID) 為依據。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_auto_position_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , ssl_encryption
  , delay
  , channel_name
);
```

### 參數
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 來源資料庫執行個體的主機名稱或 IP 位址。

 *host\$1port*   
RDS for MySQL 來源資料庫執行個體所使用的連接埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
RDS for MySQL 來源資料庫執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於來源資料庫執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `SOURCE_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

 *channel\$1name*   
複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_external_source_with_auto_position_for_channel` 程序。此程序必須在您要建立複寫通道的目標 RDS for MySQL 資料庫執行個體上執行。

在執行 `rds_set_external_source_with_auto_position_for_channel` 之前，請利用多來源複本所需的權限，在來源資料庫執行個體上設定複寫使用者。若要將多來源複本連線至來源資料庫執行個體，您必須指定在來源資料庫執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可之複寫使用者的 `replication_user_name` 和 `replication_user_password` 值。

**設定來源資料庫執行個體上的複寫使用者**

1. 使用您選擇的 MySQL 用戶端，連線至來源資料庫執行個體，並建立用於複寫的使用者帳戶。以下是範例。
**重要**  
作為安全最佳實務，請指定以下範例中所顯示預留位置值以外的密碼。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 在來源資料庫執行個體上，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 'repl\$1user' 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com';
   ```

若要使用加密複寫，請將來源資料庫執行個體設定為使用 SSL 連線。

呼叫 `mysql.rds_set_external_source_with_auto_position_for_channel` 之前，請務必呼叫 [mysql.rds\$1set\$1external\$1source\$1gtid\$1purged](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_gtid_purged)，以從外部來源設定具有指定 GTID 範圍的 `gtid_purged` 系統變數。

呼叫 `mysql.rds_set_external_source_with_auto_position_for_channel` 將 Amazon RDS 資料庫執行個體設定為在特定通道上僅供讀取複本之後，您可以在僅供讀取複本上呼叫 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel)，以在該通道上啟動複寫程序。

呼叫 `mysql.rds_set_external_source_with_auto_position_for_channel` 以設定此複寫通道之後，您可以呼叫複本上的 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 來啟動通道上的複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) 以停止通道上的複寫，並從複本中移除通道組態。

### 範例
<a name="mysql_rds_set_external_master_with_auto_position_for_channel-examples"></a>

在 RDS for MySQL 資料庫執行個體上執行時，下列範例會設定在此資料庫執行個體上名為 `channel_1` 的複寫通道，以從主機 `sourcedb.example.com` 和連接埠 `3306` 指定的來源複寫資料。其會將最小複寫延遲設定為一小時 (3,600 秒)。這表示多來源複本上至少一小時不會套用來自來源 RDS for MySQL 資料庫執行個體的變更。

```
call mysql.rds_set_external_source_with_auto_position_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1external\$1source\$1with\$1delay\$1for\$1channel
<a name="mysql_rds_set_external_source_with_delay_for_channel"></a>

在具有指定複寫延遲的 RDS for MySQL 資料庫執行個體上設定複寫通道。

**重要**  
若要執行此程序，必須啟用 `autocommit`。若要啟用它，請將 `autocommit` 參數設定為 `1`。如需修改參數的相關資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。

### 語法
<a name="mysql_rds_set_external_source_with_delay_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_external_source_with_delay_for_channel (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  , ssl_encryption
  , delay
  , channel_name
);
```

### 參數
<a name="mysql_rds_set_external_source_with_delay_for_channel-parameters"></a>

 *host\$1name*   
RDS for MySQL 來源資料庫執行個體的主機名稱或 IP 位址。

 *host\$1port*   
RDS for MySQL 來源資料庫執行個體所使用的連接埠。如果網路組態包含會轉換連線埠號碼的安全殼層 (SSH) 連線埠複寫，請指定 SSH 所公開的連線埠號碼。

 *replication\$1user\$1name*   
RDS for MySQL 來源資料庫執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可的使用者 ID。我們建議您提供單獨用於來源資料庫執行個體複寫的帳戶。

 *replication\$1user\$1password*   
`replication_user_name` 中指定之使用者 ID 的密碼。

 *mysql\$1binary\$1log\$1file\$1name*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *mysql\$1binary\$1log\$1file\$1location*   
在 `mysql_binary_log_file_name` 二進位日誌中的複寫將開始讀取複寫資訊的位置。  
您可以藉由在來源資料庫執行個體上執行 `SHOW BINARY LOG STATUS` 來判斷 binlog 檔案名稱和位置。  
MySQL 以前的版本使用 `SHOW MASTER STATUS` 而不是 `SHOW BINARY LOG STATUS`。如果您使用的 MySQL 是 8.4 之前的版本，請使用 `SHOW MASTER STATUS`。

 *ssl\$1encryption*   
此值指定在複寫連線上是否使用 Secure Socket Layer (SSL) 加密。1 指定使用 SSL 加密，0 指定不使用加密。預設為 0。  
不支援 `SOURCE_SSL_VERIFY_SERVER_CERT` 選項。此選項設定為 0，表示連線已加密，但憑證未經過驗證。

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

 *channel\$1name*   
複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_set_external_source_with_delay_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_external_source_with_delay_for_channel` 程序。此程序必須在您要建立複寫通道的目標 RDS for MySQL 資料庫執行個體上執行。

在執行 `mysql.rds_set_external_source_with_delay_for_channel` 之前，請利用多來源複本所需的權限，在來源資料庫執行個體上設定複寫使用者。若要將多來源複本連線至來源資料庫執行個體，您必須指定在來源資料庫執行個體上具有 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 許可之複寫使用者的 `replication_user_name` 和 `replication_user_password` 值。

**設定來源資料庫執行個體上的複寫使用者**

1. 使用您選擇的 MySQL 用戶端，連線至來源資料庫執行個體，並建立用於複寫的使用者帳戶。以下是範例。
**重要**  
作為安全最佳實務，請指定以下範例中所顯示預留位置值以外的密碼。

   ```
   CREATE USER 'repl_user'@'example.com' IDENTIFIED BY 'password';
   ```

1. 在來源資料庫執行個體上，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。下列範例將所有資料庫上的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的 'repl\$1user' 使用者。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'example.com';
   ```

若要使用加密複寫，請將來源資料庫執行個體設定為使用 SSL 連線。

呼叫 `mysql.rds_set_external_source_with_delay_for_channel` 以設定此複寫通道之後，您可以呼叫複本上的 [mysql.rds\$1start\$1replication\$1for\$1channel](#mysql_rds_start_replication_for_channel) 來啟動通道上的複寫程序。您可以呼叫 [mysql.rds\$1reset\$1external\$1source\$1for\$1channel](#mysql_rds_reset_external_source_for_channel) 以停止通道上的複寫，並從複本中移除通道組態。

當您呼叫 `mysql.rds_set_external_source_with_delay_for_channel` 時，Amazon RDS 會將 `set channel source` 的時間、使用者和動作記錄在 `mysql.rds_history` 資料表中 (不含通道特定詳細資訊)，以及記錄在 `mysql.rds_replication_status` 資料表中 (含通道名稱)。此資訊僅用於內部使用和監控目的。若要記錄用於稽核目的的完整程序呼叫，請考慮根據您應用程式的特定需求啟用稽核日誌或一般日誌。

### 範例
<a name="mysql_rds_set_external_source_with_delay_for_channel-examples"></a>

在 RDS for MySQL 資料庫執行個體上執行時，下列範例會設定在此資料庫執行個體上名為 `channel_1` 的複寫通道，以從主機 `sourcedb.example.com` 和連接埠 `3306` 指定的來源複寫資料。其會將最小複寫延遲設定為一小時 (3,600 秒)。這表示多來源複本上至少一小時不會套用來自來源 RDS for MySQL 資料庫執行個體的變更。

```
call mysql.rds_set_external_source_with_delay_for_channel(
  'sourcedb.example.com',
  3306,
  'repl_user',
  'password',
  'mysql-bin-changelog.000777',
  120,
  1,
  3600,
  'channel_1');
```

## mysql.rds\$1set\$1source\$1auto\$1position\$1for\$1channel
<a name="mysql_rds_set_source_auto_position_for_channel"></a>

將指定通道的複寫模式設為依據二進制日誌檔案位置或全域交易識別符 (GTID)。

### 語法
<a name="mysql_rds_set_source_auto_position_for_channel-syntax"></a>

 

```
CALL mysql.rds_set_source_auto_position_for_channel (
auto_position_mode
 , channel_name
);
```

### 參數
<a name="mysql_rds_set_source_auto_position_for_channel-parameters"></a>

 *auto\$1position\$1mode*   
此值指示要使用日誌檔案位置複寫或是 GTID 複寫：  
+ `0` – 使用依據二進制日誌檔案位置的複寫模式。預設值為 `0`。
+ `1` – 使用依據 GTID 的複寫方法。

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_set_source_auto_position_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_source_auto_position_for_channel` 程序。此程序會重新啟動指定通道上的複寫，以套用指定的自動定位模式。

### 範例
<a name="mysql_rds_set_source_auto_position_for_channel-examples"></a>

下列範例會將 channel\$11 的自動定位模式設定為使用 GTID 型複寫方法。

```
call mysql.rds_set_source_auto_position_for_channel(1,'channel_1');
```

## mysql.rds\$1set\$1source\$1delay\$1for\$1channel
<a name="mysql_rds_set_source_delay_for_channel"></a>

設定最低秒數，以延遲來源資料庫執行個體到指定通道多來源複本的複寫。

### 語法
<a name="mysql_rds_set_source_delay_for_channel-syntax"></a>

```
CALL mysql.rds_set_source_delay_for_channel(delay, channel_name);
```

### 參數
<a name="mysql_rds_set_source_delay_for_channel-parameters"></a>

 *延遲*   
從來源資料庫執行個體延遲複寫的最低秒數。  
此參數的限制為一日 (86400 秒)。

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_set_source_delay_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_set_source_delay_for_channel` 程序。若要使用此程序，請先呼叫 `mysql.rds_stop_replication_for_channel` 來停止複寫。然後，呼叫此程序來設定複寫延遲值。設定延遲時，請呼叫 `mysql.rds_start_replication_for_channel` 以重新啟動複寫。

### 範例
<a name="mysql_rds_set_source_delay_for_channel-examples"></a>

下列範例會在多來源複本的 `channel_1` 上設定來源資料庫執行個體的複寫延遲至少一小時 (3,600 秒)。

```
CALL mysql.rds_set_source_delay_for_channel(3600,'channel_1');
```

## mysql.rds\$1skip\$1repl\$1error\$1for\$1channel
<a name="mysql_rds_skip_repl_error_for_channel"></a>

略過二進位日誌事件，並刪除指定通道之 MySQL 資料庫多來源複本上的複寫錯誤。

### 語法
<a name="mysql_rds_skip_repl_error_for_channel-syntax"></a>

 

```
CALL mysql.rds_skip_repl_error_for_channel(channel_name);
```

### 參數
<a name="mysql_rds_skip_repl_error_for_channel-parameters"></a>

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_skip_repl_error_for_channel-usage-notes"></a>

主要使用者必須在僅供讀取複本上執行 `mysql.rds_skip_repl_error_for_channel` 程序。您可以用類似的方式 `mysql.rds_skip_repl_error` 使用此程序來略過僅供讀取複本上的錯誤。如需更多詳細資訊，請參閱 [呼叫 mysql.rds\$1skip\$1repl\$1error 程序](Appendix.MySQL.CommonDBATasks.SkipError.md#Appendix.MySQL.CommonDBATasks.SkipError.procedure)。

**注意**  
若要略過 GTID 型複寫中的錯誤，建議您改用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 程序。

若要判斷是否有錯誤，執行 MySQL `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G` 命令。如果複寫錯誤不嚴重，您可以執行 `mysql.rds_skip_repl_error_for_channel` 來略過錯誤。如果有多個錯誤，`mysql.rds_skip_repl_error_for_channel` 會刪除指定複寫通道上的第一個錯誤，然後警告還有其他錯誤。然後，您可以使用 `SHOW REPLICA STATUS FOR CHANNEL 'channel_name'\G`，以針對下一個錯誤判斷正確的行動步驟。如需傳回值的相關資訊，請參閱 MySQL 文件中的 [SHOW REPLICA STATUS 陳述式](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html)。

## mysql.rds\$1start\$1replication\$1for\$1channel
<a name="mysql_rds_start_replication_for_channel"></a>

從 RDS for MySQL 資料庫執行個體開始複寫至指定通道上的多來源複本。

**注意**  
您可使用 [mysql.rds\$1start\$1replication\$1until\$1for\$1channel](#mysql_rds_start_replication_until_for_channel) 或 [mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel](#mysql_rds_start_replication_until_gtid_for_channel) 預存程序從 RDS for MySQL 資料庫執行個體來啟動複寫，並從特定的二進位日誌檔案位置停止複寫。

### 語法
<a name="mysql_rds_start_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_for_channel(channel_name);
```

### 參數
<a name="mysql_rds_start_replication_for_channel-parameters"></a>

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_start_replication_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_start_replication_for_channel` 程序。從來源 RDS for MySQL 資料庫執行個體匯入資料後，請在多來源複本上執行此命令，以在指定的通道上開始複寫。

### 範例
<a name="mysql_rds_start_replication_for_channel-examples"></a>

下列範例會在多來源複本的 `channel_1` 上開始複寫。

```
CALL mysql.rds_start_replication_for_channel('channel_1');
```

## mysql.rds\$1start\$1replication\$1until\$1for\$1channel
<a name="mysql_rds_start_replication_until_for_channel"></a>

從指定通道上的 RDS for MySQL 資料庫執行個體啟動複寫，並從特定的二進位日誌檔案位置停止複寫。

### 語法
<a name="mysql_rds_start_replication_until_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_for_channel (
replication_log_file
  , replication_stop_point
  , channel_name
);
```

### 參數
<a name="mysql_rds_start_replication_until_for_channel-parameters"></a>

 *replication\$1log\$1file*   
來源資料庫執行個體上包含複寫資訊之二進位日誌的名稱。

 *replication\$1stop\$1point *   
在 `replication_log_file` 二進位日誌中的複寫將停止的位置。

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_start_replication_until_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_start_replication_until_for_channel` 程序。透過此程序，隨即開始複寫，然後在達到指定的 binlog 檔案位置時停止。此程序會同時停止 `SQL_THREAD` 和 `IO_THREAD`。

`replication_log_file` 參數的指定檔名必須與來源資料庫執行個體 binlog 檔案的名稱相同。

當 `replication_stop_point` 參數指定了過去的一個停止位置，複寫即會立即停止。

### 範例
<a name="mysql_rds_start_replication_until_for_channel-examples"></a>

以下範例會啟動 `channel_1` 上的複寫並複寫變更，直到達到 `mysql-bin-changelog.000777` 二進位日誌檔案中的位置 `120` 為止。

```
call mysql.rds_start_replication_until_for_channel(
  'mysql-bin-changelog.000777',
  120,
  'channel_1'
  );
```

## mysql.rds\$1start\$1replication\$1until\$1gtid\$1for\$1channel
<a name="mysql_rds_start_replication_until_gtid_for_channel"></a>

從 RDS for MySQL 資料庫執行個體啟動指定通道上的複寫，並在指定的全域交易識別符 (GTID) 停止複寫。

### 語法
<a name="mysql_rds_start_replication_until_gtid_for_channel-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_gtid_for_channel(gtid,channel_name);
```

### 參數
<a name="mysql_rds_start_replication_until_gtid_for_channel-parameters"></a>

 *gtid*   
在此 GTID 後停止複寫。

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_start_replication_until_gtid_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_start_replication_until_gtid_for_channel` 程序。程序會在指定的通道上開始複寫，並將所有變更套用至指定的 GTID 值。然後，它會停止通道上的複寫。

當 `gtid` 參數指定了複本已經執行的交易時，複寫會立即停止。

執行此程序之前，您必須將 `replica_parallel_workers` 或 `slave_parallel_workers` 的值設定為 `0`，以停用多執行緒複寫。

### 範例
<a name="mysql_rds_start_replication_until_gtid_for_channel-examples"></a>

以下範例會啟動 `channel_1` 上的複寫，並複寫變更直到達到 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23` 為止。

```
call mysql.rds_start_replication_until_gtid_for_channel('3E11FA47-71CA-11E1-9E33-C80AA9429562:23','channel_1');
```

## mysql.rds\$1stop\$1replication\$1for\$1channel
<a name="mysql_rds_stop_replication_for_channel"></a>

從指定通道上的 MySQL 資料庫執行個體停止複寫。

### 語法
<a name="mysql_rds_stop_replication_for_channel-syntax"></a>

 

```
CALL mysql.rds_stop_replication_for_channel(channel_name);
```

### 參數
<a name="mysql_rds_stop_replication_for_channel-parameters"></a>

 *channel\$1name*   
多來源複本上複寫通道的名稱。每個複寫通道都會從在特定主機和連接埠上執行的單一來源 RDS for MySQL 資料庫執行個體接收二進位日誌事件。

### 使用須知
<a name="mysql_rds_stop_replication_for_channel-usage-notes"></a>

主要使用者必須執行 `mysql.rds_stop_replication_for_channel` 程序。

### 範例
<a name="mysql_rds_stop_replication_for_channel-examples"></a>

下列範例會在多來源複本的 `channel_1` 上停止複寫。

```
CALL mysql.rds_stop_replication_for_channel('channel_1');
```

# 使用 GTID 複寫交易
<a name="mysql-stored-proc-gtid"></a>

下列預存程序控制如何使用全域交易識別符 (GTID) 搭配 RDS for MySQL 複寫交易。如需有關使用 RDS for MySQL GTID 式複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

使用預存程序管理使用 `caching_sha2_password` 所設定之複寫使用者的複寫時，您必須指定 `SOURCE_SSL=1` 來設定 TLS。`caching_sha2_password` 是 RDS for MySQL 8.4 的預設身分驗證外掛程式。

**Topics**
+ [

## mysql.rds\$1skip\$1transaction\$1with\$1gtid
](#mysql_rds_skip_transaction_with_gtid)
+ [

## mysql.rds\$1start\$1replication\$1until\$1gtid
](#mysql_rds_start_replication_until_gtid)

## mysql.rds\$1skip\$1transaction\$1with\$1gtid
<a name="mysql_rds_skip_transaction_with_gtid"></a>

略過 MySQL 資料庫執行個體上具有指定全域交易識別碼 (GTID) 之交易的複寫。

若已知特定 GTID 交易導致錯誤，可以使用此程序進行災難復原。使用此預存程序來略過有問題的交易。有問題的交易範例包括停用複寫、刪除重要資料或導致資料庫執行個體無法使用的交易。

### 語法
<a name="mysql_rds_skip_transaction_with_gtid-syntax"></a>

 

```
CALL mysql.rds_skip_transaction_with_gtid (
gtid_to_skip
);
```

### Parameters
<a name="mysql_rds_skip_transaction_with_gtid-parameters"></a>

 *gtid\$1to\$1skip*   
要略過的複寫交易的 GTID。

### 使用須知
<a name="mysql_rds_skip_transaction_with_gtid-usage-notes"></a>

主要使用者必須執行 `mysql.rds_skip_transaction_with_gtid` 程序。

所有 RDS for MySQL 5.7 版，以及所有 RDS for MySQL 8.0 版和所有 RDS for MySQL 8.4 版都支援此程序。

### 範例
<a name="mysql_rds_skip_transaction_with_gtid-examples"></a>

下列範例會略過使用 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23` 進行交易的複寫。

```
CALL mysql.rds_skip_transaction_with_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');
```

## mysql.rds\$1start\$1replication\$1until\$1gtid
<a name="mysql_rds_start_replication_until_gtid"></a>

從 RDS for MySQL 資料庫執行個體 啟動複寫，並在指定的全域交易識別碼 (GTID) 之後立即停止複寫。

### 語法
<a name="mysql_rds_start_replication_until_gtid-syntax"></a>

 

```
CALL mysql.rds_start_replication_until_gtid(gtid);
```

### Parameters
<a name="mysql_rds_start_replication_until_gtid-parameters"></a>

 *gtid*   
在此 GTID 後停止複寫。

### 使用須知
<a name="mysql_rds_start_replication_until_gtid-usage-notes"></a>

主要使用者必須執行 `mysql.rds_start_replication_until_gtid` 程序。

所有 RDS for MySQL 5.7 版，以及所有 RDS for MySQL 8.0 版和所有 RDS for MySQL 8.4 版都支援此程序。

您可以透過延遲複寫來使用此程序進行災難復原。若您已延遲複寫設定，您可使用此程序變更延遲的僅供讀取複本，並向前捲動到災難發生前的時間點。在此程序停止複寫後，您可使用 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md) 中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

您可使用以下預存程序來設定延遲複寫：
+ [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration)
+ [mysql.rds\$1set\$1external\$1master\$1with\$1delay (RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master_with_delay)
+ [mysql.rds\$1set\$1external\$1source\$1with\$1delay (RDS for MySQL 主要版本 8.4 及更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_with_delay)
+ [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay)

當 `gtid` 參數指定了複本已經執行的交易時，複寫會立即停止。

### 範例
<a name="mysql_rds_start_replication_until_gtid-examples"></a>

以下範例會啟動複寫並複寫變更，直到達到 GTID `3E11FA47-71CA-11E1-9E33-C80AA9429562:23` 為止。

```
call mysql.rds_start_replication_until_gtid('3E11FA47-71CA-11E1-9E33-C80AA9429562:23');
```

# 輪換查詢日誌
<a name="mysql-stored-proc-logging"></a>

下列預存程序會將 MySQL 日誌輪換為備份資料表。如需更多詳細資訊，請參閱 [ MySQL資料庫日誌檔案](USER_LogAccess.Concepts.MySQL.md)。

**Topics**
+ [

## mysql.rds\$1rotate\$1general\$1log
](#mysql_rds_rotate_general_log)
+ [

## mysql.rds\$1rotate\$1slow\$1log
](#mysql_rds_rotate_slow_log)

## mysql.rds\$1rotate\$1general\$1log
<a name="mysql_rds_rotate_general_log"></a>

將 `mysql.general_log` 資料表輪換至備份資料表。

### 語法
<a name="mysql_rds_rotate_general_log-syntax"></a>

 

```
CALL mysql.rds_rotate_general_log;
```

### 使用須知
<a name="mysql_rds_rotate_general_log-usage-notes"></a>

您可以呼叫 `mysql.general_log` 程序，將 `mysql.rds_rotate_general_log` 資料表輪換至備份資料表。輪換日誌資料表時，目前日誌資料表會複製到備份日誌資料表，並移除目前日誌資料表中的項目。如果備份日誌資料表已存在，則其會在目前日誌資料表複製到備份之前遭到刪除。如有需要，您可以查詢備份日誌資料表。`mysql.general_log` 資料表的備份日誌資料表名為 `mysql.general_log_backup`。

當 `log_output` 參數設定為 `TABLE` 時，您僅可執行此程序。

## mysql.rds\$1rotate\$1slow\$1log
<a name="mysql_rds_rotate_slow_log"></a>

將 `mysql.slow_log` 資料表輪換至備份資料表。

### 語法
<a name="mysql_rds_rotate_slow_log-syntax"></a>

 

```
CALL mysql.rds_rotate_slow_log;
```

### 使用須知
<a name="mysql_rds_rotate_slow_log-usage-notes"></a>

您可以呼叫 `mysql.slow_log` 程序，將 `mysql.rds_rotate_slow_log` 資料表輪換至備份資料表。輪換日誌資料表時，目前日誌資料表會複製到備份日誌資料表，並移除目前日誌資料表中的項目。如果備份日誌資料表已存在，則其會在目前日誌資料表複製到備份之前遭到刪除。

如有需要，您可以查詢備份日誌資料表。`mysql.slow_log` 資料表的備份日誌資料表名為 `mysql.slow_log_backup`。

# 設定和顯示二進位日誌組態
<a name="mysql-stored-proc-configuring"></a>

下列預存程序會設定並顯示組態參數，例如二進位日誌檔案保留。

**Topics**
+ [

## mysql.rds\$1set\$1configuration
](#mysql_rds_set_configuration)
+ [

## mysql.rds\$1show\$1configuration
](#mysql_rds_show_configuration)

## mysql.rds\$1set\$1configuration
<a name="mysql_rds_set_configuration"></a>

指定保留二進位日誌的小時數，或延遲複寫的秒數。

### 語法
<a name="mysql_rds_set_configuration-syntax"></a>

 

```
CALL mysql.rds_set_configuration(name,value);
```

### Parameters
<a name="mysql_rds_set_configuration-parameters"></a>

 *name*   
要設定之組態參數的名稱。

 *value*   
組態參數的值。

### 使用須知
<a name="mysql_rds_set_configuration-usage-notes"></a>

`mysql.rds_set_configuration` 程序支援下列組態參數：
+ [binlog 保留 (小時)](#mysql_rds_set_configuration-usage-notes.binlog-retention-hours)
+ [來源延遲](#mysql_rds_set_configuration-usage-notes.source-delay)
+ [目標延遲](#mysql_rds_set_configuration-usage-notes.target-delay)

組態參數會永久存放，且在任何資料庫執行個體重新啟動或容錯移轉後依然存在。

#### binlog 保留 (小時)
<a name="mysql_rds_set_configuration-usage-notes.binlog-retention-hours"></a>

`binlog retention hours` 參數用於指定保留二進位日誌檔的小時數。Amazon RDS 通常會儘快清除二進位日誌，但複寫 RDS 外部的 MySQL 資料庫時可能仍需要二進位日誌。

`binlog retention hours` 的預設值為 `NULL`。對於 RDS for MySQL，`NULL` 意味著不會保留二進位日誌 (0 小時)。

若要指定在資料庫執行個體上保留二進位日誌的時數，請使用 `mysql.rds_set_configuration` 預存程序，並指定讓複寫有足夠時間進行的期間，如下列範例所示。

`call mysql.rds_set_configuration('binlog retention hours', 24);`

**注意**  
不可針對 `binlog retention hours` 使用值 `0`。

若為 MySQL 資料庫執行個體，`binlog retention hours` 最大值為 168 (7 天)。

設定保留期間之後，請監控資料庫執行個體的儲存體用量，確定保留的二進位日誌沒有佔用太多儲存體。

對於多可用區域資料庫叢集部署，您只能從寫入器資料庫執行個體設定二進位日誌保留，且該設定會以非同步方式傳播至所有讀取器資料庫執行個體。如果資料庫叢集上的二進位日誌超過本機儲存空間總和的一半，Amazon RDS 會自動將過時日誌移至 EBS 磁碟區。不過，最新的日誌會保留在本機儲存體中，因此如果發生需要主機替換的故障，或者您向上或向下擴展資料庫，它們可能會遺失。

#### 來源延遲
<a name="mysql_rds_set_configuration-usage-notes.source-delay"></a>

在僅供讀取複本中使用 `source delay` 參數，來指定延遲幾秒後僅供讀取複本才會複寫至其來源資料庫執行個體。Amazon RDS 通常會盡快複寫變更，但您可能想要某些環境延遲複寫。例如，當延遲複寫時，您可以將延遲的僅供讀取複本向前捲動到災難發生的時間點之前。若資料表被意外的捨棄，您可以使用延遲的複寫快速將其復原。`target delay` 的預設值為 `0` (不延遲複寫)。

當您使用此參數時，它會執行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 並套用 CHANGE primary TO MASTER\$1DELAY = input value。如果成功，程序會將 `source delay` 參數儲存到 `mysql.rds_configuration` 資料表。

若要指定 Amazon RDS 延遲複寫至來源資料庫執行個體的秒數，請使用 `mysql.rds_set_configuration` 預存程序，並指定延遲複寫的秒數。在下列範例中，複寫會延遲至少一小時 (3,600 秒)。

`call mysql.rds_set_configuration('source delay', 3600);`

此程序接著執行 `mysql.rds_set_source_delay(3600)`。

`source delay` 參數的限制為一日 (86400 秒)。

#### 目標延遲
<a name="mysql_rds_set_configuration-usage-notes.target-delay"></a>

使用 `target delay` 參數，指定要延遲幾秒後才會在資料庫執行個體與從這個執行個體建立的任何未來 RDS 受管僅供讀取複本之間進行複寫。非 RSS 受管僅供讀取複本會忽略此參數。Amazon RDS 通常會盡快複寫變更，但您可能想要某些環境延遲複寫。例如，當延遲複寫時，您可以將延遲的僅供讀取複本向前捲動到災難發生的時間點之前。若資料表被意外的捨棄，您可以使用延遲的複寫快速將其復原。`target delay` 的預設值為 `0` (不延遲複寫)。

進行災難復原時，您可以使用此組態參數搭配 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序或 [mysql.rds\$1start\$1replication\$1until\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序。若要將延遲的僅供讀取複本向前捲動到災難發生前的時間點，您可執行 `mysql.rds_set_configuration` 程序搭配此參數集。在 `mysql.rds_start_replication_until` 或 `mysql.rds_start_replication_until_gtid` 程序停止複寫後，您可使用[提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)中的說明來提升該僅供讀取複本成為新的主要資料庫執行個體。

若要使用 `mysql.rds_rds_start_replication_until_gtid` 程序，需啟用依據 GTID 的複寫。若要略過已知會導致災難的特定 GTID 型交易，可以使用 [mysql.rds\$1skip\$1transaction\$1with\$1gtid](mysql-stored-proc-gtid.md#mysql_rds_skip_transaction_with_gtid) 預存程序。如需有關依據 GTID 複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

若要指定 Amazon RDS 秒數以延遲至僅供讀取複本的複寫，請使用 `mysql.rds_set_configuration` 預存程序，並指定延遲複寫秒數。下列範例指定了已延遲至少一小時 (3600 秒) 的複寫。

`call mysql.rds_set_configuration('target delay', 3600);`

`target delay` 參數的限制為一日 (86400 秒)。

## mysql.rds\$1show\$1configuration
<a name="mysql_rds_show_configuration"></a>

保留二進位日誌的時數。

### 語法
<a name="mysql_rds_show_configuration-syntax"></a>

 

```
CALL mysql.rds_show_configuration;
```

### 使用須知
<a name="mysql_rds_show_configuration-usage-notes"></a>

若要驗證 Amazon RDS 保留二進位日誌的時數，請使用 `mysql.rds_show_configuration` 預存程序。

### 範例
<a name="mysql_rds_show_configuration-examples"></a>

下列範例顯示保留期間：

```
call mysql.rds_show_configuration;
                name                         value     description
                binlog retention hours       24        binlog retention hours specifies the duration in hours before binary logs are automatically deleted.
```

# 預備 InnoDB 快取
<a name="mysql-stored-proc-warming"></a>

下列預存程序會在 RDS for MySQL 資料庫執行個體上儲存、載入或取消載入 InnoDB 緩衝集區。如需更多詳細資訊，請參閱 [Amazon RDS 上 MySQL 的 InnoDB 快取預備](MySQL.Concepts.FeatureSupport.md#MySQL.Concepts.InnoDBCacheWarming)。

**Topics**
+ [

## mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now
](#mysql_rds_innodb_buffer_pool_dump_now)
+ [

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort
](#mysql_rds_innodb_buffer_pool_load_abort)
+ [

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now
](#mysql_rds_innodb_buffer_pool_load_now)

## mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now
<a name="mysql_rds_innodb_buffer_pool_dump_now"></a>

將目前的緩衝集區狀態傾出至磁碟。

### 語法
<a name="mysql_rds_innodb_buffer_pool_dump_now-syntax"></a>

 

```
CALL mysql.rds_innodb_buffer_pool_dump_now();
```

### 使用須知
<a name="mysql_rds_innodb_buffer_pool_dump_now-usage"></a>

主要使用者必須執行 `mysql.rds_innodb_buffer_pool_dump_now` 程序。

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort
<a name="mysql_rds_innodb_buffer_pool_load_abort"></a>

正在載入已儲存的緩衝集區狀態時取消載入。

### 語法
<a name="mysql_rds_innodb_buffer_pool_load_abort-syntax"></a>

 

```
CALL mysql.rds_innodb_buffer_pool_load_abort();
```

### 使用須知
<a name="mysql_rds_innodb_buffer_pool_load_abort-usage"></a>

主要使用者必須執行 `mysql.rds_innodb_buffer_pool_load_abort` 程序。

## mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now
<a name="mysql_rds_innodb_buffer_pool_load_now"></a>

從磁碟載入已儲存的緩衝集區狀態。

### 語法
<a name="mysql_rds_innodb_buffer_pool_load_now-syntax"></a>

 

```
CALL mysql.rds_innodb_buffer_pool_load_now();
```

### 使用須知
<a name="mysql_rds_innodb_buffer_pool_load_now-usage"></a>

主要使用者必須執行 `mysql.rds_innodb_buffer_pool_load_now` 程序。