开发者社区> 问答> 正文

mysql-8.0.18同步失败,Read Q_FLAGS2_CODE error: limit e

mysq版本:8.0.18 otter manage 版本:4.2.18 otter node 版本:4.2.12 centos 系统:7.6

monitor_info.log报错如下:

2020-05-12 09:50:15.942 INFO monitorInfo - has suppressed alarm : pid:1 nid:2 exception:canal:guangzhou_to_idc:java.io.IOException: Read Q_FLAGS2_CODE error: limit excceed: 64 at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.unpackVariables(QueryLogEvent.java:650) at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.(QueryLogEvent.java:477) at com.taobao.tddl.dbsync.binlog.LogDecoder.decode(LogDecoder.java:154) at com.taobao.tddl.dbsync.binlog.LogDecoder.decode(LogDecoder.java:106) at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:115) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:209) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalArgumentException: limit excceed: 64 at com.taobao.tddl.dbsync.binlog.LogBuffer.getUint32(LogBuffer.java:561) at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.unpackVariables(QueryLogEvent.java:563) ... 6 more

manager.log报错如下:

2020-05-12 09:31:31.545 [/?action=channelAction&channelId=1&status=start&pageIndex=1&searchKey=&eventSubmitDoStatus=true] WARN com.alibaba.dubbo.remoting.transport.AbstractClient - [DUBBO] client reconnect to 192.168.32.22:2088 find error . url: dubbo://192.168.32.22:2088/endpoint?acceptEvent.timeout=50000&client=netty&codec=dubbo&connections=30&heartbeat=60000&iothreads=4&lazy=true&payload=8388608&send.reconnect=true&serialization=java&threads=50, dubbo version: 2.5.3, current host: 192.168.32.33 com.alibaba.dubbo.remoting.RemotingException: client(url: dubbo://192.168.32.22:2088/endpoint?acceptEvent.timeout=50000&client=netty&codec=dubbo&connections=30&heartbeat=60000&iothreads=4&lazy=true&payload=8388608&send.reconnect=true&serialization=java&threads=50) failed to connect to server /192.168.32.22:2088,error message is:Connection refused at com.alibaba.dubbo.remoting.transport.netty.NettyClient.doConnect(NettyClient.java:124) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.remoting.transport.AbstractClient.connect(AbstractClient.java:280) ~[dubbo-2.5.3.jar:2.5.3] at com.alibaba.dubbo.remoting.transport.AbstractClient$1.run(AbstractClient.java:145) ~[dubbo-2.5.3.jar:2.5.3] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_92] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_92] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_92] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_92] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_92] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_92] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_92] Caused by: java.net.ConnectException: Connection refused at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_92] at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_92] at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.connect(NioClientSocketPipelineSink.java:384) ~[netty-3.2.2.Final.jar:na] at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.processSelectedKeys(NioClientSocketPipelineSink.java:354) ~[netty-3.2.2.Final.jar:na] at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$Boss.run(NioClientSocketPipelineSink.java:276) ~[netty-3.2.2.Final.jar:na] at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46) ~[netty-3.2.2.Final.jar:na] ... 3 common frames omitted node节点的日志报错:

2020-05-12 09:54:00.924 [destination = guangzhou_to_idc , address = /192.168.32.22:3306 , EventParser] WARN c.a.o.s.a.i.setl.zookeeper.termin.WarningTerminProcess - nid:2[1:canal:guangzhou_to_idc:java.io.IOException: Read Q_FLAGS2_CODE error: limit excceed: 64 at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.unpackVariables(QueryLogEvent.java:650) at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.(QueryLogEvent.java:477) at com.taobao.tddl.dbsync.binlog.LogDecoder.decode(LogDecoder.java:154) at com.taobao.tddl.dbsync.binlog.LogDecoder.decode(LogDecoder.java:106) at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:115) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:209) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalArgumentException: limit excceed: 64 at com.taobao.tddl.dbsync.binlog.LogBuffer.getUint32(LogBuffer.java:561) at com.taobao.tddl.dbsync.binlog.event.QueryLogEvent.unpackVariables(QueryLogEvent.java:563) ... 6 more

究竟是什么原因呢。

原提问者Github用户 mawenbin666

展开
收起
云上静思 2023-06-14 23:35:06 258 0
5 条回答
写回答
取消 提交回答
  • 把otter_node的版本升级到4.2.18就可以了。

    原回答者Github用户 mawenbin666

    2023-06-16 15:20:15
    赞同 展开评论 打赏
  • 根据报错信息,可以判断出是Otter管理节点和Otter节点之间的Canal同步出现了问题。

    在monitor_info.log中,出现了QueryLogEvent的异常,提示读取Q_FLAGS2_CODE时出现了limit excceed: 64的错误。这可能是由于Canal解析binlog时出现了问题,导致解析错误。

    在manager.log中,出现了Dubbo连接异常的警告信息。这可能是由于Otter节点无法连接到Otter管理节点,导致连接被拒绝。

    建议检查以下方面:

    检查Otter节点和管理节点之间的网络连接是否正常。 检查Canal解析binlog时是否正确,可以尝试升级Canal版本或查看Canal日志以获取更多信息。 检查Dubbo连接配置是否正确,包括地址、端口、超时时间等参数。 检查Otter节点和管理节点的日志,查看是否有其他异常信息。 检查Otter节点和管理节点的版本是否兼容,可以尝试升级或降级版本以解决问题。

    2023-06-15 21:08:07
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据报错信息,可以看到同步失败是因为读取binlog事件时发生了错误。具体来说,是读取QueryLogEvent时出现了异常,导致无法继续同步。异常信息显示是限制已被超过,且无法获取Q_FLAGS2_CODE。这意味着Canal在处理Query事件时出现了问题。

    推测问题可能出现在MySQL或者Canal的配置中,建议您从以下方面入手:

    1.检查MySQL配置是否正确:检查日志文件是否存在,权限是否配置正确,MySQL自身的异常是否存在等等。

    2.检查Canal配置是否正确:查看Canal的配置文件,确认与MySQL的连接是否正常,查看Canal的日志文件,确定Canal本身是否出现了异常。

    3.尝试降低Q_FLAGS2_CODE限制:可以尝试增加Q_FLAGS2_CODE的限制,或减少数据包大小来减少Canal的负担。

    如果以上步骤都没有解决问题,建议您提交Canal或者MySQL相关的issue以获得更多的帮助,或者请专业的技术人员来帮助诊断和解决问题。

    2023-06-15 16:49:48
    赞同 展开评论 打赏
  • 这个错误是由于 MySQL 的 Binary Log 格式被设置为 ROW 格式,而 Otter 4.x 版本的 BinaryLogClient 在读取 ROW 格式的 Binary Log 时会出现这个错误。因此,建议您将 MySQL 的 Binary Log 格式更改为 STATEMENT 格式,这样 Otter 就可以正确读取 Binary Log 了。可以使用以下命令更改 MySQL 的 Binary Log 格式:

    mysql> SET binlog_format = STATEMENT;
    

    另外,建议您升级 Otter 版本到 4.2.24 或以上版本,这个版本已经修复了 BinaryLogClient 的这个问题。同时,还需要检查一下 Otter 的配置文件中是否正确设置了 MySQL 的用户名、密码和端口号等信息。

    2023-06-15 08:40:50
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    根据报错信息,可以看出是canal:guangzhou_to_idc这个实例的读取binlog文件时出现了异常,具体是在解析QueryLogEvent时出现了异常,导致了limit excceed: 64的错误。这个错误可能是由于binlog文件中的某个事件格式不正确导致的。建议检查一下binlog文件是否完整,是否有损坏或者格式不正确的事件。如果binlog文件没有问题,可以尝试重新启动canal实例,或者升级canal版本。

    2023-06-14 23:41:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像