Skip to content

canal解析增加分区语句失败 #3900

@lilibin-0618

Description

@lilibin-0618

environment

  • canal version 1.1.5
  • mysql version Percona-Server-5.7.28, ENGINE = TokuDB

Issue Description

mysql执行增加分区的操作,一次性增加多个分区导致canal解析sql语句错误,但是逐条创建分区是正常的。

Steps to reproduce

查询了报错,应该是druid的问题

Expected behaviour

期望官方修复druid问题并引用进canal。

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

Just put your stack trace here!
![242cefc87aea4cfc1b817f839f0b8dd6-80079](https://user-images.githubusercontent.com/85610880/139838129-51b350a7-16a9-45ae-aac1-276df50b79f0.png)

下面是canal的报错:
2021-11-02 19:30:43.759 [destination = online_mysql_XXXXX_progress , address = /172.16.2.109:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position
2021-11-02 19:30:43.765 [destination = online_mysql_XXXXX_progress , address = /172.16.2.109:3306 , EventParser] WARN  c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : alter table daily_progress add partition ( partition p20220201 VALUES LESS THAN (738552) ENGINE = TokuDB, PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = TokuDB)
com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'ENGINE = TokuDB, PARTITION pmax VALUES ', expect ), actual ,, pos 105, line 1, column 105, token ,
	at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:576) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.parser.SQLParser.accept(SQLParser.java:584) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseAlterSpecification(MySqlStatementParser.java:6110) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseAlterTable(MySqlStatementParser.java:6810) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseAlter(MySqlStatementParser.java:5166) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:304) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:565) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.SQLUtils.parseStatements(SQLUtils.java:587) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.druid.sql.repository.SchemaRepository.console(SchemaRepository.java:445) ~[druid-1.2.6.jar:1.2.6]
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:84) ~[canal.parse-1.1.5.jar:na]
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.applyHistoryOnMemory(DatabaseTableMeta.java:454) [canal.parse-1.1.5.jar:na]
	at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:167) [canal.parse-1.1.5.jar:na]
	at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:142) [canal.parse-1.1.5.jar:na]
	at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$1.run(AbstractEventParser.java:197) [canal.parse-1.1.5.jar:na]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]
2021-11-02 19:30:43.765 [destination = online_mysql_XXXXX_progress , address = /172.16.2.109:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.002668,position=713513730,serverId=1182953,gtid=3aby17t7a-11ef-11eb-885d-e4434ba4a6a8:1,5695430b-6a7d-11ea-9h52-e4434bb61830:1-10609618787,3a720ff1-74ee-11eb-92bb-246e96247198:1-2,f5d64471-6e5f-11e6-a298-246e96247198:1-1670230942,4b9e5eb0-6e61-11e6-a2a0-246e9624736c:1-125,timestamp=1635760819000] cost : 6ms , the next step is binlog dump


Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions