应使用从库的replicate-ignore-db而非主库binlog-ignore-db,因后者仅按USE上下文过滤、ROW格式下失效,而replicate-ignore-db在SQL线程回放时匹配显式库名,对ROW/STATEMENT均有效且稳定。

binlog_ignore_db 的作用范围经常被误解
binlog_ignore_db 只影响 **当前会话默认数据库(即 USE db_name 后的 db)** 下执行的语句,且仅对 STATEMENT 格式 binlog 有确定性效果。在 ROW 格式下,它基本失效——因为 ROW 模式记录的是行变更本身,不依赖 SQL 语句上下文,MySQL 无法准确判断某条 UPDATE 是否“属于”被忽略的库。
常见错误现象:binlog-ignore-db=mysql 配了,但 INSERT INTO mysql.user ... 仍被写入 binlog;或者跨库操作如 UPDATE other_db.t1 SET x=1 WHERE id IN (SELECT id FROM mysql.db) 依然触发复制。
- 它不是“过滤器”,而是“语句级白名单/黑名单提示”,底层逻辑松散
- 官方文档明确建议:不要依赖
binlog_ignore_db做关键数据隔离 - 若主库开了
log_slave_updates(用于级联复制),该参数对从库自身产生的 binlog 也生效,但行为更不可控
真正可控的过滤方式是 replicate-ignore-db(从库端)
想让从库跳过某些库的同步,必须在 从库 的配置中使用 replicate-ignore-db,而不是主库的 binlog-ignore-db。
这个参数由 SQL 线程在回放 relay log 时解析判断,对 ROW 和 STATEMENT 均有效,且匹配逻辑明确:只要语句涉及的库名(或改写后的目标库)匹配,就跳过执行。
- 必须写在从库的
[mysqld]段下,重启 MySQL 生效 - 多个库写多行:
replicate-ignore-db=mysql、replicate-ignore-db=performance_schema - 注意大小写敏感:Linux 下库名区分大小写,
replicate-ignore-db=MYSQL不会匹配mysql - 不能和
replicate-do-db混用,否则行为未定义(MySQL 官方明确禁止)
为什么推荐用 ROW 格式 + replicate-ignore-db 组合
主库用 binlog_format=ROW 是当前生产环境事实标准,而 binlog-ignore-db 在 ROW 下几乎无意义。此时唯一可靠、可预测的过滤点,就是从库 SQL 线程的 replicate-ignore-db。
这种组合的好处是:主库 binlog 完整保留所有变更(利于审计、误删恢复、GTID 兼容),过滤逻辑完全下沉到从库,不影响主库稳定性与 binlog 可靠性。
- 避免主库因误配
binlog-ignore-db导致 binlog 缺失,造成从库同步中断或数据不一致 -
replicate-ignore-db对 CREATE/DROP DATABASE 语句也生效(跳过建库/删库操作) - 如果未来要升级为 GTID 模式,
replicate-ignore-db依然可用;binlog-ignore-db则与 GTID 冲突(GTID 要求所有事务都记录)
容易踩的坑:replicate-ignore-db 的路径匹配陷阱
replicate-ignore-db 匹配的是语句中显式出现的数据库名,不是表的物理路径。例如:
USE test; UPDATE mysql.user SET password_expired = 'N';
这条语句不会被 replicate-ignore-db=mysql 拦截,因为当前默认库是 test,而 mysql.user 是跨库引用——MySQL 认为它属于 test 上下文,而非 mysql 库。
- 真正会被拦截的只有:直接在
mysql库下执行的语句,如USE mysql; UPDATE user SET ... - 解决跨库误同步,应配合
replicate-wild-ignore-table,例如:replicate-wild-ignore-table=mysql.% - 该通配符支持
%和_,比replicate-ignore-db更彻底,但性能略低(需字符串匹配)
配置主从复制时,最常被轻视的其实是“过滤规则的执行位置”——它不在主库日志生成侧,而在从库回放侧。别在主库拼命调 binlog-ignore-db,先确认你的过滤意图到底是要“不让它进 binlog”,还是“不让它在从库执行”。前者脆弱且难控,后者才是稳定落地的正解。


















