mohulai
V2EX  ›  问与答

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

  •  
  •   mohulai · Jul 9, 2021 · 4508 views
    This topic created in 1946 days ago, the information mentioned may be changed or developed.
    写的一个 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 replies  •  2021-07-12 18:10:07 +08:00
    AllenHua
    AllenHua
    Jul 9, 2021
    1
    顶一下帖。我昨天也是装了 8.0,然后用我常用的 navicat 连接,无法连接

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

    从 csdn 到 stackoverflow 和各种英文网页,尝试了都没能解决。我知道是 mysql8.0 更改了认证方式,但是按照网上的说法,没一个靠谱的……
    AllenHua
    AllenHua
    Jul 9, 2021
    2
    用 datagrip 就正常连接,后面装了 5.7,使用 navicat 连接就正常了……
    AllenHua
    AllenHua
    Jul 9, 2021
    3
    @AllenHua #2 mysql8.0 用 datagrip 连接正常。
    c978R77Le1z2f8u9
    c978R77Le1z2f8u9
    Jul 9, 2021
    4
    8.0 的验证方法变了,IDENTIFIED WITH mysql_native_password 就行
    shiny
    shiny
    PRO
    Jul 9, 2021
    5
    偷懒方法就是初始化数据库的时候使用原来的验证方式
    [mysqld]
    default_authentication_plugin=mysql_native_password
    AlkTTT
    AlkTTT
    Jul 9, 2021
    6
    @AllenHua navicat 版本低了,升个新版就可以了
    AlkTTT
    AlkTTT
    Jul 9, 2021
    7
    driver-class-name: com.mysql.cj.jdbc.Driver,这个换了吗
    AllenHua
    AllenHua
    Jul 9, 2021
    8
    @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
    AllenHua
    Jul 9, 2021
    9
    @AlkTTT #7 没有换,我等会试试。谢谢

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

    难道 navicat 连接 mysql/mariadb 数据库可以指定驱动程序吗
    mohulai
    mohulai
    OP
    Jul 9, 2021
    11
    @AlkTTT #7 这个地方我搜到过,换了,连玄学的换时区都加上了,也没用
    xsm1890
    xsm1890
    Jul 9, 2021
    12
    java.sql.SQLException: Unknown system variable 'tx_isolation'。 这么大个报错。。
    AllenHua
    AllenHua
    Jul 9, 2021
    13
    @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
    xsm1890
    Jul 9, 2021
    14
    @@tx_isolation is deprecated and will be removed in a future release.pleas use @@transaction_isolation instead
    cslive
    cslive
    Jul 9, 2021
    15
    ?serverTimezone=UTC&useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 加上试试,自己就是这么用得
    mohulai
    mohulai
    OP
    Jul 9, 2021
    16
    @xsm1890 #14 Java 连接里面没有这些内容啊,是要在 mysql 的命令行里改吗?刚用 mysql,不太熟。
    xsm1890
    xsm1890
    Jul 9, 2021
    17
    @mohulai 不是啊,这个是数据库事务隔离级别的参数。版本间写法不一样了而已 ,这是报错的根本原因。参数写在驱动里面,升级驱动版本就能解决
    mohulai
    mohulai
    OP
    Jul 9, 2021
    18
    @shiny #5 我看了我的 Mysql my.ini 文件 default_authentication_plugin=mysql_native_password 这条一直都在
    mohulai
    mohulai
    OP
    Jul 9, 2021
    19
    @AlexPUBLIC #4 老哥这是加在哪里的? my.ini 里默认就是 mysql_native_password 。是因为 Java 的框架改了认证方式?
    mohulai
    mohulai
    OP
    Jul 9, 2021
    20
    @xsm1890 #17 我一开始就升级了驱动版本啊,没有用
    HDMItoDP
    HDMItoDP
    Jul 9, 2021
    21
    用 navicat15 试试,这个我一直用来连接 8.0,没问题的
    hk1937
    hk1937
    Jul 9, 2021
    22
    楼主能加个微请教下技术问题吗 ?小白~
    c978R77Le1z2f8u9
    c978R77Le1z2f8u9
    Jul 10, 2021
    23
    @mohulai 我是用的 python,sql8 命令行里改认证:ALTER USER 'root'@'localhost'
    IDENTIFIED WITH mysql_native_password
    BY 'password';
    mohulai
    mohulai
    OP
    Jul 12, 2021
    24
    @hk1937 #22 你看我问出这种问题不像小白么
    hk1937
    hk1937
    Jul 12, 2021
    25
    @mohulai 巧了 俺也小白
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   956 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 19:33 · PVG 03:33 · LAX 11:33 · JFK 14:33
    ♥ Do have faith in what you're doing.