alibaba / canal

阿里巴巴 MySQL binlog 增量订阅&消费组件
Apache License 2.0
28.44k stars 7.6k forks source link

运行时生成建表语句报错解析,里面有MySQL关键字 #4933

Open Sheldon-NULL opened 11 months ago

Sheldon-NULL commented 11 months ago

environment centos8

Issue Description

解析生成的建表语句报错,排查发现,表中有字段名字是index,生成的建表语句没有把index用`包起来。

Steps to reproduce

Expected behaviour

Actual behaviour

希望得到的解决方案:把这个BUG修复。时间优先的话,有没有配置可以把这个表的解析跳过,业务用不上它。

If there is an exception, please attach the exception trace:

Just put your stack trace here!

com.alibaba.druid.sql.parser.ParserException: illegal name, pos 5131, line 84, column 25, token NULL at com.alibaba.druid.sql.parser.SQLExprParser.name(SQLExprParser.java:2370) at com.alibaba.druid.sql.parser.SQLExprParser.parseIndex(SQLExprParser.java:5461) at com.alibaba.druid.sql.dialect.mysql.parser.MySqlCreateTableParser.parseCreateTable(MySqlCreateTableParser.java:379) at com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:296) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:245) at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:599) at com.alibaba.druid.sql.repository.SchemaRepository.console(SchemaRepository.java:468) at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:85) at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.buildMemFromSnapshot(DatabaseTableMeta.java:423) at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:166) at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:145) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$1.run(AbstractEventParser.java:192) at java.lang.Thread.run(Thread.java:748) 2023-11-03 17:55:04.888 [destination = example , address = /127.0.0.1:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000001,position=270377752,s

agapple commented 11 months ago

完整的建表语句发一下

Sheldon-NULL commented 11 months ago

test.txt

GitChenfan commented 11 months ago

同样的问题,提示关键字是 CONDITION

bennylu006 commented 11 months ago

现在有什么办法可以临时解决下吗

Toy-IHere commented 10 months ago

我也遇到了这个问题

bennylu006 commented 10 months ago

直接把position位点改为最新的 可以临时解决下

Sheldon-NULL commented 10 months ago

直接把position位点改为最新的 可以临时解决下

估计是不太行,我发现这个问题的时候,就是改到一个比较新的position。中间只差几分钟的启动时间。