mysql中复制过滤器怎么配置和使用

来源:开发教程作者:Ada头衔:草根站长
导读:本期聚焦于小伙伴创作的《mysql中复制过滤器怎么配置和使用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《mysql中复制过滤器怎么配置和使用》有用,将其分享出去将是对创作者最好的鼓励。

mysql的复制过滤器是在主从复制架构中,用来筛选需要同步到从库的数据对象的功能,通过配置过滤规则,可以只同步指定的数据库、数据表,或者排除不需要同步的内容,减少从库的存储压力和同步延迟。

mysql中复制过滤器怎么配置和使用

复制过滤器的分类

mysql的复制过滤器分为两类,分别是主库端过滤从库端过滤,两者的生效时机和作用范围有明显区别。

主库端过滤

主库端过滤是在主库生成binlog日志时就进行筛选,只有符合规则的操作才会被记录到binlog中,从库只能获取到这些被选中的日志内容。主库端过滤的配置参数是binlog_do_dbbinlog_ignore_db

配置说明

  • binlog_do_db:指定需要记录binlog的数据库,只有针对该数据库的操作才会被写入binlog,多个数据库可以重复配置该参数。
  • binlog_ignore_db:指定不需要记录binlog的数据库,针对该数据库的操作不会被写入binlog,多个数据库可以重复配置该参数。

主库端过滤的生效逻辑和当前使用的binlog格式有关,如果是STATEMENT格式,过滤规则基于当前默认数据库判断;如果是ROW格式,过滤规则基于操作的实际数据库判断,这也是很多用户配置后不生效的常见原因。

从库端过滤

从库端过滤是主库把所有binlog都发送给从库,从库的SQL线程在回放日志时,根据规则筛选需要执行的操作,不符合规则的操作会被直接跳过。从库端过滤的配置参数更多,覆盖的粒度也更细。

  • replicate_do_db:只回放指定数据库的操作,多个数据库可重复配置。
  • replicate_ignore_db:跳过指定数据库的操作,多个数据库可重复配置。
  • replicate_do_table:只回放指定数据表的操作,格式为数据库名.表名
  • replicate_ignore_table:跳过指定数据表的操作,格式为数据库名.表名
  • replicate_wild_do_table:通过通配符匹配需要回放的表,比如test.%表示test库下所有表。
  • replicate_wild_ignore_table:通过通配符匹配需要跳过的表,比如test.tmp_%表示test库下所有tmp开头的表。

复制过滤器的具体配置方法

复制过滤器的配置需要修改mysql的配置文件,修改完成后重启服务生效,也可以通过动态命令临时修改,但是重启后会失效,建议同时修改配置文件和动态设置。

主库端过滤配置示例

假设我们需要主库只记录test_dborder_db两个数据库的操作,其他数据库的操作不写入binlog,配置步骤如下:

1. 修改主库配置文件my.cnf[mysqld]模块:

[mysqld]
# 启用binlog
log_bin=mysql-bin
# 指定需要记录binlog的数据库
binlog_do_db=test_db
binlog_do_db=order_db
# binlog格式建议设置为ROW,避免过滤规则判断异常
binlog_format=ROW

2. 动态修改配置(可选,用于临时生效不需要重启):

-- 查看当前binlog过滤配置
SHOW MASTER STATUS;
-- 动态设置需要记录binlog的数据库,注意动态设置会覆盖之前的配置
SET GLOBAL binlog_do_db='test_db';
SET GLOBAL binlog_do_db='order_db';

从库端过滤配置示例

假设从库需要同步主库的test_db库下所有表,以及order_db库下user_order表,其他内容都跳过,配置步骤如下:

1. 修改从库配置文件my.cnf[mysqld]模块:

[mysqld]
# 从库开启中继日志
relay_log=mysql-relay
# 指定需要回放的数据库
replicate_do_db=test_db
replicate_do_db=order_db
# 指定需要回放的表,覆盖更细粒度
replicate_do_table=order_db.user_order
# 跳过test_db库下的临时表
replicate_wild_ignore_table=test_db.tmp_%

2. 动态修改从库过滤配置:

-- 停止从库SQL线程
STOP SLAVE SQL_THREAD;
-- 设置过滤规则
CHANGE REPLICATION FILTER REPLICATE_DO_DB=(test_db,order_db);
CHANGE REPLICATION FILTER REPLICATE_DO_TABLE=(order_db.user_order);
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE=('test_db.tmp_%');
-- 启动从库SQL线程
START SLAVE SQL_THREAD;

配置验证与常见问题

配置完成后需要验证过滤规则是否生效,同时要注意一些常见的配置误区。

验证方法

可以通过在主库执行对应操作,然后查看从库的数据是否同步来验证:

-- 主库执行,测试test_db库的同步
CREATE TABLE test_db.test_table(id INT PRIMARY KEY);
INSERT INTO test_db.test_table VALUES(1);
-- 从库查询,确认数据存在
SELECT * FROM test_db.test_table;

-- 主库执行,测试其他库的过滤
CREATE TABLE other_db.other_table(id INT PRIMARY KEY);
-- 从库查询,确认other_db库没有同步
SHOW DATABASES LIKE 'other_db';

常见问题说明

  • 主库使用binlog_do_db时,如果执行跨库操作,比如USE other_db; INSERT INTO test_db.test_table VALUES(2);,在STATEMENT格式下该操作不会被记录,因为默认数据库是other_db,不符合过滤规则,建议主库过滤优先使用ROW格式binlog。
  • 从库的replicate_do_dbreplicate_do_table是同时生效的,只要满足其中一个规则,操作就会被回放,不需要同时满足。
  • 过滤规则修改后,只对新生成的binlog或者新的中继日志生效,已经存在的日志不会重新过滤,如果需要重新过滤历史数据,需要重新搭建从库或者手动同步数据。
  • 不要同时配置replicate_do_dbreplicate_ignore_db针对同一个数据库,也不要同时配置replicate_do_tablereplicate_ignore_table针对同一个表,避免规则冲突导致不可预期的结果。

使用建议

如果只需要控制少量数据库的同步,优先使用从库端过滤,因为主库端过滤会减少binlog的内容,影响基于binlog的其他功能比如增量备份、数据恢复。如果需要严格控制主库的binlog大小,减少网络传输量,再考虑使用主库端过滤。生产环境配置前建议先在测试环境验证规则是否符合预期,避免误过滤导致数据不一致。

mysql复制过滤器主从复制binlog_do_dbreplicate_do_db修改时间:2026-07-03 08:15:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。