mycat的问题终于解决了
耗时了三天吧,终于解决了读写分离环境出现的一个问题。
表面现象是在批量插入的时候报错了,看日志文件,是MySQL驱动包里的代码报错了。
打了断点后,能看到报错的时候返回的一个数组字段是空的,导致报错的。
但问题肯定不在这,项目直连主库的时候是可以执行成功的,这连了中间件,就会报错。
这还了得?盘它!
虽然确定了是mycat的问题,但是因为实在是太难排查了,所以还是看了好大会儿的业务代码。
mycat官网还有一篇介绍了很多个mycat开发的文章,里面的QQ我都加了一遍,就一个同意了,问了他,也没回我。上面十几个邮箱,我都发邮件了,发了两次,现在了还没收到回信。
找以前编译MySQL8源码时在博客园认识的一个DBA问了,人家说用自己自研的,再一问,在百度工作……
留下了羡慕的泪水……
mycat源码也下下来了,也看了网上的介绍,查询统一会走哪个方法,返回数据统一走哪个方法,也在mycat服务器上装了arthas,监控代码也有数据,但是,看不出来问题在哪里。
中间看了业务代码,把批量插入改为之前的代码,结果试了几次都成功了。
之前的批量插入
insert into table (field) values (),(),();
后来统一给改了,支持多语句执行,适用所有的数据库
insert into table(field) values();insert into table(field) values();
当然数据库jdbc连接参数要加一个allowMultiQueries=true
反馈给领导后,领导觉得还是找找mycat的问题吧。
我真是,当初就不该来看这个问题,本来没我事的,好奇心太重。
看了几天了,真是头疼,心想这不是真要读mycat源码吧,虽然也是Java写的,but,不想看啊。
昨天,就在昨天,终于解决了这个问题。
解决方法嘛,升级。
从1.6.5升级到了1.6.7.6。
完了,就这么简单。
下班走人。