使用 MariaDB 配置复制筛选条件
您可以使用复制筛选条件来指定使用只读副本的数据库和表。复制筛选条件可以将数据库和表包含在复制之中或排除在复制之外。
以下是复制筛选条件的一些使用案例:
-
缩减只读副本的大小。使用复制筛选,您可以排除只读副本上不需要的数据库和表。
-
出于安全原因,将数据库和表从只读副本中排除。
-
在不同只读副本中为特定使用案例复制不同的数据库和表。例如,您可以使用特定的只读副本进行分析或分片。
-
对于在不同 Amazon Web Services 区域中具有只读副本的数据库实例,要在不同的 Amazon Web Services 区域中复制不同的数据库或表。
注意
您还可以使用复制筛选条件来指定使用入站复制拓扑中主 MariaDB 数据库实例的数据库和表。有关此配置的更多信息,请参阅配置与外部源实例之间的二进制日志文件位置复制。
设置 RDS for MariaDB 的复制筛选参数
要配置复制筛选条件,请在只读副本上设置以下复制筛选参数:
-
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 文档
默认情况下,这些参数中的每个参数都具有一个空值。在每个只读副本上,您可以使用这些参数来设置、更改和删除复制筛选条件。设置其中一个参数时,请用逗号将各筛选条件分开。
您可以在 %
和 _
参数中使用 replicate-wild-do-table
和 replicate-wild-ignore-table
通配符。%
通配符可以匹配任意数量的字符,而 _
通配符只能匹配一个字符。
源数据库实例的二进制日志记录格式对于复制非常重要,因为它决定了数据更改的记录。binlog_format
参数的设置将决定复制是基于行还是基于语句的复制。有关更多信息,请参阅“配置 MariaDB 二进制日志记录”。
注意
无论源数据库实例上的 binlog_format
设置如何,所有数据定义语言 (DDL) 语句都将作为语句进行复制。
RDS for MariaDB 的复制筛选限制
以下限制适用于对 RDS for MariaDB 进行复制筛选:
-
每个复制筛选参数不得超过 2000 个字符。
-
复制筛选条件中不支持逗号。
-
不支持用于二进制日志筛选的 MariaDB
binlog_do_db
和binlog_ignore_db
选项。 -
复制筛选不支持 XA 事务。
有关更多信息,请参阅 MySQL 文档中的XA 事务限制
。 -
RDS for MariaDB 版本 10.2 不支持复制筛选。
RDS for MariaDB 的复制筛选示例
要为只读副本配置复制筛选,请修改与只读副本关联的参数组中的复制筛选参数。
注意
您无法修改默认参数组。如果只读副本使用默认参数组,请创建新的参数组并将其与只读副本关联。有关数据库参数组的更多信息,请参阅 Amazon RDS 的参数组。
您可以使用 Amazon Web Services Management Console、Amazon CLI 或 RDS API 在参数组中设置参数。有关设置参数的信息,请参阅 在 Amazon RDS 中修改数据库参数组中的参数。在参数组中设置参数时,与参数组关联的所有数据库实例都使用参数设置。如果在参数组中设置复制筛选参数,请确保参数组仅与只读副本关联。将源数据库实例的复制筛选参数留空。
以下示例使用 Amazon CLI 设置参数。这些示例将 ApplyMethod
设置为 immediate
,以便在 CLI 命令完成后立即发生参数更改。如果希望在只读副本重新启动后应用待处理的更改,请将 ApplyMethod
设置为 pending-reboot
。
以下示例设置了复制筛选条件:
例 将数据库包含在复制之中
以下示例将 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"}]"
例 将表包含在复制之中
以下示例将数据库 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"}]"
例 使用通配符将表包含在复制之中
以下示例将数据库 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"}]"
例 转义名称中的通配符
以下示例展示了如何使用转义字符 \
来转义名称中的通配符。
假设数据库 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"}]"
例 将数据库排除在复制之外
以下示例将 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"}]"
例 将表排除在复制之外
以下示例将数据库 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"}]"
例 使用通配符将表排除在复制之外
以下示例将数据库 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"}]"
查看只读副本的复制筛选条件
您可以通过以下方式查看只读副本的复制筛选条件:
-
检查与只读副本关联的参数组中复制筛选参数的设置。
有关说明,请参阅在 Amazon RDS 中查看数据库参数组的参数值。
-
在 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 文档中的检查复制状态
。 注意
以前的 MariaDB 版本使用的是
SHOW SLAVE STATUS
,而不是SHOW REPLICA STATUS
。如果您使用的 MariaDB 版本低于 10.5,那么请使用SHOW SLAVE STATUS
。 -