开发者社区> 问答> 正文

V1.1.5,canal使用admin+server异常LogEventConvert - tabl

我正在测试使用canal admin + server 同步我的数据库binlog row信息变更 =>MQ 非常奇怪的现象是 当表结构变更后总是会报错,导致信息不能推送到mQ中

版本:V1.1.5 admin v1.1.5 deploy 我仔细阅读了 https://github.com/alibaba/canal/wiki/TableMetaTSDB 文档

集群中修改为tsdb-mysql canal.instance.tsdb.spring.xml = classpath:spring/tsdb/mysql-tsdb.xml

所以我instance设置了如下信息:

canal.instance.tsdb.enable=true canal.instance.tsdb.url=jdbc:mysql://mysql.qa.enmonster.com:3306/canal_manager canal.instance.tsdb.dbUsername=canal canal.instance.tsdb.dbPassword=canal 观测数据库可以明确的看到已经正常运行了,数据库是有数据的meta_snapshot

【提问55】

测试用例: 简单修改以上配置 已经基本实现修改数据 后数据推送到MQ中。 但是当我执行DDL 增加一个字段, 再修改一行数据的时候,一定会报错

LogEventConvert - table parser error

还有一个点相关的测试用例: 1.如果table01 [id,name] 反复修改数据可以成功推送mq 2.修改字段名称 table01 [id,age] 反复修改数据可以成功推送mq 3.增加字段table01 [id,name,age] 修改数据会出现如下错误日志

2022-04-24 16:04:53.667 [destination = 04240002 , address = /10.208.204.46:33306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000002,position=19169,serverId=1,gtid=6ec86c84-b73b-11ec-9dae-0242ac110006:1-71,timestamp=1650787469000] cost : 4ms , the next step is binlog dump 2022-04-24 16:15:01.222 [MultiStageCoprocessor-Parser-04240002-0] WARN c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - table parser error : header { version: 1 logfileName: "mysql-bin.000002" logfileOffset: 21155 serverId: 1 serverenCode: "UTF-8" executeTime: 1650788100000 sourceType: MYSQL schemaName: "ntw" tableName: "table02" eventLength: 57 eventType: UPDATE props { key: "curtGtid" value: "6ec86c84-b73b-11ec-9dae-0242ac110006:79" } props { key: "curtGtidSn" value: "null" } props { key: "curtGtidLct" value: "null" } props { key: "rowsCount" value: "1" } gtid: "6ec86c84-b73b-11ec-9dae-0242ac110006:1-79" } entryType: ROWDATA storeValue: "" storeValue: tableId: 122 eventType: UPDATE isDdl: false rowDatas { beforeColumns { index: 0 sqlType: 4 updated: false isNull: false value: "1" } beforeColumns { index: 1 sqlType: 12 updated: false isNull: false value: "mtf" } beforeColumns { index: 2 sqlType: 12 updated: false isNull: true } afterColumns { index: 0 sqlType: 4 updated: false isNull: false value: "1" } afterColumns { index: 1 sqlType: 12 updated: false isNull: false value: "mtf" } afterColumns { index: 2 sqlType: 12 updated: true isNull: false value: "11" } }

测试几个小时,貌似必须打开这个参数?canal.instance.filter.query.ddl = false 如果真是这样 ,是否需要 https://github.com/alibaba/canal/wiki/TableMetaTSDB 文档中 提及一下

原提问者GitHub用户542928492

展开
收起
后端老大 2023-04-26 15:38:42 222 0
1 条回答
写回答
取消 提交回答
  • canal.instance.filter.query.ddl必须是false,否则无法触发table meta在tsdb里的刷新,导致binlog和meta数据对不上而出现报错

    原回答者GitHub用户agapple

    2023-04-26 18:30:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载