开发者社区> 问答> 正文

设置canal服务器端报错:[main] ERROR com.alibaba.druid.pool.

环境信息

canal version canal.deployer-1.1.2 mysql version 5.7.22-log MySQL Community Server (GPL)

问题描述

启动canal服务器时候报错:信息如下

h resource [example/instance.properties] 2019-01-30 11:31:48.769 [main] ERROR com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set 2019-01-30 11:31:48.884 [Druid-ConnectionPool-Create-1363560175] ERROR com.alibaba.druid.pool.DruidDataSource - create connection SQLException, url: jdbc:h2:../conf/example/h2;CACHE_SIZE=1000;MODE=MYSQL;, errorCode 90020, state 90020 org.h2.jdbc.JdbcSQLException: Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-196] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[h2-1.4.196.jar:1.4.196] at org.h2.message.DbException.get(DbException.java:168) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.db.MVTableEngine$Store.convertIllegalStateException(MVTableEngine.java:188) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:168) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:100) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Database.getPageStore(Database.java:2476) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Database.open(Database.java:697) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Database.openDatabase(Database.java:276) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Database.(Database.java:270) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Engine.openSession(Engine.java:64) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Engine.openSession(Engine.java:176) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Engine.createSessionAndValidate(Engine.java:154) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Engine.createSession(Engine.java:137) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.Engine.createSession(Engine.java:27) ~[h2-1.4.196.jar:1.4.196] at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:354) ~[h2-1.4.196.jar:1.4.196] at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:116) ~[h2-1.4.196.jar:1.4.196] at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:100) ~[h2-1.4.196.jar:1.4.196] at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.196.jar:1.4.196] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1513) ~[druid-1.1.9.jar:1.1.9] at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1578) ~[druid-1.1.9.jar:1.1.9] at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2466) ~[druid-1.1.9.jar:1.1.9] Caused by: java.lang.IllegalStateException: The file is locked: nio:/usr/local/canal/conf/example/h2.mv.db [1.4.196/7] at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:765) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.FileStore.open(FileStore.java:173) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.MVStore.(MVStore.java:347) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2930) ~[h2-1.4.196.jar:1.4.196] at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:155) ~[h2-1.4.196.jar:1.4.196] ... 17 common frames omitted

步骤重现

mysql: mysql binlog 已经开启,format格式也为row

canal: conf/canal.properties 仅仅修改了canal.ip

head conf/canal.properties

canal.id = 1 canal.ip = 192.168.31.139 canal.port = 11111

conf/example/instance.properties 修改了position info 和 username/password 信息

cat conf/example/instance.properties | grep -v "^#"

canal.instance.mysql.slaveId=234

canal.instance.gtidon=false

canal.instance.master.address=127.0.0.1:3306 canal.instance.master.journal.name=log-bin.000001 canal.instance.master.position=2465 canal.instance.master.timestamp= canal.instance.master.gtid=

canal.instance.rds.accesskey= canal.instance.rds.secretkey= canal.instance.rds.instanceId=

canal.instance.tsdb.enable=true

canal.instance.dbUsername=canal canal.instance.dbPassword=canal canal.instance.connectionCharset = UTF-8 canal.instance.defaultDatabaseName =test_canal canal.instance.enableDruid=false

canal.instance.filter.regex=.\.. canal.instance.filter.black.regex=

canal.mq.topic=example canal.mq.partition=0

原提问者GitHub用户pdudo

展开
收起
古拉古拉 2023-05-08 14:48:07 490 0
2 条回答
写回答
取消 提交回答
  • java.lang.IllegalStateException: The file is locked: nio:/usr/local/canal/conf/example/h2.mv.db

    是否有多进程启动或者上次异常crash,h2文件没有清理正常

    原回答者GitHub用户agapple

    2023-05-09 18:00:16
    赞同 展开评论 打赏
  • 针对这个问题,您可以尝试以下解决方法:

    确认 instance.properties 文件是否存在并且配置正确。instance.properties 是 Canal Server 的配置文件,其中包含了与数据库连接相关的配置信息。请确认文件路径是否正确,并检查数据库连接信息是否正确。

    检查数据库连接是否正常。Canal Server 会使用 Druid 连接池来管理连接,错误信息中提到了 testWhileIdle is true, validationQuery not set,这意味着在连接闲置时 Druid 会测试连接是否超时,但是没有设置验证查询语句(validationQuery)。这个问题可能导致连接池无法正确地管理连接。建议您在 instance.properties 中配置正确的 validationQuery。

    如果以上两种方法都无法解决问题,您可以尝试升级 Canal Server 的版本或切换数据库。在一些情况下,Canal Server 的版本过低或者使用的数据库版本不兼容会导致连接异常。同时,如果您使用的是 H2 数据库,可能需要使用 server 模式启动 H2 数据库,以解决 Database may be already in use 的问题。

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

相关电子书

更多
如何运维千台以上游戏云服务器 立即下载
网站/服务器取证 实践与挑战 立即下载
ECS快储存加密技术 立即下载