MySQL的复制过滤器

MySQL的复制过滤器

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

复制过滤器的作用是让从节点仅复制指定的数据库,或指定数据库的指定表。

有如下两种实现方式:

  • 方式一:主服务器仅向二进制日志中记录与特定数据库(或特定表)相关的事件;

  • 方式二:从服务器 SQL 线程在 replay 中继日志中的事件时,仅读取与特定数据库(或特定表)相关的事件并应用于本地;

这两种方式各有利弊:

  • 方式一方式更节省空间,但如果未备份的库或表出现故障,八成就无法完整恢复了,所以不推荐使用;

  • 方式二方式会造成网络带宽、磁盘 I/O、以及存储空间额外的浪费,不过相对来说更安全,因为备份的数据多嘛;

这两种方式可通过如下参数进行配置:

方式一:
	binlog_do_db:数据库白名单列表,即仅记录此处指定的数据库的 binlog 日志;
	binlog_ignore_db:数据库黑名单列表,即仅不记录此处指定的数据库的 binlog 日志;
方式二:
	replicate_do_db:数据库白名单,即仅读取此处指定的数据库的 relay 日志;
	replicate_ignore_db:数据库黑名单,即仅不读取此处指定的数据库的 relay 日志;
	replicate_do_table:数据表白名单,即仅读取此处指定的表的 relay 日志;
	replicate_ignore_table:数据库黑名单,即仅不读取此处指定的表的 relay 日志;	
	replicate_wild_do_table:作用同 replicate_do_table,但它支持以 % 作为通配符匹配表名;
	replicate_wild_ignore_table:作用同 replicate_ignore_table,但它支持以 % 作为通配符匹配表名;

很清晰易懂,直接在 my.cnf 中配置即可,就不演示了~~~

除了可以在 my.cnf 中配置外,从库的 replicate_* 配置配置还可在线修改,语法格式如下:

CHANGE REPLICATION FILTER filter[, filter][, ...]

比如要修改仅读取 db1db2 库的 relay 日志,则可执行如下语句:

mysql> STOP SLAVE SQL_THREAD;
mysql> CHANGE REPLICATION FILTER REPLICATE_DO_DB = (oldguo, oldboy);
mysql> START SLAVE SQL_THREAD;

具体用法可通过 help replication filter 查看。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/mysql-replicate-filter.html

Buy me a cup of coffee ☕.