环境信息
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
canal.id = 1 canal.ip = 192.168.31.139 canal.port = 11111
conf/example/instance.properties 修改了position info 和 username/password 信息
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
java.lang.IllegalStateException: The file is locked: nio:/usr/local/canal/conf/example/h2.mv.db
是否有多进程启动或者上次异常crash,h2文件没有清理正常
原回答者GitHub用户agapple
针对这个问题,您可以尝试以下解决方法:
确认 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 的问题。
评论
全部评论 (0)
你好,我是AI助理
可以解答问题、推荐解决方案等
评论
全部评论 (0)