canal连接两个数据库实例,有一个数据库有问题,根据canal打印的storeValue有如下区别: 好的库:
应该是个二进制文件 storeValue: "\b\223\207\261z\020\001P\000b\260\f\0220\b\000\020\373\377\377\377\377\377\377\377\377\001\032\
不好的库: 打印出sql语句了 storeValue: "\020\002Z\231\002update t_crm_multi_account\n SET sys_status = 3,\n \n \n business_status = 1
哪位大神知道是什么问题吗?感觉是数据库binlog配置问题
原提问者GitHub用户ferry1376122
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题找到了:binlog打开的模式问题 mysql默认没有开启binlog,修改mysql的my.cnf文件,添加如下配置,注意binlog-format必须为row,因为binlog如果为 STATEMENT或者MIXED,则binlog中记录的是sql语句,不是具体的数据行,canal就无法解析到具体的数据变更了 log-bin=E:/mysql5.5/bin_log/mysql-bin.log binlog-format=ROW server-id=123
原回答者GitHub用户ferry1376122
可以看出,好的库打印出的storeValue是二进制文件,而坏的库打印出的storeValue是SQL语句。这可能是因为好的库启用了二进制日志(binlog),而坏的库没有启用二进制日志,导致canal无法获取到二进制日志的内容,只能获取到SQL语句。建议检查坏的库的binlog配置,并确保已经启用了binlog。另外,也可以查看canal的配置文件,确保已经开启了获取binlog的功能。
binlog日志中storevalue字段的内容是二进制格式的,并且它表示一条DML语句执行时所修改的行数据,具体的内容需要根据不同的表结构和数据类型来解析。因此,storevalue字段的内容并不能直接用于判断问题所在。建议您从其他方面入手,如检查数据库实例的配置、运行状态、日志等信息,以确定问题的原因和解决办法。