当前位置: 代码迷 >> 综合 >> Canal读取MySQL数据报错
  详细解决方案

Canal读取MySQL数据报错

热度:28   发布时间:2023-09-14 14:37:13.0

Canal同步MySQL报错:
com.alibaba.otter.canal.meta.exception.CanalMetaManagerException: batchId:41 is not the firstly:40

完整报错信息如下:

================> binlog[mysql-bin.002248:97530781] , name[mtmydb,mtmy_appt_order] , eventType : INSERT,currentTime:2019-01-08 18:25:06
INSERT ::2019-01-08 18:25:06
================> binlog[mysql-bin.002248:97544386] , name[mtmydb,mtmy_appt_order] , eventType : UPDATE,currentTime:2019-01-08 18:25:07
================> binlog[mysql-bin.002248:97546643] , name[mtmydb,mtmy_appt_order] , eventType : INSERT,currentTime:2019-01-08 18:25:07
INSERT ::2019-01-08 18:25:07
Exception in thread "main" java.lang.reflect.InvocationTargetExceptionat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: com.alibaba.otter.canal.protocol.exception.CanalClientException: something goes wrong with reason: something goes wrong with channel:[id: 0x020f6ddb, /10.12.0.10:64692 => /10.12.0.10:11111], exception=com.alibaba.otter.canal.meta.exception.CanalMetaManagerException: batchId:41 is not the firstly:40at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.receiveMessages(SimpleCanalConnector.java:317)at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.getWithoutAck(SimpleCanalConnector.java:294)at com.alibaba.otter.canal.client.impl.SimpleCanalConnector.getWithoutAck(SimpleCanalConnector.java:269)at com.sync.common.ParseCanalUtil.main(ParseCanalUtil.java:40)... 5 more

这是因为Canal读取MySQL的时候会记录读取的位置,保存在meta.dat文件中,canal程序长时间停止后又重启,最后一次记录的位置已经在MySQL的bin-log日志中丢失,导致读取不到数据。
解决办法:
删掉meta.dat文件,让canal从最新位置读即可

  相关解决方案