diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java index a02c65d2..07728001 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java @@ -216,20 +216,20 @@ public class LogEventConvert extends AbstractCanalLifeCycle implements BinlogPar if (tableMetaCache != null && (result.getType() == EventType.ALTER || result.getType() == EventType.ERASE || result.getType() == EventType.RENAME)) { - for( ;result!=null; result = result.getRenameTableResult()) { - schemaName = event.getDbName(); - if (StringUtils.isNotEmpty(result.getSchemaName())) { - schemaName = result.getSchemaName(); + for(DdlResult renameResult=result ;renameResult!=null; renameResult = renameResult.getRenameTableResult()) { + String schemaName0 = event.getDbName(); //防止 rename语句后产生 schema变更带来影响 + if (StringUtils.isNotEmpty(renameResult.getSchemaName())) { + schemaName0 = renameResult.getSchemaName(); } - tableName = result.getTableName(); + tableName = renameResult.getTableName(); if (StringUtils.isNotEmpty(tableName)) { // 如果解析到了正确的表信息,则根据全名进行清除 - tableMetaCache.clearTableMeta(schemaName, tableName); + tableMetaCache.clearTableMeta(schemaName0, tableName); } else { // 如果无法解析正确的表信息,则根据schema进行清除 - tableMetaCache.clearTableMetaWithSchemaName(schemaName); + tableMetaCache.clearTableMetaWithSchemaName(schemaName0); } } } diff --git a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/SimpleDdlParser.java b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/SimpleDdlParser.java index bbae9f47..a2eee362 100644 --- a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/SimpleDdlParser.java +++ b/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/SimpleDdlParser.java @@ -299,11 +299,10 @@ public class SimpleDdlParser { DdlResult ddlResult = this; StringBuffer sb = new StringBuffer(); do{ - String.format("DdlResult [schemaName=%s , tableName=%s , oriSchemaName=%s , oriTableName=%s , type=%s ;", - ddlResult.schemaName, ddlResult.tableName, ddlResult.oriSchemaName, ddlResult.oriTableName, ddlResult.type); + sb.append(String.format("DdlResult [schemaName=%s , tableName=%s , oriSchemaName=%s , oriTableName=%s , type=%s ];", + ddlResult.schemaName, ddlResult.tableName, ddlResult.oriSchemaName, ddlResult.oriTableName, ddlResult.type)); ddlResult = ddlResult.renameTableResult; - }while (ddlResult.renameTableResult!=null); - sb.append("]"); + }while (ddlResult!=null); return sb.toString(); }