

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

# 設定 Aurora MySQL 的二進位日誌複寫
<a name="AuroraMySQL.Replication.MySQL.SettingUp"></a>

使用 Aurora MySQL 設定 MySQL 複寫涉及下列詳細討論的步驟：

**Contents**
+ [1. 在複寫來源上開啟二進位日誌](#AuroraMySQL.Replication.MySQL.EnableBinlog)
+ [2. 在複寫來源上保留二進位日誌，直到不再需要為止](#AuroraMySQL.Replication.MySQL.RetainBinlogs)
+ [3. 建立複寫來源的複製或傾印](#AuroraMySQL.Replication.MySQL.CreateSnapshot)
+ [4. 將傾印載入複本目標 (如有需要)](#AuroraMySQL.Replication.MySQL.LoadSnapshot)
+ [5. 在複製來源上建立複寫使用者](#AuroraMySQL.Replication.MySQL.CreateReplUser)
+ [6. 在複本目標上開啟複寫](#AuroraMySQL.Replication.MySQL.EnableReplication)
  + [設定位置以停止僅供讀取複本的複寫作業](#AuroraMySQL.Replication.StartReplicationUntil)
+ [7. 監控複本](#AuroraMySQL.Replication.MySQL.Monitor)
+ [同步複寫來源和目標之間的密碼](#AuroraMySQL.Replication.passwords)

## 1. 在複寫來源上開啟二進位日誌
<a name="AuroraMySQL.Replication.MySQL.EnableBinlog"></a>

 在以下尋找如何在資料庫引擎的複寫來源上開啟二進位日誌的相關指示。


|  資料庫引擎  |  指示  | 
| --- | --- | 
|   Aurora MySQL   |   **在 Aurora MySQL 資料庫叢集上開啟二進位日誌**  建議將 `binlog_format` 資料庫叢集參數設為 `ROW`、`STATEMENT` 或 `MIXED`. `MIXED`，除非您需要特定的 binlog 格式。(預設值為 `OFF`。) 若要變更 `binlog_format` 參數，請建立自訂資料庫叢集參數群組，並將該自訂參數群組與您的資料庫叢集建立關聯。您無法變更預設資料庫叢集參數群組中的參數。 如果您要將 `binlog_format` 參數從 `OFF` 變更為另一個值，請將 Aurora 資料庫叢集重新開機，變更才能生效。  如需詳細資訊，請參閱[Amazon Aurora 資料庫叢集和資料庫執行個體參數](USER_WorkingWithDBClusterParamGroups.md#Aurora.Managing.ParameterGroups)及[Amazon Aurora 的參數群組](USER_WorkingWithParamGroups.md)。  | 
|   RDS for MySQL   |   **在 Amazon RDS 資料庫執行個體上開啟二進位日誌**   您不可以直接為 Amazon RDS 資料庫執行個體開啟二進位日誌，但您可以透過以下其中一個方式開啟它： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 
|   MySQL (外部)  |  **設定加密複寫** 若要使用 Aurora MySQL 第 2 版安全地複寫資料，您可以使用加密複寫。   如果您不需要使用加密複寫，可以略過這些步驟。   下列是使用加密複寫的先決條件： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  在加密複寫期間，Aurora MySQL 資料庫叢集充當 MySQL 資料庫伺服器的用戶端。Aurora MySQL 用戶端的憑證和金鑰位於 .pem 格式的檔案中。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  **在外部 MySQL 資料庫上開啟二進位日誌**  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 

## 2. 在複寫來源上保留二進位日誌，直到不再需要為止
<a name="AuroraMySQL.Replication.MySQL.RetainBinlogs"></a>

使用 MySQL 二進位日誌複寫時，Amazon RDS 不會管理複寫程序。因此，您需要確保會保留複寫來源上的 binlog 檔案，直到變更已套用至複本後為止。此維護可協助您在發生故障時將您的來源資料庫還原。

使用以下保留資料庫引擎二進位日誌的相關指示。


|  資料庫引擎  |  指示  | 
| --- | --- | 
|   Aurora MySQL  |  **在 Aurora MySQL 資料庫叢集上保留二進位日誌** 您無法存取 Aurora MySQL 資料庫叢集的 binlog 檔案。因此，您必須選擇要在複寫來源上保留 binlog 檔案的足夠時間範圍，以確保在 Amazon RDS 刪除 binlog 檔案之前，變更已套用至複本。您可以在 Aurora MySQL 資料庫叢集上保留 binlog 檔案最多 90 天。 如果您要將使用 MySQL 資料庫或 RDS for MySQL 資料庫執行個體的複寫設定為複本，並且要為其建立複本的資料庫非常大，請選擇較大的時間範圍來保留二進位日誌檔案，直到要複寫資料庫的初始複製完成，且複本延遲已到達 0 為止。 若要設定二進位日誌保留時間範圍，請使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 程序，並指定 `'binlog retention hours'`組態參數加上資料庫叢集上保留 binlog 檔案的時數。Aurora MySQL 2.11.0 版和更新版本以及第 3 版的最大值是 2160 (90 天)。 下列範例會將 binlog 檔案的保留期間設定為 6 天： <pre>CALL mysql.rds_set_configuration('binlog retention hours', 144);</pre> 複寫開始之後，您可以在複本上執行 `SHOW SLAVE STATUS` (Aurora MySQL 第 2 版) 或 `SHOW REPLICA STATUS` (Aurora MySQ 第 3 版) 命令並檢查 `Seconds behind master` 欄位，來確認變更已套用至複本。如果 `Seconds behind master` 欄位為 0，則沒有複本延遲。沒有複本延遲時，請減少保留 binlog 檔案的時間長度，方法是將 `binlog retention hours` 組態參數設定為較小的時間範圍。 如果未指定此設定，Aurora MySQL 的預設值為 24 (1 天)。 如果您指定 `'binlog retention hours'` 的值大於最大值，則 Aurora MySQL 會使用最大值。  | 
|   RDS for MySQL   |   **在 Amazon RDS 資料庫執行個體上保留二進位日誌**   您可以在 Amazon RDS 資料庫執行個體上保留二進位日誌檔案，方法是如同 Aurora MySQL 資料庫叢集一般設定 binlog 保留時數，如前一列中所述。 您也可以透過為資料庫執行個體建立僅供讀取複本，在 Amazon RDS 資料庫執行個體上保留 binlog 檔案。這個僅供讀取複本是暫時性的，並專為保留 binlog 檔案目的使用。建立了僅供讀取複本之後，請在僅供讀取複本上呼叫 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序。複寫停用時，Amazon RDS 不會刪除複寫來源上的任何 binlog 檔案。設定使用永久複本的複寫之後，當複寫來源與永久複本之間的複本延遲 (`Seconds behind master` 欄位) 到達 0 時，您可以刪除僅供讀取複本。  | 
|   MySQL (外部)   |  **在外部 MySQL 資料庫上保留二進位日誌** 因為外部 MySQL 資料庫上的 binlog 檔案不是由 Amazon RDS 管理，系統會保留這些檔案直到您刪除它們為止。 複寫開始之後，您可以在複本上執行 `SHOW SLAVE STATUS` (Aurora MySQL 第 2 版) 或 `SHOW REPLICA STATUS` (Aurora MySQ 第 3 版) 命令並檢查 `Seconds behind master` 欄位，來確認變更已套用至複本。如果 `Seconds behind master` 欄位為 0，則沒有複本延遲。沒有複本延遲時，您可以刪除舊的 binlog 檔案。  | 

## 3. 建立複寫來源的複製或傾印
<a name="AuroraMySQL.Replication.MySQL.CreateSnapshot"></a>

您可以使用複寫來源的快照、複製或傾印，將資料的基準複製載入到複本上。然後，您會從該點開始複寫。

使用以下為資料庫引擎建立複寫來源複製或傾印的相關指示。


| 資料庫引擎 | 指示 | 
| --- | --- | 
|   Aurora MySQL   |  **建立 Aurora MySQL 資料庫叢集的複製** 使用下列其中一種方法： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html) **判斷 binlog 檔案名稱和位置** 使用下列其中一種方法： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html) **建立 Aurora MySQL 資料庫叢集的傾印** 如果您的複本目標是外部 MySQL 資料庫或 RDS for MySQL 資料庫執行個體，則必須從 Aurora 資料庫叢集建立傾印檔案。 請確保對您所建立來源資料庫叢集的複本執行 `mysqldump` 命令。這是為了避免在建立傾印時的鎖定考量。如果直接在來源資料庫叢集上取得傾印，則需要鎖定來源資料表，以防止傾印進行時同時寫入它們。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 
|  RDS for MySQL  |  **建立 Amazon RDS 資料庫執行個體的快照** 建立 Amazon RDS 資料庫執行個體的僅供讀取複本。如需詳細資訊，請參閱《Amazon Relational Database Service 使用者指南》**中的[建立僅供讀取複本](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html#USER_ReadRepl.Create)。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 
|  MySQL (外部)  |  **建立外部 MySQL 資料庫的快照或傾印** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 

## 4. 將傾印載入複本目標 (如有需要)
<a name="AuroraMySQL.Replication.MySQL.LoadSnapshot"></a>

如果您計劃從位於 Amazon RDS 外部的 MySQL 資料庫傾印載入資料，那麼，您可能需要建立供複製傾印檔案的 EC2 執行個體。然後，您可以從該 EC2 執行個體將資料載入資料庫叢集或資料庫執行個體。使用此方法，您可以在將傾印檔案複製到 EC2 執行個體之前加以壓縮，以便減少與複製資料至 Amazon RDS 相關聯的網路成本。您也可以加密一或多個傾印檔案，以於網路間傳輸資料時加以保護。

**注意**  
如果您建立新的 Aurora MySQL 資料庫叢集作為複本目標，則不需要載入傾印檔案：  
您可以從資料庫叢集快照進行還原來建立新的資料庫叢集。如需詳細資訊，請參閱[從資料庫叢集快照還原](aurora-restore-snapshot.md)。
您可以複製來源資料庫叢集來建立新的資料庫叢集。如需詳細資訊，請參閱[複製 Amazon Aurora 資料庫叢集的一個磁碟區](Aurora.Managing.Clone.md)。
您可以將資料從資料庫執行個體快照遷移到新的資料庫叢集。如需詳細資訊，請參閱[將資料遷移至 Amazon Aurora MySQL 資料庫叢集](AuroraMySQL.Migrating.md)。

使用以下為資料庫引擎將複寫來源的傾印載入複寫目標的相關指示。


| 資料庫引擎 | 指示 | 
| --- | --- | 
|  Aurora MySQL   |   **將傾印載入至 Aurora MySQL 資料庫叢集**  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 
|   RDS for MySQL   |  **將傾印載入至 Amazon RDS 資料庫執行個體** [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 
|  MySQL (外部)  |  **將傾印載入外部 MySQL 資料庫** 您無法將資料庫快照或資料庫叢集快照載入至外部 MySQL 資料庫。而是必須使用來自 `mysqldump` 命令的輸出。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 

## 5. 在複製來源上建立複寫使用者
<a name="AuroraMySQL.Replication.MySQL.CreateReplUser"></a>

在僅供複寫使用的資源上建立使用者 ID。下列範例適用於 RDS for MySQL 或外部 MySQL 來源資料庫。

```
mysql> CREATE USER 'repl_user'@'domain_name' IDENTIFIED BY 'password';
```

對於 Aurora MySQL 來源資料庫，`skip_name_resolve` 資料庫叢集參數設定為 `1` (`ON`) 且無法修改，因此您必須使用主機的 IP 位址，而非網域名稱。如需詳細資訊，請參閱 MySQL 文件中的 [skip\$1name\$1resolve](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_skip_name_resolve)。

```
mysql> CREATE USER 'repl_user'@'IP_address' IDENTIFIED BY 'password';
```

使用者需要 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限。授予這些權限給該使用者。

如果需要使用加密複寫，請對複寫使用者要求 SSL 連接。例如，您可以使用以下其中一個陳述式來對使用者帳戶 `repl_user` 要求 SSL 連線。

```
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'IP_address';
```

```
GRANT USAGE ON *.* TO 'repl_user'@'IP_address' REQUIRE SSL;
```

**注意**  
如果未包含 `REQUIRE SSL`，則複寫連線可能會以無訊息方式回復為未加密的連線。

## 6. 在複本目標上開啟複寫
<a name="AuroraMySQL.Replication.MySQL.EnableReplication"></a>

開啟複寫之前，建議您手動取得 Aurora MySQL 資料庫叢集的快照或 RDS for MySQL 資料庫執行個體複本目標。如果發生問題，而您需要使用資料庫叢集或資料庫執行個體複本目標重新建立複寫，則可以從此快照還原資料庫叢集或資料庫執行個體，而不需再次將資料匯入至複本目標。

使用以下開啟資料庫引擎複寫功能的相關指示。


|  資料庫引擎  |  指示  | 
| --- | --- | 
|   Aurora MySQL   |  **從 Aurora MySQL 資料庫叢集開啟複寫**  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html) 若要使用 SSL 加密，請將最終值設定為 `1`，而不是 `0`。  | 
|   RDS for MySQL   |   **從 Amazon RDS 資料庫執行個體開啟複寫**  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html) 若要使用 SSL 加密，請將最終值設定為 `1`，而不是 `0`。  | 
|   MySQL (外部)   |   **從外部 MySQL 資料庫開啟複寫**  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.SettingUp.html)  | 

如果複寫失敗，可能會導致複本上的非預期輸入/輸出大幅增加，進而降低效能。如果複寫失敗或不再需要複寫，可以執行 [mysql.rds\$1reset\$1external\$1master (Aurora MySQL 第 2 版)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 或 [mysql.rds\$1reset\$1external\$1source (Aurora MySQL 第 3 版)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_source) 預存程序來移除複寫組態。

### 設定位置以停止僅供讀取複本的複寫作業
<a name="AuroraMySQL.Replication.StartReplicationUntil"></a>

在 Aurora MySQL 3.04 版及更新版本中，您可以使用 [mysql.rds\$1start\$1replication\$1until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序開始複寫，然後在指定的二進位日誌檔案位置讓它停止。

**啟動僅供讀取複本的複寫作業，並在特定位置停止複寫**

1. 透過 MySQL 用戶端，以主要使用者的身分連接至複本 Aurora MySQL 資料庫叢集。

1. 執行 [mysql.rds\$1start\$1replication\$1until(Aurora MySQL 第 3 版）](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`。

如果您使用 GTID 式複寫，請使用 [mysql.rds\$1start\$1replication\$1until\$1gtid(Aurora MySQL 第 3 版）](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序，而非 [mysql.rds\$1start\$1replication\$1until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序。如需 GTID 式複寫的詳細資訊，請參閱[使用 GTID 式複寫](mysql-replication-gtid.md)。

## 7. 監控複本
<a name="AuroraMySQL.Replication.MySQL.Monitor"></a>

 設定使用 Aurora MySQL 資料庫叢集的 MySQL 複寫時，當 Aurora MySQL 資料庫叢集為複本目標時，您必須監控其容錯移轉事件。若發生容錯移轉，則屬於複本目標的資料庫叢集可能會以不同的網路地址，在新主機上重新建立。如需如何監控容錯移轉事件的資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。

 您也可以監控複本目標落後複寫來源的程度，方法是連接至複本目標並執行 `SHOW SLAVE STATUS` (Aurora MySQL 第 2 版) 或 `SHOW REPLICA STATUS` (Aurora MySQL 第 3 版) 命令。在命令輸出中，`Seconds Behind Master` 欄位會告知您複本目標落後於來源的程度。

**重要**  
若您升級資料庫叢集並指定自訂參數群組，請務必在升級完成後手動重新啟動叢集。這樣做可讓叢集使用您的新自訂參數設定，並重新開始 binlog 複寫。

## 同步複寫來源和目標之間的密碼
<a name="AuroraMySQL.Replication.passwords"></a>

 當您使用 SQL 陳述式變更複寫來源上的使用者帳戶和密碼時，這些變更會自動複寫到複寫目標。

 如果您使用 AWS 管理主控台 AWS CLI、 或 RDS API 變更複寫來源上的主密碼，這些變更不會自動複寫到複寫目標。如果您要同步來源系統和目標系統之間的主要使用者和主要密碼，則必須自行對複寫目標進行相同的變更。