开发者社区> 问答> 正文

canal 解析sql 错误

环境信息

canal version 1.1.2 mysql version 5.7

问题描述

2019-01-23 10:45:52.443 [[scheduler-table-meta-snapshot]] WARN c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : CREATE TABLE news ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID标识', title varchar(550) NOT NULL COMMENT '标题', PRIMARY KEY (id), KEY title_index (title) USING BTREE, FULLTEXT KEY ft_news_title (title) /*!50100 WITH PARSER ngram */ ) ENGINE=InnoDB AUTO_INCREMENT=1042277 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='' com.alibaba.fastsql.sql.parser.ParserException: illegal name, pos 2525, line 5, column 43, token HINT at com.alibaba.fastsql.sql.parser.SQLExprParser.name(SQLExprParser.java:1538) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlExprParser.parseColumn(MySqlExprParser.java:495) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlCreateTableParser.parseCreateTable(MySqlCreateTableParser.java:361) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:253) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:223) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.fastsql.sql.SQLUtils.parseStatements(SQLUtils.java:498) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.fastsql.sql.repository.SchemaRepository.console(SchemaRepository.java:413) ~[fastsql-2.0.0_preview_540.jar:2.0.0_preview_540] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:73) ~[canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.TableMetaCache.parseTableMeta(TableMetaCache.java:101) [canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.compareTableMetaDbAndMemory(DatabaseTableMeta.java:311) [canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.applySnapshotToDB(DatabaseTableMeta.java:253) [canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.access$100(DatabaseTableMeta.java:45) [canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta$2.run(DatabaseTableMeta.java:86) [canal.parse-1.1.1-SNAPSHOT.jar:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_191] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191] 2019-01-23 10:45:52.444 [[scheduler-table-meta-snapshot]] ERROR c.a.o.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta - scheudle applySnapshotToDB faield java.lang.NullPointerException: null at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.TableMetaCache.parseTableMeta(TableMetaCache.java:103) ~[canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.compareTableMetaDbAndMemory(DatabaseTableMeta.java:311) ~[canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.applySnapshotToDB(DatabaseTableMeta.java:253) ~[canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.access$100(DatabaseTableMeta.java:45) ~[canal.parse-1.1.1-SNAPSHOT.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta$2.run(DatabaseTableMeta.java:86) ~[canal.parse-1.1.1-SNAPSHOT.jar:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_191] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_191] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191]

原提问者GitHub用户hzsbrave

展开
收起
古拉古拉 2023-05-08 14:56:53 193 0
2 条回答
写回答
取消 提交回答
  • 使用最新版本的canal还是无法解决改问题,发现fastsql-2.0.0_preview_644.jar包无法解析FULLTEXT KEY ft_news_title (title) /*!50100 WITH PARSER ngram /后面的 : /!50100 WITH PARSER ngram */ 中的!50100 WITH PARSER `ngram为非法token,进行反编译fastsql-2.0.0_preview_644.jar修改MySqlCreateTableParser.java文件,再编译成class文件,替换fastsql-2.0.0_preview_644.jar的MySqlCreateTableParser.class文件,解决问题```

    原回答者GitHub用户hzsbrave

    2023-05-09 18:01:45
    赞同 展开评论 打赏
  • 从出错的 SQL 语句可以看出,该语句创建了一个名为 news 的表,该表包含 id、title 和 PRIMARY KEY 三个字段,其中 id 字段为自增长的主键。

    根据 canal 版本和 MySQL 版本,可以确定该错误可能是由于以下原因导致的:

    版本冲突:canal 版本和 MySQL 版本可能存在兼容性问题,导致在执行某些操作时出现错误。 语法错误:该语句可能存在语法错误,例如 CREATE TABLE 语句中的某些关键字或分号位置不正确。 为了解决该问题,可以尝试以下方法:

    升级 canal 版本和 MySQL 版本,确保兼容性问题得以解决。 检查语法错误,确保 CREATE TABLE 语句中的关键字和分号位置正确。 在执行 SQL 语句时,可以使用 MySQL 的内置工具来检查语法错误,例如 mysqlcheck 或 sqlcheck。 此外,还可以尝试在执行 SQL 语句时使用 canal 的日志功能来捕获错误信息,并根据错误信息来进行排查和修复。

    2023-05-08 15:23:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

相关镜像