Mysql 从 5.6 换成了 8.0.25, jdbc 连接失败了。

2021-07-09 13:07:24 +08:00
 mohulai
写的一个 SSM 的小项目,抽风想升级一下 Mysql 。
结果报错。

ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error, url: jdbc:mysql://localhost:3306/cloudplatform?useUnicode=true&characterEncoding=utf8
java.sql.SQLException: Unknown system variable 'tx_isolation'。

搜了各种论坛都说是 jdbc 驱动版本低,mysql-connector-java 更新到 8.0 就可以,从 CSDN 到 StackOverflow 全是这个说法,可我更新后还是报错。

换回 5.6 一点问题没有,可我犯病了就是不想换,折腾一天了
2815 次点击
所在节点    问与答
25 条回复
AllenHua
2021-07-09 13:23:21 +08:00
顶一下帖。我昨天也是装了 8.0,然后用我常用的 navicat 连接,无法连接

MySQL Error: Client does not support authentication protocol requested by server

从 csdn 到 stackoverflow 和各种英文网页,尝试了都没能解决。我知道是 mysql8.0 更改了认证方式,但是按照网上的说法,没一个靠谱的……
AllenHua
2021-07-09 13:23:59 +08:00
用 datagrip 就正常连接,后面装了 5.7,使用 navicat 连接就正常了……
AllenHua
2021-07-09 13:24:36 +08:00
@AllenHua #2 mysql8.0 用 datagrip 连接正常。
AlexPUBLIC
2021-07-09 13:27:18 +08:00
8.0 的验证方法变了,IDENTIFIED WITH mysql_native_password 就行
shiny
2021-07-09 13:27:28 +08:00
偷懒方法就是初始化数据库的时候使用原来的验证方式
[mysqld]
default_authentication_plugin=mysql_native_password
AlkTTT
2021-07-09 13:38:06 +08:00
@AllenHua navicat 版本低了,升个新版就可以了
AlkTTT
2021-07-09 13:39:07 +08:00
driver-class-name: com.mysql.cj.jdbc.Driver,这个换了吗
AllenHua
2021-07-09 13:51:39 +08:00
@AlkTTT #6 navicat 11.0.9 企业版

mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘New root password’;

MySQL 8 默认使用了新的密码验证插件:caching_sha2_password

比如这篇文章: https://zhuanlan.zhihu.com/p/36087723

是 navicat 版本过低的原因? mysql 改了,也重启了,使用 navicat 11.0.9 企业版 登录还是无法登录,报错如下

> 1251 Client does not support authentication protocol requested by server; consider upgrading MySQL client
AllenHua
2021-07-09 13:53:43 +08:00
@AlkTTT #7 没有换,我等会试试。谢谢

MySQL 8.0 以上版本的数据库连接有所不同:com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver 。https://www.runoob.com/java/java-mysql-connect.html
AllenHua
2021-07-09 14:02:26 +08:00
@AlkTTT #7 navicat 还是不行。驱动只是在 Java 这边改,我给误会了。还是未能解决问题 [捂脸]

难道 navicat 连接 mysql/mariadb 数据库可以指定驱动程序吗
mohulai
2021-07-09 14:22:06 +08:00
@AlkTTT #7 这个地方我搜到过,换了,连玄学的换时区都加上了,也没用
xsm1890
2021-07-09 14:26:30 +08:00
java.sql.SQLException: Unknown system variable 'tx_isolation'。 这么大个报错。。
AllenHua
2021-07-09 14:27:28 +08:00
@AlexPUBLIC #4
@shiny #5
@AlkTTT #6

我换了 navicat 15,使用 mysql_native_password 验证的方式,连接 mysql 8 成功了。还就是 navicat 版本的问题。

@mohulai 对楼主说声抱歉,占用了你的帖子的资源。

楼主也看看驱动问题 MySQL 8.0 以上版本的数据库连接有所不同:com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver 。https://www.runoob. com/java/java-mysql-connect.html
xsm1890
2021-07-09 14:27:51 +08:00
@@tx_isolation is deprecated and will be removed in a future release.pleas use @@transaction_isolation instead
cslive
2021-07-09 14:30:48 +08:00
?serverTimezone=UTC&useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 加上试试,自己就是这么用得
mohulai
2021-07-09 14:41:45 +08:00
@xsm1890 #14 Java 连接里面没有这些内容啊,是要在 mysql 的命令行里改吗?刚用 mysql,不太熟。
xsm1890
2021-07-09 15:04:18 +08:00
@mohulai 不是啊,这个是数据库事务隔离级别的参数。版本间写法不一样了而已 ,这是报错的根本原因。参数写在驱动里面,升级驱动版本就能解决
mohulai
2021-07-09 15:09:46 +08:00
@shiny #5 我看了我的 Mysql my.ini 文件 default_authentication_plugin=mysql_native_password 这条一直都在
mohulai
2021-07-09 15:12:22 +08:00
@AlexPUBLIC #4 老哥这是加在哪里的? my.ini 里默认就是 mysql_native_password 。是因为 Java 的框架改了认证方式?
mohulai
2021-07-09 15:13:45 +08:00
@xsm1890 #17 我一开始就升级了驱动版本啊,没有用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/788505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX