zoukankan      html  css  js  c++  java
  • Jdbc连接MySQL 8时报错“MySQLNonTransientConnectionException: Public Key Retrieval is not allowed”

    一、问题

    因停电检修,今天重启服务器后,再启动jboss就报错“MySQLNonTransientConnectionException: Public Key Retrieval is not allowed”,jboss无法获取对数据源的JDBC连接。

    二、解决过程

    百度一下,先说是旧版JDBC驱动的bug,于是从maven中央库下载最新的mysql-connector-8.0.11.jar,替换后修改jboss的modle说明、将配置文件中的driver-class改为'com.mysql.cj.jdbc.Driver',但错误依旧。随后发现8.0.11版与hibernate不匹配,又改回原来的5.1.46。

    继续百度,说是需修改default_authentication_plugin设置,于是修改my.ini,增加[mysqld] default_authentication_plugin=mysql_native_password,重启mysql 8,错误依旧。

    继续百度,说是仍需修改用户的密码加密方式,于是在mysql命令行执行:ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';,这次虽仍报错,但错误提示变成“InvalidConnectionAttributeException: The server time zone value '<乱码>' is unrecognized or represents more than one time zone. ……”。

    继续百度,说是在jdbc连接串需指定time zone,于是修改jboss配置文件中的connection-url,在最后增加serverTimezone=Asia/Shanghai,重启jboss,终于过关。

    三、总结

    • 更换mysql的jdbc驱动,但其实从 5.1.37已经更新过这个bug,一般不需要;
    • 修改my.ini(Linux则是my.cnf),增加[mysqld] default_authentication_plugin=mysql_native_password;
    • 在mysql命令行执行:ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';
    • 在jdbc连接串指定time zone。

    四、疑问

    问题虽然解决了,但仍存在几个疑问:

    • 为什么停电重启前一切正常?
    • 为避免SSL,配置文件中的connection-url中加了useSSL=false,难道与这有关系?
  • 相关阅读:
    Eclipse 3.0.1插件方案(Java版) zt
    Vs2003使用时出现这个问题,正在郁闷中,网上找了好久,居然看到同样问题,马上拷贝来:)开心中
    Eclipse+Tomcat集成开发servletzt
    管理定律
    张小娴“禁果之味”
    上海主要特色医院一览表
    分布式网站数据库同步方案——sqlserver数据库同步复制,好文收藏之
    Eclipse 插件汇总(转载+不断更新) zt
    Eclipse零起步系列讲座 zt
    结婚这件事
  • 原文地址:https://www.cnblogs.com/jpfss/p/9745600.html
Copyright © 2011-2022 走看看