diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java index 585f1de9..12cc46f6 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java @@ -298,13 +298,24 @@ public class DatabaseTableMeta implements TableMetaTSDB { createDDL = packet.getFieldValues().get(1); tableMetaFromDB.setFields(TableMetaCache.parseTableMeta(schema, table, packet)); } - } catch (IOException e) { - if (e.getMessage().contains("errorNumber=1146")) { - logger.error("table not exist in db , pls check :" + getFullName(schema, table) + " , mem : " - + tableMetaFromMem); - return false; + } catch (Throwable e) { + try { + // retry for broke pipe, see: + // https://github.com/alibaba/canal/issues/724 + connection.reconnect(); + ResultSetPacket packet = connection.query("show create table " + getFullName(schema, table)); + if (packet.getFieldValues().size() > 1) { + createDDL = packet.getFieldValues().get(1); + tableMetaFromDB.setFields(TableMetaCache.parseTableMeta(schema, table, packet)); + } + } catch (IOException e1) { + if (e.getMessage().contains("errorNumber=1146")) { + logger.error("table not exist in db , pls check :" + getFullName(schema, table) + " , mem : " + + tableMetaFromMem); + return false; + } + throw new CanalParseException(e); } - throw new CanalParseException(e); } boolean result = compareTableMeta(tableMetaFromMem, tableMetaFromDB);