

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

# 使用 Amazon Aurora MySQL 設定延遲複寫
<a name="AuroraMySQL.Replication.Delayed"></a>

您可以使用延遲複寫做為 Aurora MySQL 災難復原的策略。利用延遲複寫功能來指定最短時間 (以秒為單位)，即可延遲來源到僅供讀取複本的複寫作業。在發生損毀之時 (例如不小心刪除資料表)，若要快速完成事後復原作業，則請執行下列步驟：

1. 在來源傳送造成災難的變更之前，停止複寫至僅供讀取複本。使用 [mysql.rds\_stop\_replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序來停止複寫作業。

1. 啟動複寫作業並指定日誌檔案位置，則當系統複寫到該位置時，即會自動停止作業。透過 [mysql.rds\_start\_replication\_until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程式，藉此在發生損毀前指定日誌檔案位置。

1. 使用 中的指示，將僅供讀取複本提升為新的來源資料庫叢集[將僅供讀取複本提升為 Aurora MySQL 的資料庫叢集](AuroraMySQL.Replication.CrossRegion.Promote.md)。

**注意**  
Aurora MySQL 支援 8.4.8 版和更新版本的延遲複寫。  
使用預存程序來設定延遲複寫。您無法使用 AWS 管理主控台 AWS CLI、 或 Amazon RDS API 設定延遲複寫。
您可以在 Aurora MySQL 8.4.8 版及更高版本上的延遲複寫組態中使用基於全域交易識別符 (GTIDs) 的複寫。
如果您使用 GTID 式複寫，請使用 [mysql.rds\_start\_replication\_until\_gtid(Aurora MySQL 第 3 版）](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序，而非 [mysql.rds\_start\_replication\_until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序。
Aurora MySQL 支援最多 15 個頻道的多來源複寫。使用`_for_channel`程序變體在特定頻道上設定延遲複寫。

**Topics**
+ [延遲複寫的使用案例](#AuroraMySQL.Replication.Delayed.UseCases)
+ [設定具有延遲的外部複寫](#AuroraMySQL.Replication.Delayed.Configuring)
+ [修改現有僅供讀取複本的延遲複寫](#AuroraMySQL.Replication.Delayed.Modifying)
+ [設定位置以停止複寫至僅供讀取複本](#AuroraMySQL.Replication.Delayed.StopAt)
+ [提升僅供讀取複本](#AuroraMySQL.Replication.Delayed.Promote)
+ [相關主題](#AuroraMySQL.Replication.Delayed.RelatedTopics)

## 延遲複寫的使用案例
<a name="AuroraMySQL.Replication.Delayed.UseCases"></a>

Aurora MySQL 上的延遲複寫適用於二進位日誌式複寫。這包括從 Aurora MySQL 寫入器資料庫叢集複寫到 binlog 複本、從外部 MySQL 來源複寫到 Aurora MySQL 資料庫叢集，或跨多來源複寫通道。它不適用於單一資料庫叢集內的 Aurora 複本，因為這些複本會從共用叢集儲存讀取，而不是從二進位日誌讀取。常見的使用案例包括下列項目：
+ **從運算子錯誤進行災難復原** – 維護 Binlog 複本，該複本會以設定的間隔延遲來源。如果破壞性陳述式意外執行 （例如捨棄資料表），請在來源套用變更之前停止延遲複本上的複寫。然後使用 [mysql.rds\_start\_replication\_until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until)或 向前滾動至事件發生前的 [mysql.rds\_start\_replication\_until\_gtid(Aurora MySQL 第 3 版）](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid)。最後，提升複本。這種方法提供的復原路徑比point-in-time復原更快，這需要損毀復原和二進位日誌重播。
+ **防止邏輯資料損毀** – 延遲複本也會防止應用程式部署或遷移故障而逐漸損毀資料。由於複本會保留延遲時間長度的預先損毀狀態，因此您可以在套用故障交易之前進行復原。
+ **主要版本和藍/綠升級** – 在升級期間保留延遲的 Binlog 複本，或保留藍/綠部署做為安全網路，以便在升級發生問題時回到已知良好的狀態。
+ **從外部來源變更資料擷取 (CDC)** – 當您從外部 MySQL 來源擷取變更至 Aurora MySQL 資料庫叢集時，刻意延遲會在將變更套用到下游之前為您提供受控緩衝區。
+ **沒有還原的歷史檢查** – 查詢延遲複本，以查看您稍早資料的外觀。這有助於偵錯、稽核或調查變更的內容，而無需佈建複製或執行point-in-time還原。
+ **在複寫延遲下測試應用程式行為** – 使用人工膨脹的延遲來驗證應用程式在複本延遲時的行為，並針對延遲敏感的條件執行迴歸測試，而無需產生繁衍延遲的繁重負載。

## 設定具有延遲的外部複寫
<a name="AuroraMySQL.Replication.Delayed.Configuring"></a>

若要設定具有延遲複寫的外部來源，請使用 [mysql.rds\_set\_external\_source\_with\_delay (版本Aurora MySQL 版本 8.4.8 和更新版本)](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_with_delay)預存程序。如需所有複寫預存程序的詳細資訊，請參閱 [設定、啟動和停止二進位日誌 (binlog) 複寫](mysql-stored-proc-replicating.md)。

**範例 （預設頻道）：**

```
CALL mysql.rds_set_external_source_with_delay(
  '{{source-host.example.com}}',
  3306,
  '{{repl_user}}',
  '{{repl_password}}',
  '{{mysql-bin-changelog.000001}}',
  120,
  0,
  3600);
```

**範例 （特定頻道）：**

```
CALL mysql.rds_set_external_source_with_delay_for_channel(
  '{{source-host.example.com}}',
  3306,
  '{{repl_user}}',
  '{{repl_password}}',
  '{{mysql-bin-changelog.000001}}',
  120,
  0,
  3600,
  '{{channel_1}}');
```

**參數：**

{{host\_name}}  
外部來源的主機名稱或 IP 地址。

{{host\_port}}  
外部來源的連接埠號碼。

{{replication\_user\_name}}  
外部來源上的複寫使用者。

{{replication\_user\_password}}  
複寫使用者的密碼。

{{mysql\_binary\_log\_file\_name}}  
外部來源上二進位日誌檔案的名稱。

{{mysql\_binary\_log\_file\_location}}  
二進位日誌檔案中開始複寫的位置。

{{ssl\_encryption}}  
將此參數設定為 `1` 以啟用複寫連線的 SSL 加密，或設定為 `0` 以停用 SSL 加密。

{{延遲}}  
最小延遲秒數 (0–259，200)。

{{頻道}}  
（僅適用於\_通道變體） 多來源複寫的通道名稱。

**限制條件**：
+ Aurora MySQL 最多支援 15 個複寫通道。
+ 每個頻道都必須從不同的來源複寫 （主機：連接埠組合）。
+ 延遲必須介於 0 到 259，200 秒 (72 小時） 之間。
+ 在修改頻道組態之前停止複寫。

## 修改現有僅供讀取複本的延遲複寫
<a name="AuroraMySQL.Replication.Delayed.Modifying"></a>

若要修改現有僅供讀取複本的延遲複寫，請執行 [mysql.rds\_set\_source\_delay (版本Aurora MySQL 8.4.8 及更高版本)](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 預存程序。如需所有複寫預存程序的詳細資訊，請參閱 [設定、啟動和停止二進位日誌 (binlog) 複寫](mysql-stored-proc-replicating.md)。

**若要修改現有僅供讀取複本的延遲複寫：**

1. 使用 MySQL 用戶端，以管理員使用者身分連線至僅供讀取複本。

1. 使用 [mysql.rds\_stop\_replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序來停止複寫作業。

1. 執行 [mysql.rds\_set\_source\_delay (版本Aurora MySQL 8.4.8 及更高版本)](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 預存程序。

1. 使用 [mysql.rds\_start\_replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 預存程序來啟動複寫作業。

**範例 （預設頻道）：**

```
CALL mysql.rds_set_source_delay(3600);
```

**範例 （特定頻道）：**

```
CALL mysql.rds_set_source_delay_for_channel(3600, '{{channel_1}}');
```

這會指定對僅供讀取複本的複寫會延遲至少一小時 (3，600 秒）。延遲值必須介於 0 到 259，200 秒 (72 小時） 之間。

**注意**  
在設定延遲之前停止複寫。如果複寫正在執行，您會收到錯誤，要求您先呼叫 [mysql.rds\_stop\_replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication)（或`mysql.rds_stop_replication_for_channel`特定頻道）。

## 設定位置以停止複寫至僅供讀取複本
<a name="AuroraMySQL.Replication.Delayed.StopAt"></a>

停止僅供讀取複本的複寫作業後，您可以使用 [mysql.rds\_start\_replication\_until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序來啟動複寫，然後在特定的二進位日誌檔案位置停止複寫。

**若要開始複寫並在特定位置停止：**

1. 使用 MySQL 用戶端，以管理員使用者身分連線至僅供讀取複本。

1. 執行 [mysql.rds\_start\_replication\_until(Aurora MySQL 第 3 版）](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序。

**範例**：

```
CALL mysql.rds_start_replication_until(
  'mysql-bin-changelog.000777',
  120);
```

這會啟動複寫並複寫變更，直到達到`mysql-bin-changelog.000777`二進位日誌檔案中的位置 120。在災難復原案例中，假設位置 120 就在災難之前。

當 Aurora MySQL 到達停止點時，複寫會自動停止。Aurora MySQL 會產生下列事件：`Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure`。

如果您使用 GTID 式複寫，請改用 [mysql.rds\_start\_replication\_until\_gtid(Aurora MySQL 第 3 版）](mysql-stored-proc-gtid.md#mysql_rds_start_replication_until_gtid) 預存程序。

## 提升僅供讀取複本
<a name="AuroraMySQL.Replication.Delayed.Promote"></a>

複寫停止後，在災難復原案例中，您可以將僅供讀取複本提升為新的來源資料庫叢集。如需提升僅供讀取複本的相關資訊，請參閱 [將僅供讀取複本提升為 Aurora MySQL 的資料庫叢集](AuroraMySQL.Replication.CrossRegion.Promote.md)。

## 相關主題
<a name="AuroraMySQL.Replication.Delayed.RelatedTopics"></a>
+ 如需所有複寫預存程序的完整參考，請參閱 [設定、啟動和停止二進位日誌 (binlog) 複寫](mysql-stored-proc-replicating.md)。