当前位置: 首页 > 网站开发 > 正文

canal slave 解析sql错误的分析

关键字:
1 星2 星3 星4 星5 星 (暂无评分)
Loading ... Loading ...
baidu_share

最近用canal实现双机房数据同步,canal接一个slave数据库。

数据库架构:一主两从,两从属于并行关系。主binglog模式使用mixed模式,两个从binglog模式使用ROW模式。主使用mixed模式,主要从性能方面考虑。

出现问题:canal解析丛库binlog,把dml语句(insert,update,delete)认识成了ddl语句。RowChange getIsDdl为true。

由于当时在从库设置set global binlog_format=ROW;并修改my.cnf文件设置 binlog-format=ROW。

在丛库运行flush logs;让其重新产生一个binlog文件。重启应用,问题依旧。

原因:
问题出在mysql端,比如DBA可能是这样做的,用root权限在mysql shell端 set binlog_format = row 但是并没重启mysql数据库,导致即使连到mysql端 show variables 看到了row模式的配置,但是mysql 解析仍然有问题。其实这里之所以还是有问题是因为,作为slave的mysql 的dump线程并没有得到重启,所以这个线程的方式还是之前的模式(之前是statement模式),所以fetch过来的数据解析就会出现问题。

解决:
1.重启mysql。
2.但是线上的mysql是不会轻易给你重启,所以我们可以重启主从复制线程也可以。

stop slave;
start slave;

本文固定链接: http://www.chepoo.com/analysis-canal-slave-parsing-sql-error.html | IT技术精华网

canal slave 解析sql错误的分析:等您坐沙发呢!

发表评论