

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

# 使用 Amazon RDS 中的 MariaDB 複寫
<a name="USER_MariaDB.Replication"></a>

您通常會使用僅供讀取複本來設定 Amazon RDS 資料庫執行個體間的複寫。如需僅供讀取複本的一般資訊，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。如需在 Amazon RDS for MariaDB 上使用僅供讀取複本的特定資訊，請參閱[使用 MariaDB 僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.md)。

您也可依據二進位日誌座標設定複寫供 MariaDB 資料庫執行個體使用。以 MariaDB 執行個體而言，您也可依據毀損安全功能提升的全域交易 ID (GTID) 來設定複寫。如需詳細資訊，請參閱[使用外部來源執行個體設定 GTID 式複寫](MariaDB.Procedural.Replication.GTID.md)。

下列為適用於 RDS for MariaDB 的其他複寫選項：
+ 您可以在 RDS for MariaDB 資料庫執行個體，以及位於 Amazon RDS 外部的 MySQL 或 MariaDB 執行個體之間，設定複寫。如需使用外部來源設定複寫的詳細資訊，請參閱 [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.ReplMariaDB.md)。
+ 您可將複寫作業設定為從 Amazon RDS 外部的 MySQL 或 MariaDB 執行個體匯入資料庫，或者設定為將資料庫匯出至這類執行個體。如需詳細資訊，請參閱[減少將資料匯入 Amazon RDS for MariaDB 資料庫執行個體時的停機時間](mariadb-importing-data-reduced-downtime.md)及[使用複寫從 MySQL 資料庫執行個體匯出資料](MySQL.Procedural.Exporting.NonRDSRepl.md)。

對於以上任何複寫選項，您可以使用基於列的複寫、基於陳述式或混合式複寫。基於列的複寫只會複寫 SQL 陳述式所變更的列。基於陳述式的複寫會複寫整個 SQL 陳述式。混合式複寫會盡可能使用基於陳述式的複寫，但是當基於陳述式的複寫有不安全的 SQL 陳述式執行時，則會切換到基於列的複寫。在大多數情況下，建議使用混合式複寫。資料庫執行個體的二進位日誌格式決定複寫是基於列、基於陳述式或混合式。如需有關設定二進位日誌格式的資訊，請參閱[設定 MariaDB 二進位記錄](USER_LogAccess.MariaDB.BinaryFormat.md)。

如需 MariaDB 版本之間複寫相容性的相關資訊，請參閱 MariaDB 文件中的[複寫相容性](https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/#replication-compatibility)。

**Topics**
+ [使用 MariaDB 僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.md)
+ [使用外部來源執行個體設定 GTID 式複寫](MariaDB.Procedural.Replication.GTID.md)
+ [使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.ReplMariaDB.md)

# 使用 MariaDB 僅供讀取複本
<a name="USER_MariaDB.Replication.ReadReplicas"></a>

接下來，您可以找到在 Amazon RDS for MariaDB 上使用僅供讀取複本的特定資訊。如需僅供讀取複本的一般資訊及使用說明，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。
+ [設定與 MariaDB 的複寫篩選條件](USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.md)
+ [透過 MariaDB 設定延遲複寫](USER_MariaDB.Replication.ReadReplicas.DelayReplication.md)
+ [使用 MariaDB 更新僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.Updates.md)
+ [使用 MariaDB 處理多可用區域僅供讀取複本的部署](USER_MariaDB.Replication.ReadReplicas.MultiAZ.md)
+ [搭配 RDS for MariaDB 使用階層式僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.Cascading.md)
+ [監控 MariaDB 僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.Monitor.md)
+ [透過 MariaDB 僅供讀取複本啟動與停用複寫](USER_MariaDB.Replication.ReadReplicas.StartStop.md)
+ [對 MariaDB 僅供讀取複本的問題進行故障診斷](USER_ReadRepl.Troubleshooting.MariaDB.md)

## 使用 MariaDB 設定僅供讀取複本
<a name="USER_MariaDB.Replication.ReadReplicas.Configuration"></a>

MariaDB 資料庫執行個體做為複寫來源前，務必將備份保留期設定為 0 以外的值，藉此開啟來源資料庫執行個體的自動備份。若僅供讀取複本能讓其他僅供讀取複本做為來源資料庫執行個體，則亦適用此要求。

您可以從相同區域內的一個資料庫執行個體建立至多 15 個僅供讀取複本。若希望複寫作業順利運作，每個僅供讀取複本具備的運算和儲存資源數量應與來源資料庫執行個體相同。若您擴展來源資料庫執行個體，也要擴展僅供讀取複本。

RDS for MariaDB 支援階層式僅供讀取複本。若要了解如何設定階層式僅供讀取複本，請參閱 [搭配 RDS for MariaDB 使用階層式僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.Cascading.md)。

您可以同時執行多個僅供讀取複本建立，並刪除參考相同來源資料庫執行個體的動作。執行這些動作時，請將每個來源執行個體的僅供讀取複本數目限制在 15 個之內。

# 設定與 MariaDB 的複寫篩選條件
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters"></a>

您可以使用複寫篩選條件來指定要與僅供讀取複本一起複寫的資料庫和資料表。複寫篩選條件可以包含複寫中的資料庫和資料表，或將其排除在複寫之外。

下列是複寫篩選條件的一些應用案例：
+ 要縮小僅供讀取複本的大小。使用複寫篩選，您可以排除僅供讀取複本不需要的資料庫和資料表。
+ 基於安全考量，要將資料庫和資料表從僅供讀取複本中排除。
+ 為不同僅供讀取複本的特定應用案例複寫不同的資料庫和資料表。例如，您可以使用特定僅供讀取複本進行分析或分區。
+ 對於在不同 AWS 區域 中具有僅供讀取複本的資料庫執行個體，可在不同 AWS 區域 中複寫不同的資料庫或資料表。

**注意**  
您也可以使用複寫篩選條件來指定要與主要 MariaDB 資料庫執行個體 (設定為輸入複寫拓撲中的複寫) 一起複寫的資料庫和資料表。如需此組態的詳細資訊，請參閱「[使用外部來源執行個體設定二進位日誌檔案位置複寫](MySQL.Procedural.Importing.External.Repl.md)」。

**Topics**
+ [設定適用於 RDS for MariaDB 的複寫篩選參數](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Configuring)
+ [RDS for MariaDB 的複寫篩選限制](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Limitations)
+ [RDS for MariaDB 的複寫篩選範例](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Examples)
+ [檢視僅供讀取複本的複寫篩選條件](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Viewing)

## 設定適用於 RDS for MariaDB 的複寫篩選參數
<a name="USER_MariaDB.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` 參數時，不會評估此參數。

系統會按照列出的順序對參數進行評估。如需有關這些參數如何運作的詳細資訊，請參閱 [MariaDB 文件](https://mariadb.com/kb/en/replication-filters/#replication-filters-for-replication-slaves)。

根據預設，這些參數中的每個參數都有一個空值。在每個僅供讀取複本上，您可以使用這些參數來設定、變更和刪除複寫篩選條件。當您設定其中一個參數時，請使用逗號將每個篩選條件與其他篩選條件分隔。

您可以在 `%` 和 `_` 參數中使用 `replicate-wild-do-table` 和 `replicate-wild-ignore-table` 萬用字元。`%` 萬用字元等同於任意數目的字元，而 `_` 萬用字元只會等同於一個字元。

來源資料庫執行個體的二進位記錄格式對複寫非常重要，因為它會決定資料變更的記錄。`binlog_format` 參數的設定會決定複寫是以資料列為基礎還是以陳述式為基礎。如需詳細資訊，請參閱 [設定 MariaDB 二進位記錄](USER_LogAccess.MariaDB.BinaryFormat.md)。

**注意**  
無論來源資料庫執行個體上的 `binlog_format` 設定為何，所有資料定義語言 (DDL) 陳述式都會複寫為陳述式。

## RDS for MariaDB 的複寫篩選限制
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Limitations"></a>

下列限制適用於 RDS for MariaDB 的複寫篩選：
+ 每個複寫篩選參數都有 2,000 個字元的限制。
+ 複寫篩選條件不支援逗號。
+ 不支援用於二進位日誌篩選的 MariaDB `binlog_do_db` 和 `binlog_ignore_db` 選項。
+ 複寫篩選不支援 XA 交易。

  如需詳細資訊，請參閱 MySQL 文件中的 [XA 交易的限制](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)。
+ RDS for MariaDB 10.2 版不支援複寫篩選。

## RDS for MariaDB 的複寫篩選範例
<a name="USER_MariaDB.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-mariadb)
+ [Including tables in replication](#rep-filter-in-tables-mariadb)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mariadb)
+ [Escaping wildcard characters in names](#rep-filter-escape-wildcards-mariadb)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mariadb)
+ [Excluding tables from replication](#rep-filter-ex-tables-mariadb)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mariadb)<a name="rep-filter-in-dbs-mariadb"></a>

**Example 在複寫中包含資料庫**  
下列範例包含複寫中的 `mydb1` 和 `mydb2` 資料庫。當您為僅供讀取複本設定 `replicate-do-db` 時，只會複寫參數中指定的資料庫。  
針對 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-mariadb"></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-mariadb"></a>

**Example 使用萬用字元在複寫中包含資料表**  
下列範例包含複寫時在資料庫 `orders` 中名稱開頭為 `returns` 和 `mydb` 的資料表。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
針對 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-escape-wildcards-mariadb"></a>

**Example 逸出名稱中的萬用字元**  
下列範例會示範如何使用逸出字元 `\` 來逸出屬於名稱一部分的萬用字元。  
假設您在資料庫 `mydb1` 中有數個以 `my_table` 開頭的資料庫名稱，而且您想要在複寫中包含這些資料表。資料表名稱包含底線，也是萬用字元，因此此範例會逸出資料表名稱中的底線。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```
針對 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-dbs-mariadb"></a>

**Example 從複寫中排除資料庫**  
下列範例會從複寫中排除 `mydb1` 和 `mydb2` 資料庫。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```
針對 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-mariadb"></a>

**Example 從複寫中排除資料表**  
下列範例會從複寫中排除資料庫 `table1` 中的資料表 `table2` 和 `mydb1`。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```
針對 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-wildcards-mariadb"></a>

**Example 使用萬用字元從複寫中排除資料表**  
下列範例會從複寫中排除資料庫 `orders` 中名稱開頭為 `returns` 和 `mydb` 的資料表。  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
針對 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```

## 檢視僅供讀取複本的複寫篩選條件
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Viewing"></a>

您可以使用下列方式檢視僅供讀取複本的複寫篩選條件：
+ 檢查與僅供讀取複本關聯之參數群組中複寫篩選參數的設定。

  如需說明，請參閱「[在 Amazon RDS 中檢視資料庫參數群組的參數值](USER_WorkingWithParamGroups.Viewing.md)」。
+ 在 MariaDB 用戶端中，連線至僅供讀取複本並執行 `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)。
**注意**  
MariaDB 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 是 10.5 之前的版本，請使用 `SHOW SLAVE STATUS`。

# 透過 MariaDB 設定延遲複寫
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication"></a>

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

  若要停止複寫作業，請使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 預存程序。
+ 若要將僅供讀取複本提升為新的來源資料庫執行個體，請參照[提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)中的指示。

**注意**  
MariaDB 10.6 及更高版本支援延遲複寫。
使用預存程序來設定延遲複寫。您無法透過 AWS 管理主控台、AWS CLI 或 Amazon RDS API 設定延遲複寫。
您可以在延遲複寫組態中使用基於全域交易識別符 (GTID) 的複寫。

**Topics**
+ [在僅供讀取複本建立期間設定延遲複寫](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.ReplicaCreation)
+ [修改現有僅供讀取複本的延遲複寫](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica)
+ [提升僅供讀取複本](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.Promote)

## 在僅供讀取複本建立期間設定延遲複寫
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.ReplicaCreation"></a>

若要為任何未來從資料庫執行個體建立的僅供讀取複本設定延遲複寫，請利用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 參數來執行 `target delay` 預存程序。

**在僅供讀取複本建立期間設定延遲複寫**

1. 透過 MariaDB 用戶端，以主要使用者的身分連接至 MariaDB 資料庫執行個體，該執行個體將成為僅供讀取複本的來源。

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_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

若要修改現有僅供讀取複本的延遲複寫，請執行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 預存程序。

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

1. 透過 MariaDB 用戶端，以主要使用者的身分連接至僅供讀取複本。

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_MariaDB.Replication.ReadReplicas.DelayReplication.Promote"></a>

使用災難復原功能時，您可以參照中的指示，在複寫作業停止後將僅供讀取複本提升為新的來源資料庫執行個體。如需提升僅供讀取複本的相關資訊，請參閱 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。

# 使用 MariaDB 更新僅供讀取複本
<a name="USER_MariaDB.Replication.ReadReplicas.Updates"></a>

僅供讀取複本專門用來支援讀取查詢，但建議您不定期進行更新。例如，您可能需要新增索引來加快特定查詢類型存取複本的速度。您可以在僅供讀取複本的資料庫參數群組中將 `read_only` 參數設定為 **0**，以啟用更新。

# 使用 MariaDB 處理多可用區域僅供讀取複本的部署
<a name="USER_MariaDB.Replication.ReadReplicas.MultiAZ"></a>

您可以從單一可用區域或多可用區域的資料庫執行個體部署建立僅供讀取複本。您可使用異地同步備份部署來改善重要資料的耐用性和可用性，但無法使用異地同步備份部署來處理僅供讀取的查詢。反之，您可從高流量的多可用區域資料庫執行個體建立僅供讀取複本，藉此卸載僅供讀取的查詢。若異地同步備份部署的來源執行個體容錯移轉為次要，任何相關聯的僅供讀取複本會自動將複寫作業來源切換成次要 (現為主要)。如需詳細資訊，請參閱 [設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)。

您可以建立僅供讀取複本並用作多可用區域資料庫執行個體。Amazon RDS 會在另一個可用區域中建立您的複本的待命複本，以獲得該複本的容錯移轉支援。建立您的僅供讀取複本做為多可用區域資料庫執行個體，與來源資料庫是否為多可用區域資料庫執行個體無關。

# 搭配 RDS for MariaDB 使用階層式僅供讀取複本
<a name="USER_MariaDB.Replication.ReadReplicas.Cascading"></a>

RDS for MariaDB 支援階層式僅供讀取複本。利用*階層式僅供讀取複本*，您可以擴展讀取，無須增加來源 RDS for MariaDB 資料庫執行個體的額外負荷。

利用階層式僅供讀取複本，您的 RDS for MariaDB 資料庫執行個體會將資料傳送至鏈結中的第一個僅供讀取複本。之後，該僅供讀取複本會將資料傳送至鏈結中的第二個複本，依此類推。最終結果是鏈結中的所有僅供讀取複本皆具有來自 RDS for MariaDB 資料庫執行個體的變更，但並無僅在來源資料庫執行個體上的額外負荷。

您可從來源 RDS for MariaDB 資料庫執行個體的鏈結中建立一系列最多三個僅供讀取複本。例如，假設您有一個 RDS for MariaDB 資料庫執行個體 `mariadb-main`。您可以執行下列作業：
+ 從 `mariadb-main` 開始，建立鏈結中的第一個僅供讀取複本 `read-replica-1`。
+ 接下來，從 `read-replica-1`，建立鏈結中的下一個僅供讀取複本 `read-replica-2`。
+ 最後，從 `read-replica-2`，建立鏈結中的第三個僅供讀取複本 `read-replica-3`。

除了 `mariadb-main` 系列中的第三個階層式僅供讀取複本之外，您無法建立另一個僅供讀取複本。從 RDS for MariaDB 來源資料庫執行個體至一系列階層式僅供讀取複本尾端的完整執行個體系列最多可包含四個資料庫執行個體。

若要使階層式僅供讀取複本可以運作，每個來源 RDS for MariaDB 資料庫執行個體都必須開啟自動備份。若要在僅供讀取複本上開啟自動備份，首先建立該僅供讀取複本，然後修改該複本來開啟自動備份。如需詳細資訊，請參閱 [建立僅供讀取複本](USER_ReadRepl.Create.md)。

與任何僅供讀取複本一樣，您可提升作為階層式一部分的僅供讀取複本。從僅供讀取複本鏈結中提升僅供讀取複本將會從鏈結中移除該僅供讀取複本。例如，假設您想要將部分工作負載從 `mariadb-main` 資料庫執行個體移至新的執行個體，僅供會計部門使用。假設範例中的三個僅供讀取複本鏈結，您決定提升 `read-replica-2`。該鏈或受到下列影響：
+ 提升 `read-replica-2` 會將其從複寫鏈結中移除。
  + 其現在是一個完整的讀取/寫入資料庫執行個體。
  + 這會持續複寫至 `read-replica-3`，就像在提升之前所做的一樣。
+ 您的 `mariadb-main` 會持續複寫至 `read-replica-1`。

如需提升僅供讀取複本的相關詳細資訊，請參閱 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。

# 監控 MariaDB 僅供讀取複本
<a name="USER_MariaDB.Replication.ReadReplicas.Monitor"></a>

針對 MariaDB 僅供讀取複本，您可以在 Amazon CloudWatch 中透過檢視 Amazon RDS `ReplicaLag` 指標來監控複寫延遲。`ReplicaLag` 指標會回報 `Seconds_Behind_Master` 命令的 `SHOW REPLICA STATUS` 欄位值。

**注意**  
MariaDB 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 是 10.5 之前的版本，請使用 `SHOW SLAVE STATUS`。

MariaDB 複寫延遲的常見原因如下：
+ 網路停機。
+ 寫入僅供讀取複本上的資料表仍有索引。若未將僅供讀取複本的 `read_only` 參數設為 0，可能會中斷複寫。
+ 使用非交易儲存引擎 (例如 MyISAM)。複寫功能僅支援 MariaDB 上的 InnoDB 儲存引擎。

當 `ReplicaLag` 指標到達 0，複本即已跟上來源資料庫執行個體。如果 `ReplicaLag` 指標傳回 -1，表示複寫目前為非作用中。`ReplicaLag` = -1 相當於 `Seconds_Behind_Master` = `NULL`。

# 透過 MariaDB 僅供讀取複本啟動與停用複寫
<a name="USER_MariaDB.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 MariaDB 資料庫執行個體時的停機時間](mariadb-importing-data-reduced-downtime.md)及[使用複寫從 MySQL 資料庫執行個體匯出資料](MySQL.Procedural.Exporting.NonRDSRepl.md)。

若複寫作業停止連續超過 30 天 (不論手動停止或由於複寫錯誤)，Amazon RDS 會結束來源資料庫執行個體和所有僅供讀取複本間的複寫作業。這樣做的原因在於，避免來源資料庫執行個體的儲存需求增加以及長期容錯移轉。僅供讀取複本資料庫執行個體仍可供使用。然而，無法恢復複寫作業，因為在複寫作業結束後，僅供讀取複本所需的二進位日誌已從來源資料庫執行個體刪除。您可建立新的僅供讀取複本供來源資料庫執行個體使用，以重新建立複寫作業。

# 對 MariaDB 僅供讀取複本的問題進行故障診斷
<a name="USER_ReadRepl.Troubleshooting.MariaDB"></a>

MariaDB 的複寫技術採取非同步，因此，來源資料庫執行個體的 `BinLogDiskUsage` 和僅供讀取複本上的 `ReplicaLag` 預料會偶爾增加。例如，來源資料庫執行個體可同時出現大量寫入操作。相對而言，僅供讀取複本的寫入操作則使用單一 I/O 執行緒序列化，這可能導致來源執行個體和僅供讀取複本之間的延遲。如需 MariaDB 文件中的僅供讀取複本詳細資訊，請造訪[複寫概觀](http://mariadb.com/kb/en/mariadb/replication-overview/)。

您可執行下列動作，減少來源資料庫執行個體的更新與僅供讀取複本的後續更新間的延遲：
+ 將僅供讀取複本的儲存體大小和資料庫執行個體類別大小，設定為等同於來源資料庫執行個體。
+ 確保來源資料庫執行個體和僅供讀取複本所使用之資料庫參數群組中的參數設定相容。如需詳細資訊和範例，請參閱本節稍後討論的 `max_allowed_packet` 參數。

Amazon RDS 會監控複寫您的僅供讀取複本的狀態，並在複寫因任何原因停止時，將僅供讀取複本執行個體上的 `Replication State` (複寫狀態) 欄位更新為 `Error` (錯誤)。一個可能的範例為，僅供讀取複本上執行的 DML 查詢，與來源資料庫執行個體的更新相衝突。

您可以檢視 `Replication Error` 欄位，藉此檢閱 MariaDB 引擎擲出之相關聯錯誤的詳細資訊。也會產生指出僅供讀取複本之狀態的事件，包括 [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)。如果傳回了 MariaDB 錯誤訊息，請在 [MariaDB 錯誤訊息文件](http://mariadb.com/kb/en/mariadb/mariadb-error-codes/)中檢閱錯誤。

其中一個常見問題就是僅供讀取複本的 `max_allowed_packet` 參數值小於來源資料庫執行個體的 `max_allowed_packet` 參數值，因而導致複寫錯誤。`max_allowed_packet` 參數是能夠在資料庫參數群組中設定的自訂參數，專用來指定可在資料庫上執行的 DML 程式碼大小上限。在部分案例中，與來源資料庫執行個體建立關聯之資料庫參數群組的 `max_allowed_packet` 參數值，會小於與來源僅供讀取複本建立關聯之資料庫參數群組的 `max_allowed_packet` 參數值。以這些情況而言，複寫程序可能會擲出錯誤 (Packet 大於 max\$1allowed\$1packet 位元組)，並停止複寫作業。您可以透過讓來源和僅供讀取複本使用具有相同 `max_allowed_packet` 參數值的資料庫參數群組，藉此修正錯誤。

可能造成複寫錯誤的其他常見情況包括下列：
+ 寫入僅供讀取複本上的資料表。如果您在僅供讀取複本上建立索引，您需要將 `read_only` 參數設為 **0** 才能建立索引。如果您要寫入僅供讀取複本上的資料表，可能中斷複寫。
+ 使用非交易式存放引擎 (例如 MyISAM)。僅供讀取複本需要交易式存放引擎。複寫功能僅支援 MariaDB 上的 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 (複寫中)*。

在某些情況下，如果程序失敗的期間未排清部分二進位日誌 (binlog) 事件，便無法將 MariaDB 資料庫執行個體的僅供讀取複本切換至次要資料庫。在這種情況下，手動刪除並重新建立僅供讀取複本。如果要降低此情況發生的機率，則可設定以下參數值：`sync_binlog=1` 和 `innodb_flush_log_at_trx_commit=1`。但這些設定可能會降低效能，所以請先測試這些設定所帶來的影響，再於生產環境中實作變更內容。

# 使用外部來源執行個體設定 GTID 式複寫
<a name="MariaDB.Procedural.Replication.GTID"></a>

您可以根據全域交易識別符 (GTID) 從 10.0.24 版或更新版本的外部 MariaDB 執行個體設定複寫到 RDS for MariaDB 資料庫執行個體。在 Amazon RDS 上設定外部來源執行個體和複本時，按照這些準則操作：
+ 監控 RDS for MariaDB 資料庫執行個體 (您的複本) 的容錯移轉事件。若發生容錯移轉，資料庫執行個體 (您的複本) 可能會以不同的網路地址，在新主機上重新建立。如需如何監控容錯移轉事件的資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 確定已將二進位日誌 (binlogs) 套用至複本前，都要將二進位日誌保留在來源執行個體上。如此一來，發生故障時，您就可以還原來源執行個體。
+ 對 Amazon RDS 上的 MariaDB 資料庫執行個體啟用自動備份。如果您需要重新同步來源執行個體與複本，開啟自動備份功能可確保您能夠將複本還原至特定時間點。如需備份和時間點還原的相關資訊，請參閱[備份、還原和匯出資料](CHAP_CommonTasks.BackupRestore.md)。

**注意**  
在 MariaDB 資料庫執行個體上啟動複寫所需的許可受到限制，並且不授予 Amazon RDS 主要使用者。因此，您必須使用 Amazon RDS [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) 命令，以設定即時資料庫與您的 RDS for MariaDB 資料庫之間的複寫。

若要在外部來源執行個體與 Amazon RDS 上的 MariaDB 資料庫執行個體之間開始複寫，請使用下列程序。<a name="MariaDB.Procedural.Importing.External.Repl.Procedure"></a>

**啟動複寫**

1. 將來源 MariaDB 執行個體設成唯讀：

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 取得外部 MariaDB 執行個體的目前 GTID。在作法上可使用 `mysql` 或您選擇的查詢編輯器來執行 `SELECT @@gtid_current_pos;`。

   GTID 的格式為 `<domain-id>-<server-id>-<sequence-id>`。一般 GTID 類似於 **0-1234510749-1728**。如需 GTID 及其組成部分的詳細資訊，請參閱 MariaDB 文件中的[全域交易 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)。

1. 使用 `mysqldump` 從外部 MariaDB 執行個體將資料庫複製到 MariaDB 資料庫執行個體。如果是非常大型的資料庫，您可能需要使用 [減少將資料匯入 Amazon RDS for MariaDB 資料庫執行個體時的停機時間](mariadb-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` 選項與輸入的密碼之間不能有空格。  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

   在 `--host` 命令中，使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 選項來指定主機名稱、使用者名稱、連接埠和密碼，以連接至 MariaDB 資料庫執行個體。主機名稱是來自 MariaDB 資料庫執行個體端點的 DNS 名稱，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。端點值可在 Amazon RDS 管理主控台的執行個體詳細資訊中找到。

1. 將來源 MariaDB 執行個體重新設為可寫入。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

1. 在 Amazon RDS 管理主控台，將代管外部 MariaDB 資料庫之伺服器的 IP 地址，新增至 MariaDB 資料庫執行個體的 VPC 安全群組。如需有關修改 VPC 安全群組的詳細資訊，請參閱《Amazon Virtual Private Cloud 使用者指南》**中的 [VPC 安全群組](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   IP 地址會在滿足下列條件時變更：
   + 您使用公有 IP 地址供外部來源執行個體和資料庫執行個體通訊。
   + 外部來源執行個體停止後又重新啟動。

   如果符合這些條件，請先驗證 IP 地址再新增它。

   您可能還需要設定本機網路，以允許從 MariaDB 資料庫執行個體的 IP 地址建立的連線，使之能夠與外部 MariaDB 執行個體進行通訊。若要尋找 MariaDB 資料庫執行個體的 IP 地址，請使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主機名稱是來自 MariaDB 資料庫執行個體端點的 DNS 名稱。

1. 使用您選擇的用戶端，連接至外部 MariaDB 執行個體，並建立用於複寫的 MariaDB 使用者。此帳戶只供複寫作業使用，務必限制其存取您的網域，以提升安全性。下列是 範例。

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 若為外部 MariaDB 執行個體，請將 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予複寫使用者。舉例來說，若要將所有資料庫的 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 權限授予您網域中的「`repl_user`」使用者，請發出下列命令。

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

1. 將 MariaDB 資料庫執行個體變成複本。以主要使用者身分連接至 MariaDB 資料庫執行個體，然後使用 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 命令，將外部 MariaDB 資料庫識別為複寫來源執行個體。使用您在步驟 2 決定的 GTID。下列是 範例。

   ```
   CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 1);
   ```
**注意**  
指定此處所顯示提示以外的密碼，作為安全最佳實務。

1. 在 MariaDB 資料庫執行個體上，發出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令來開始複寫。

   ```
   CALL mysql.rds_start_replication; 
   ```

# 使用外部來源執行個體設定二進位日誌檔案位置複寫
<a name="MySQL.Procedural.Importing.External.ReplMariaDB"></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;
   ```