dothetrick / binlogportal

mysql binlog同步工具
129 stars 57 forks source link

对象反序列化时候,抛出EOFException #9

Open lipeishen opened 2 years ago

lipeishen commented 2 years ago

项目启动一段时间之后,idea 控制台就会报如下错误: Failed to deserialize data of EventHeaderV4{timestamp=1650557316000, eventType=EXT_WRITE_ROWS, serverId=2, headerLength=19, dataLength=301, nextPosition=53044880, flags=0}.mysql-bin.000001/53044478 com.github.shyiko.mysql.binlog.event.deserialization.EventDataDeserializationException:### Failed to deserialize data of EventHeaderV4{timestamp=1650557316000, eventType=EXT_WRITE_ROWS, serverId=2, headerLength=19, dataLength=301, nextPosition=53044880, flags=0} at com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.deserializeEventData(EventDeserializer.java:300) at com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.nextEvent(EventDeserializer.java:223) at com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:984) at com.github.shyiko.mysql.binlog.BinaryLogClient.connectWithTimeout(BinaryLogClient.java:517) at com.github.shyiko.mysql.binlog.BinaryLogClient.access$1100(BinaryLogClient.java:90) at com.github.shyiko.mysql.binlog.BinaryLogClient$7.run(BinaryLogClient.java:881) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.EOFException: null at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:190) at java.io.InputStream.read(InputStream.java:170) at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.fill(ByteArrayInputStream.java:96) at com.github.shyiko.mysql.binlog.io.ByteArrayInputStream.read(ByteArrayInputStream.java:89) at com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeVarString(AbstractRowsEventDataDeserializer.java:376) at com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeCell(AbstractRowsEventDataDeserializer.java:184) at com.github.shyiko.mysql.binlog.event.deserialization.AbstractRowsEventDataDeserializer.deserializeRow(AbstractRowsEventDataDeserializer.java:138) at com.github.shyiko.mysql.binlog.event.deserialization.WriteRowsEventDataDeserializer.deserializeRows(WriteRowsEventDataDeserializer.java:64) at com.github.shyiko.mysql.binlog.event.deserialization.WriteRowsEventDataDeserializer.deserialize(WriteRowsEventDataDeserializer.java:56) at com.github.shyiko.mysql.binlog.event.deserialization.WriteRowsEventDataDeserializer.deserialize(WriteRowsEventDataDeserializer.java:32) at com.github.shyiko.mysql.binlog.event.deserialization.EventDeserializer.deserializeEventData(EventDeserializer.java:294) ... 6 common frames omitted

查了一些资料,感觉应该在 image 捕捉 IOEception 前面增加对 EOFException 处理逻辑。 catch (EOFException e) { System.out.println(""); System.out.println("End of file reached"); break; } catch (IOException e) {}