lealone / Lealone

比 MySQL 和 MongoDB 快10倍的 OLTP 关系数据库和文档数据库
Other
2.44k stars 513 forks source link

clinet-server 重启之后客户端也需要重启才可以连接上 #158

Closed cbqqkcel closed 1 year ago

cbqqkcel commented 1 year ago

启动之后用 DBeaver 和 DataGrip 都可以连接的上。 但是数据库重启后,客户端怎么都连接不上了,也需要重新启动再连接就可以。

image

codefollower commented 1 year ago

DBeaver 点断开重连就可以了,不需要重新启动它,我最近一直都是这么用的。

beijingcn commented 1 year ago

也遇到了这个问题,服务端重启,客户端会死在那里,研究polardb-x去了

codefollower commented 1 year ago

我能重现你们说的问题了,我一般是在 eclipse 中启动 lealone 数据库,然后直接在 eclipse 中杀死进程,这时 lealone 的命令行客户端执行命令会收到 Error: Connection reset,重启动后在 lealone 的命令行客户端输入 rc 就能重连了。DBeaver 也能断开重连。

问题出在用 java -jar lealone-5.0.0.jar 命令启动 lealone 数据库,然后用 Ctrl+C 退出,最后再重启时,lealone 的命令行客户端执行命令就挂在那不动了,DBeaver 也不能断开重连了。

原因可能是客户端的 nio 没有发现网络 io 错误,我排查一下原因。

codefollower commented 1 year ago

问题已经修复,感谢报告问题。

更新一下代码, 执行 mvn package -Dmaven.test.skip=true -P database 只构建最小化的 lealone database 执行 mvn package assembly:assembly -Dmaven.test.skip=true 构建完整的 lealone

codefollower commented 1 year ago

或者直接去这里下载最新 jar 包: https://github.com/lealone/Lealone/releases/tag/lealone-5.0.0-rc-14

直接执行 java -jar lealone-5.0.0.jar 启动数据库, 然后用 DBeaver 访问 lealone 即可, 想敲命令就用 java -jar lealone-5.0.0.jar -client

cbqqkcel commented 1 year ago

还是一样的问题。我用最新源码和你提供的 rc-14 用 DataGrip 和 DBeaver 都是一样的结果。用源码我是在 idea 中测试的。用 java -jar 我是在命令行测试的都是这个错误。我的系统是 linux 。明天我去公司用 mac 测试一下。

image

codefollower commented 1 year ago

我只在 windows 上面测试通过,linux 还没有测。

codefollower commented 1 year ago

我在 WSL 上面跑 Ubuntu,测试是没问题的。 cc

cbqqkcel commented 1 year ago

命令行我也可以的,客户端都不行。Dbeaver 断开/重新连接都不行。也有可能是linux版本的问题。但是DataGrip就不行了。DataGrip 太好用了主要。

codefollower commented 1 year ago

可能是 DBeaver 缓存了 lealone 老版本的驱动,你重新在驱动管理器里先删除再增加试一下。

我在 windows 和 WSL ubuntu 下运行 lealone,然后在 windows 下打开 DBeaver,接着关掉 lealone 再重启,这时在 DBeaver 先断开再连接确定是可以的,我反复试了很多次了。

我这里没有环境在 linux 下运行 DBeaver,按理说都是 java 写的程序,不太可能 windows 跟 linux 会跑出不同的结果。

codefollower commented 1 year ago

DataGrip-2022.2.4 我在 windows 10 上试了,没问题的,甚至比 DBeaver 还智能,关掉 lealone 后,双击表名会出现这个界面,等重启动 lealone 后,在 DataGrip 里什么都不用干,双击表名立刻就能显示表的数据。 DataGrip

以下是我的 DataGrip 配置 DataGrip2

cbqqkcel commented 1 year ago

发现了确实是缓存的问题