开发者社区> 问答> 正文

canal-adapter运行几分钟后开始出现报错

环境信息

canal version 1.1.2 mysql version 5.6.37

问题描述

canal-adapter刚启动后可正常提供服务,但过了几分钟后就自己出现报错,报错信息如下: 2019-01-03 19:50:48.612 ERROR 22225 --- [pool-9-thread-1] c.a.o.canal.client.adapter.support.Util : connection holder is null

java.sql.SQLException: connection holder is null at com.alibaba.druid.pool.DruidPooledConnection.checkStateInternal(DruidPooledConnection.java:1155) ~[druid-1.1.9.jar:1.1.9] at com.alibaba.druid.pool.DruidPooledConnection.checkState(DruidPooledConnection.java:1148) ~[druid-1.1.9.jar:1.1.9] at com.alibaba.druid.pool.DruidPooledConnection.createStatement(DruidPooledConnection.java:636) ~[druid-1.1.9.jar:1.1.9] at com.alibaba.otter.canal.client.adapter.support.Util.sqlRS(Util.java:71) ~[client-adapter.common-1.1.3-SNAPSHOT.jar:na] at com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService.getTargetColumnType(RdbSyncService.java:376) [client-adapter.rdb-1.1.3-SNAPSHOT-jar-with-dependencies.jar:na] at com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService.update(RdbSyncService.java:287) [client-adapter.rdb-1.1.3-SNAPSHOT-jar-with-dependencies.jar:na] at com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService.sync(RdbSyncService.java:195) [client-adapter.rdb-1.1.3-SNAPSHOT-jar-with-dependencies.jar:na] at com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService.lambda$null$0(RdbSyncService.java:106) [client-adapter.rdb-1.1.3-SNAPSHOT-jar-with-dependencies.jar:na] at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_172] at com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService.lambda$sync$1(RdbSyncService.java:106) [client-adapter.rdb-1.1.3-SNAPSHOT-jar-with-dependencies.jar:na] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_172] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_172] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_172] Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during commit(). Transaction resolution unknown. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_172] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_172] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_172] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_172] at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1618) ~[mysql-connector-java-5.1.40.jar:5.1.40] at com.alibaba.druid.pool.DruidPooledConnection.commit(DruidPooledConnection.java:749) ~[druid-1.1.9.jar:1.1.9] at com.alibaba.otter.canal.client.adapter.rdb.support.BatchExecutor.commit(BatchExecutor.java:71) ~[na:na] at com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService.lambda$sync$1(RdbSyncService.java:107) [client-adapter.rdb-1.1.3-SNAPSHOT-jar-with-dependencies.jar:na] ... 4 common frames omitted

期待结果

查了资料,好像是和Druid的初始化有关

原提问者GitHub用户iamyeka

展开
收起
古拉古拉 2023-05-08 15:24:03 159 0
3 条回答
写回答
取消 提交回答
  • 可以尝试一下1.1.3 alpha-3版本,adapter的问题有修复

    原回答者GitHub用户agapple

    2023-05-09 18:14:40
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    可能是因为连接池中的连接长时间未使用,被MySQL数据库关闭了,导致连接池中的连接失效。可以适当调大连接超时时间或者增加连接池大小,避免连接失效。此外,也可以考虑使用连接池的自动回收机制,定期检查连接池中的连接是否有效,及时关闭失效的连接,避免出现连接失效的情况。关于Druid连接池初始化的问题,可以检查配置文件中的相关参数是否正确,或者增加Druid连接池的初始化日志输出,查看是否有异常信息。

    2023-05-08 15:51:57
    赞同 展开评论 打赏
  • 这个报错信息显示出现了 java.sql.SQLException: connection holder is null 异常,这通常是因为线程持有的数据库连接已经失效,但程序仍然在尝试使用这个连接从而导致异常。根据错误信息,可能是由于连接池的配置不正确导致的,建议检查配置文件,确认连接池的配置是否正确。同时,你也可以尝试升级 druid 的版本,也许可以解决这个问题。

    2023-05-08 15:50:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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