开发者社区> 问答> 正文

双向同步,一段时间没有数据同步,channel挂起,mainsteam和pipeline状态正常,p

双向同步,一段时间没有数据同步,channel挂起,mainsteam和pipeline状态正常,position状态没有更新

pid:2 nid:2 exception:setl:com.alibaba.otter.node.etl.select.exceptions.SelectException: com.alibaba.otter.node.etl.select.exceptions.SelectException: this rowdata has no pks , entry: header { version: 1 logfileName: "mysql-bin.000180" logfileOffset: 36354060 serverId: 2 serverenCode: "UTF-8" executeTime: 1554235662000 sourceType: MYSQL schemaName: "mysql" tableName: "yongger2" eventLength: 40 eventType: INSERT props { key: "rowsCount" value: "1" } } entryType: ROWDATA storeValue: "\b\356\002\020\001P\000b\037\022\035\b\000\020\324\017\032\004data \000(\0010\000B\000R\bLONGBLOB" and rowData: afterColumns { index: 0 sqlType: 2004 name: "data" isKey: false updated: true isNull: false value: "" mysqlType: "LONGBLOB" }

at com.alibaba.otter.node.etl.select.selector.MessageParser.parse(MessageParser.java:212) at com.alibaba.otter.node.etl.select.selector.canal.CanalEmbedSelector.selector(CanalEmbedSelector.java:278) at com.alibaba.otter.node.etl.select.SelectTask.processSelect(SelectTask.java:236) at com.alibaba.otter.node.etl.select.SelectTask.access$300(SelectTask.java:94) at com.alibaba.otter.node.etl.select.SelectTask$1.run(SelectTask.java:208) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Caused by: com.alibaba.otter.node.etl.select.exceptions.SelectException: this rowdata has no pks , entry: header { version: 1 logfileName: "mysql-bin.000180" logfileOffset: 36354060 serverId: 2 serverenCode: "UTF-8" executeTime: 1554235662000 sourceType: MYSQL schemaName: "mysql" tableName: "yongger2" eventLength: 40 eventType: INSERT props { key: "rowsCount" value: "1" } } entryType: ROWDATA storeValue: "\b\356\002\020\001P\000b\037\022\035\b\000\020\324\017\032\004data \000(\0010\000B\000R\bLONGBLOB" and rowData: afterColumns { index: 0 sqlType: 2004 name: "data" isKey: false updated: true isNull: false value: "" mysqlType: "LONGBLOB" }

at com.alibaba.otter.node.etl.select.selector.MessageParser.internParse(MessageParser.java:585) at com.alibaba.otter.node.etl.select.selector.MessageParser.internParse(MessageParser.java:391) at com.alibaba.otter.node.etl.select.selector.MessageParser.parse(MessageParser.java:142) ... 9 more

原提问者GitHub用户 stickmanth

展开
收起
古拉古拉 2023-06-14 21:42:56 65 0
2 条回答
写回答
取消 提交回答
  • 根据您提供的信息,这个错误是由于CanalEmbedSelector在解析一条数据时发现该数据没有主键,无法进行同步,导致SelectTask挂起。这可能是由于源端数据库中的数据表没有设置主键,或者主键定义不规范导致的。

    您可以尝试以下几个解决方法:

    1. 在源端数据库中为数据表设置主键,确保每个表都有主键定义,并且主键定义规范。

    2. 如果源端数据表的主键定义不规范,可以尝试修改主键定义,使其符合规范。例如,将主键定义为整型或字符串类型,并且不允许为空。

    3. 如果源端数据库中的数据表没有主键,可以尝试使用Canal的动态列支持功能,动态生成一个唯一索引,作为数据同步的主键。

    4. 检查Canal的版本是否支持该数据库类型和版本,如果不支持,可以尝试升级Canal版本或使用其他的同步工具。

    如果您尝试了以上解决方法仍然无法解决问题,建议检查Canal、Otter和源端数据库的日志,查看是否有其他错误信息。同时,您也可以提供更多的细节,以便更好地帮助您解决问题。

    2023-06-15 10:13:03
    赞同 展开评论 打赏
  • 表没有加主键

    原回答者GitHub用户agapple

    2023-06-14 22:25:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载