MariaDB+MaxScale复制报错:Slave I/O线程因@master_binlog_checksum查询失败终止
解决MariaDB 10.0 + MaxScale CDC复制报错:The slave I/O thread stops because a fatal error is encountered when it tried to SELECT @master_binlog_checksum
这个错误的核心原因是MariaDB 10.0引入的binlog校验和特性与MaxScale Binlog Router的配置不兼容,从库尝试查询主端(这里是MaxScale代理的主库)的@master_binlog_checksum变量时失败,导致I/O线程停止。咱们一步步来修复:
一、问题根源拆解
MariaDB 10.0开始默认启用binlog_checksum=CRC32,但MaxScale的Binlog Router如果没有正确开启MariaDB 10兼容模式,或者主库、从库的校验和配置未对齐,就会触发这个查询失败的错误。
二、分步解决方案
1. 调整MariaDB主库的binlog校验和配置
先临时关闭主库的binlog校验和(后续如需开启,需确保全链路配置一致):
-- 临时全局生效(无需重启主库) SET GLOBAL binlog_checksum = 'NONE';
然后编辑主库的my.cnf(或my.ini),添加以下配置确保重启后生效:
binlog_checksum = NONE
2. 修正MaxScale的Binlog Router配置
检查你的maxscale.cnf,确保Replication服务的配置正确适配MariaDB 10.0:
[Replication] type=service router=binlogrouter version_string=10.0.27-log user=myuser passwd=mypwd server_id=3 binlogdir=/var/lib/maxscale # 明确开启MariaDB 10兼容模式,这是解决问题的关键 mariadb10-compatibility=1
注意:你之前的配置把
mariadb10-compatibility=1写在router_options里,单独拎出来配置更清晰,避免解析问题。修改后重启MaxScale服务:systemctl restart maxscale
3. 重新配置从库复制
先停止当前的复制线程:
STOP SLAVE;
然后重新执行CHANGE MASTER TO,明确指定主库的binlog校验和为NONE,和主库配置对齐:
CHANGE MASTER TO MASTER_HOST='192.168.56.102', MASTER_PORT=5308, MASTER_USER='myuser', MASTER_PASSWORD='mypwd', MASTER_LOG_POS=328, MASTER_LOG_FILE='mariadb-bin.000018', MASTER_BINLOG_CHECKSUM = 'NONE';
最后启动复制线程:
START SLAVE;
4. 验证修复结果
执行以下命令检查复制状态:
SHOW SLAVE STATUS\G
重点关注两个关键指标:
Slave_IO_Running: Yes(I/O线程恢复正常运行)Last_IO_Error:(无错误信息)
三、额外注意事项
- 如果后续需要开启binlog校验和,必须确保MariaDB主库、MaxScale、从库三者的
binlog_checksum配置完全一致(建议统一设为CRC32)。 - 确保
myuser账号拥有足够的权限:REPLICATION SLAVE、REPLICATION CLIENT、SELECT(读取系统变量需要)。
内容的提问来源于stack exchange,提问作者Khorshed Alam
相关产品推荐
相关产品推荐

