

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

# 設定與 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`。