docker pull canal/canal-server:v1.1.1 安装的 出现下面的错误,怎么办?
2019-11-04 15:56:44.935 [destination = example , address = /192.168.133.62:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just show master status 2019-11-04 15:57:37.958 [destination = example , address = /192.168.133.62:3306 , EventParser] WARN c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : CREATE TABLE loan ( id varchar(31) COLLATE utf8mb4_bin NOT NULL, user_id varchar(31) COLLATE utf8mb4_bin NOT NULL, application_id varchar(31) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '敶redit_application_id', type varchar(30) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'applicationId唾銵剁FIRST=credit_application, REPEAT=loan_request', product_id bigint(11) DEFAULT NULL, status varchar(31) COLLATE utf8mb4_bin NOT NULL DEFAULT 'INITIAL', product_type varchar(20) COLLATE utf8mb4_bin NOT NULL, amount decimal(10,2) NOT NULL COMMENT 'Disbursed amount', tenor int(11) NOT NULL, tenor_unit varchar(15) COLLATE utf8mb4_bin NOT NULL, installment_count int(11) NOT NULL, current_installment int(11) NOT NULL DEFAULT '1', payment_info json DEFAULT NULL COMMENT 'JSON: paymentAgent(enum), bankName(str), accountNumber(str)', repayment_info json DEFAULT NULL COMMENT 'JSON: expectedRepaymentAmount(decimal), actualRepaymentAmount(decimal)', interest_info json DEFAULT NULL COMMENT 'JSON: interestRate(decimal), preServiceFeeRate(decimal), overdueManageFeeRate(decimal), collectionFeeRate(decimal), overdueServiceFeeRate(decimal)', extra json DEFAULT NULL COMMENT 'JSON: all other strange/useless fields', issue_time timestamp(3) NULL DEFAULT NULL, disburse_time timestamp(3) NULL DEFAULT NULL, repay_time timestamp(3) NULL DEFAULT NULL, create_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), version int(11) NOT NULL DEFAULT '0' COMMENT '撟嗅嗥砍, payment_transaction_id varchar(200) COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unquote(json_extract(payment_info,'$.paymentTransactionId'))) STORED COMMENT 'GENERATED', initial_repayment_amount decimal(20,2) GENERATED ALWAYS AS (json_unquote(json_extract(repayment_info,'$.initialRepaymentAmount'))) STORED COMMENT 'GENERATED', expected_repayment_amount decimal(20,2) GENERATED ALWAYS AS (json_unquote(json_extract(repayment_info,'$.expectedRepaymentAmount'))) STORED COMMENT 'GENERATED', actual_repayment_amount decimal(20,2) GENERATED ALWAYS AS (json_unquote(json_extract(repayment_info,'$.actualRepaymentAmount'))) STORED COMMENT 'GENERATED', actual_disburse_amount decimal(20,0) DEFAULT NULL, package_name varchar(100) COLLATE utf8mb4_bin DEFAULT NULL, source varchar(15) COLLATE utf8mb4_bin NOT NULL DEFAULT 'ANDROID' COMMENT 'source', channel varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'channel', campaign varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '瘣餃撟踹', acquisition_code varchar(10) COLLATE utf8mb4_bin DEFAULT NULL, PRIMARY KEY (id), KEY idx_user_id (user_id), KEY idx_application_id (application_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
com.alibaba.fastsql.sql.parser.ParserException: syntax error, error in :'COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unqu', expect ), actual null, pos 1703, line 24, column 62, token IDENTIFIER GENERATED at com.alibaba.fastsql.sql.parser.SQLParser.printError(SQLParser.java:363) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.parser.SQLParser.accept(SQLParser.java:371) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlCreateTableParser.parseCreateTable(MySqlCreateTableParser.java:418) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:265) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:224) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.SQLUtils.parseStatements(SQLUtils.java:525) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.repository.SchemaRepository.console(SchemaRepository.java:439) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:73) ~[canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.dumpTableMeta(DatabaseTableMeta.java:193) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.rollback(DatabaseTableMeta.java:143) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.processTableMeta(AbstractMysqlEventParser.java:87) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:190) [canal.parse-1.1.1.jar:na] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
2019-11-04 15:57:38.104 [destination = example , address = /192.168.133.62:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - find start position : EntryPosition[included=false,journalName=bin.000002,position=13949238,serverId=1,gtid=,timestamp=1572603926000] 2019-11-04 15:57:38.136 [MultiStageCoprocessor-other-example-0] WARN c.a.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta - parse faield : CREATE USER 'canal'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*E3619321C1A937C46A0D8BD1DAC39F93B27D4458' com.alibaba.fastsql.sql.parser.ParserException: syntax error, error in :'ord' AS '*E3619321C1A937C46A0D8BD1D, pos 66, line 1, column 64, token AS com.alibaba.fastsql.sql.parser.ParserException: syntax error, error in :'ord' AS '*E3619321C1A937C46A0D8BD1D, pos 66, line 1, column 64, token AS at com.alibaba.fastsql.sql.parser.SQLParser.printError(SQLParser.java:363) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:534) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.SQLUtils.parseStatements(SQLUtils.java:525) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.fastsql.sql.repository.SchemaRepository.console(SchemaRepository.java:439) ~[fastsql-2.0.0_preview_644.jar:2.0.0_preview_644] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.MemoryTableMeta.apply(MemoryTableMeta.java:73) ~[canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DatabaseTableMeta.apply(DatabaseTableMeta.java:120) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.TableMetaCache.apply(TableMetaCache.java:228) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parseQueryEvent(LogEventConvert.java:266) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:114) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.MysqlMultiStageCoprocessor$SimpleParserStage.onEvent(MysqlMultiStageCoprocessor.java:282) [canal.parse-1.1.1.jar:na] at com.alibaba.otter.canal.parse.inbound.mysql.MysqlMultiStageCoprocessor$SimpleParserStage.onEvent(MysqlMultiStageCoprocessor.java:237) [canal.parse-1.1.1.jar:na] at com.lmax.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:168) [disruptor-3.4.2.jar:na] at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:125) [disruptor-3.4.2.jar:na] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_181] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_181] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
原提问者GitHub用户esolve
这个错误是由于 Canal 无法解析 MySQL 表的创建语句,导致报错。具体地,错误信息中指出了解析错误的位置和原因:
com.alibaba.fastsql.sql.parser.ParserException: syntax error, error in :'COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unqu', expect ), actual null, pos 1703, line 24, column 62, token IDENTIFIER GENERATED
可以看到,错误出现在第 24 行的一个 GENERATED 关键字上,这可能是由于 Canal 所使用的 SQL 解析库无法解析该语法导致的。您可以尝试升级 Canal 版本,或者修改表的创建语句来避免该问题。
另外,Canal 也提供了忽略解析错误的选项,您可以在 Canal 配置文件中添加以下行来开启该选项:
canal.instance.tsdb.ignoreParseError=true
开启该选项后,Canal 在解析表结构时遇到错误时将忽略该错误,但这可能会导致 Canal 在解析表结构时丢失一些信息。
1、CREATE USER可以忽略
2、canal可以升级到1.1.4,对DDL解析做了比较大的兼容性支持
原回答者GitHub用户agapple
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。