浏览代码

fixed data

agapple 7 年之前
父节点
当前提交
1463463f1e

+ 1 - 0
deployer/src/main/resources/example/rds_instance.properties

@@ -1,4 +1,5 @@
 #################################################
+# rds openapi binlog
 canal.instance.rds.open.url=https://rds.aliyuncs.com/
 canal.instance.rds.open.accesskey=
 canal.instance.rds.open.secretkey=

+ 19 - 3
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java

@@ -285,6 +285,8 @@ public class DatabaseTableMeta implements TableMetaTSDB {
     }
 
     private boolean compareTableMetaDbAndMemory(MysqlConnection connection, final String schema, final String table) {
+        TableMeta tableMetaFromMem = memoryTableMeta.find(schema, table);
+
         TableMeta tableMetaFromDB = new TableMeta();
         tableMetaFromDB.setSchema(schema);
         tableMetaFromDB.setTable(table);
@@ -292,15 +294,29 @@ public class DatabaseTableMeta implements TableMetaTSDB {
             ResultSetPacket packet = connection.query("desc " + getFullName(schema, table));
             tableMetaFromDB.setFields(TableMetaCache.parserTableMeta(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;
+            }
             throw new CanalParseException(e);
         }
 
-        TableMeta tableMetaFromMem = memoryTableMeta.find(schema, table);
         boolean result = compareTableMeta(tableMetaFromMem, tableMetaFromDB);
         if (!result) {
-            logger.error("compare failed . \n db : " + tableMetaFromDB + " \n mem : " + tableMetaFromMem);
-        }
+            String createDDL = null;
+            try {
+                ResultSetPacket packet = connection.query("show create table " + getFullName(schema, table));
+                if (packet.getFieldValues().size() > 1) {
+                    createDDL = packet.getFieldValues().get(1);
+                }
+            } catch (IOException e) {
+                // ignore
+            }
 
+            logger.error("pls submit github issue, show create table ddl:" + createDDL + " , compare failed . \n db : "
+                         + tableMetaFromDB + " \n mem : " + tableMetaFromMem);
+        }
         return result;
     }
 

+ 2 - 5
parse/src/test/java/com/alibaba/otter/canal/parse/inbound/TableMetaCacheTest.java

@@ -14,17 +14,14 @@ public class TableMetaCacheTest {
 
     @Test
     public void testSimple() throws IOException {
-
-        MysqlConnection connection = new MysqlConnection(new InetSocketAddress("100.81.153.8", 3308),
-            "jingwei",
-            "jingwei");
+        MysqlConnection connection = new MysqlConnection(new InetSocketAddress("127.0.0.1", 3306), "root", "hello");
         try {
             connection.connect();
         } catch (IOException e) {
             Assert.fail(e.getMessage());
         }
 
-        List<ResultSetPacket> packets = connection.queryMulti("show create table test.ljh_test; show create table test.user");
+        List<ResultSetPacket> packets = connection.queryMulti("show create table test.ljh_test");
         String createDDL = null;
         if (packets.get(0).getFieldValues().size() > 0) {
             createDDL = packets.get(0).getFieldValues().get(1);