未选择数据库时MariaDB 10.6.8主从复制失效问题咨询
问题原因分析
这个问题的核心是主从复制的库级过滤规则和SQL线程执行上下文的交互逻辑导致的,具体拆解如下:
主库操作无异常:你执行跨库更新时,操作确实写入了binlog(从
show master status的位置变化能确认),问题出在从库的SQL线程执行阶段。若从库配置了
replicate_do_db(比如指定只同步some_database)这类库级过滤规则,就会触发该异常:- 当主库未选择默认数据库,直接执行
UPDATE some_database.some_tables...这种带库名的语句时,binlog里记录的是完整跨库语句。从库SQL线程执行这条语句时,自身默认库为(none),此时replicate_do_db的过滤逻辑会判定:当前未选中目标库,这条语句不属于同步范围,直接跳过执行。 - 当主库先执行
USE some_database切换库再执行更新,binlog里会先记录库切换语句,从库SQL线程执行时会先切换到some_database,此时replicate_do_db规则匹配,就能正常执行更新操作。
- 当主库未选择默认数据库,直接执行
补充说明:如果你的binlog采用**STATEMENT(语句级)格式,这种上下文依赖的问题会更明显;若换成ROW(行级)**格式,复制基于行数据变更,不受执行上下文和库名写法影响,基本不会出现该问题。
内容的提问来源于stack exchange,提问作者J. Kim
相关产品推荐
相关产品推荐

