V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mohulai
V2EX  ›  问与答

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

  •  
  •   mohulai · 2021-07-09 13:07:24 +08:00 · 2798 次点击
    这是一个创建于 1014 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写的一个 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 一点问题没有,可我犯病了就是不想换,折腾一天了
    25 条回复    2021-07-12 18:10:07 +08:00
    AllenHua
        1
    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
        2
    AllenHua  
       2021-07-09 13:23:59 +08:00
    用 datagrip 就正常连接,后面装了 5.7,使用 navicat 连接就正常了……
    AllenHua
        3
    AllenHua  
       2021-07-09 13:24:36 +08:00
    @AllenHua #2 mysql8.0 用 datagrip 连接正常。
    AlexPUBLIC
        4
    AlexPUBLIC  
       2021-07-09 13:27:18 +08:00
    8.0 的验证方法变了,IDENTIFIED WITH mysql_native_password 就行
    shiny
        5
    shiny  
       2021-07-09 13:27:28 +08:00
    偷懒方法就是初始化数据库的时候使用原来的验证方式
    [mysqld]
    default_authentication_plugin=mysql_native_password
    AlkTTT
        6
    AlkTTT  
       2021-07-09 13:38:06 +08:00
    @AllenHua navicat 版本低了,升个新版就可以了
    AlkTTT
        7
    AlkTTT  
       2021-07-09 13:39:07 +08:00
    driver-class-name: com.mysql.cj.jdbc.Driver,这个换了吗
    AllenHua
        8
    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
        9
    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
        10
    AllenHua  
       2021-07-09 14:02:26 +08:00
    @AlkTTT #7 navicat 还是不行。驱动只是在 Java 这边改,我给误会了。还是未能解决问题 [捂脸]

    难道 navicat 连接 mysql/mariadb 数据库可以指定驱动程序吗
    mohulai
        11
    mohulai  
    OP
       2021-07-09 14:22:06 +08:00
    @AlkTTT #7 这个地方我搜到过,换了,连玄学的换时区都加上了,也没用
    xsm1890
        12
    xsm1890  
       2021-07-09 14:26:30 +08:00
    java.sql.SQLException: Unknown system variable 'tx_isolation'。 这么大个报错。。
    AllenHua
        13
    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
        14
    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
        15
    cslive  
       2021-07-09 14:30:48 +08:00
    ?serverTimezone=UTC&useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 加上试试,自己就是这么用得
    mohulai
        16
    mohulai  
    OP
       2021-07-09 14:41:45 +08:00
    @xsm1890 #14 Java 连接里面没有这些内容啊,是要在 mysql 的命令行里改吗?刚用 mysql,不太熟。
    xsm1890
        17
    xsm1890  
       2021-07-09 15:04:18 +08:00
    @mohulai 不是啊,这个是数据库事务隔离级别的参数。版本间写法不一样了而已 ,这是报错的根本原因。参数写在驱动里面,升级驱动版本就能解决
    mohulai
        18
    mohulai  
    OP
       2021-07-09 15:09:46 +08:00
    @shiny #5 我看了我的 Mysql my.ini 文件 default_authentication_plugin=mysql_native_password 这条一直都在
    mohulai
        19
    mohulai  
    OP
       2021-07-09 15:12:22 +08:00
    @AlexPUBLIC #4 老哥这是加在哪里的? my.ini 里默认就是 mysql_native_password 。是因为 Java 的框架改了认证方式?
    mohulai
        20
    mohulai  
    OP
       2021-07-09 15:13:45 +08:00
    @xsm1890 #17 我一开始就升级了驱动版本啊,没有用
    HDMItoDP
        21
    HDMItoDP  
       2021-07-09 15:17:30 +08:00
    用 navicat15 试试,这个我一直用来连接 8.0,没问题的
    hk1937
        22
    hk1937  
       2021-07-09 18:46:44 +08:00
    楼主能加个微请教下技术问题吗 ?小白~
    AlexPUBLIC
        23
    AlexPUBLIC  
       2021-07-10 05:06:05 +08:00
    @mohulai 我是用的 python,sql8 命令行里改认证:ALTER USER 'root'@'localhost'
    IDENTIFIED WITH mysql_native_password
    BY 'password';
    mohulai
        24
    mohulai  
    OP
       2021-07-12 18:04:13 +08:00
    @hk1937 #22 你看我问出这种问题不像小白么
    hk1937
        25
    hk1937  
       2021-07-12 18:10:07 +08:00
    @mohulai 巧了 俺也小白
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2731 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 15:42 · PVG 23:42 · LAX 08:42 · JFK 11:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.