Java连接Mysql数据库异常:Public Key Retrieval is not allowed

摘要:
1) 设置dataSource。setAllowPublicKeyRetrieval通过代码;数据源。setUseSSL;2) 将jdbc url设置为jdbc:mysql://localhost:3306/Database_dbName?
本文主要介绍通过connector 8.0.11连接Mysql数据库,出现Public Key Retrieval is not allowed(Exception in thread “main”java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed)的异常信息的解决方法。

堆栈跟踪:

Exception in thread "main" java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at 
 com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:119) at ConnectionManager.getConnection(ConnectionManager.java:28) at Main.main(Main.java:8)

连接代码:

public class ConnectionManager {

    public static final String serverTimeZone = "UTC";
    public static final String serverName = "localhost";
    public static final String databaseName ="mysqldb";
    public static final int portNumber = 3306;
    public static final String user = "anyroot";
    public static final String password = "anyroot";

    public static Connection getConnection() throws SQLException {

        MysqlDataSource dataSource = new MysqlDataSource();

        dataSource.setUseSSL( false );
        dataSource.setServerTimezone( serverTimeZone );
        dataSource.setServerName( serverName );
        dataSource.setDatabaseName( databaseName );
        dataSource.setPortNumber( portNumber );
        dataSource.setUser( user );
        dataSource.setPassword( password );

        return dataSource.getConnection();
    }
}

解决异常问题

解决此异常问题需要将allowPublicKeyRetrieval=trueuseSSL=false

1)通过代码设置

dataSource.setAllowPublicKeyRetrieval(true);
dataSource.setUseSSL(false);

2)jdbc的url设置

jdbc:mysql://localhost:3306/Database_dbName?allowPublicKeyRetrieval=true&useSSL=false;

3)Spring boot配置

spring.datasource.url=jdbc:mysql://localhost:3306/db-name?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

免责声明:文章转载自《Java连接Mysql数据库异常:Public Key Retrieval is not allowed》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx 反向代理高通驱动树中的GPIO详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

查看Mysql正在执行的事务、锁、等待

一、关于锁的三张表(MEMORY引擎) ## 当前运行的所有事务 mysql> select * from information_schema.innodb_trxG; *************************** 1. row *************************** trx_id: 613963...

MySQL SQL_ERROR 错误号 1032解决办法

1032错误码说明:                MySQL主从同步的1032错误,一般是指要更改的数据不存在,SQL_THREAD提取的日志无法应用故报错,造成同步失败         (Update、Delete、Insert一条已经delete的数据)。    1032的错误本身对数据一致性没什么影响,影响最大的是造成了同步失败、同步停止。   ...

kali系统网站部署笔记

网站放在 其他位置----计算机------var-----www----html 首先启动nginx service nginx start   然后访问127.0.0.1 就会看到Apache正在工作 启动mysql数据库 service mysql start 接着用 mysql -u root -p 连接mysql 用户名:root 密码:1234...

Mac下启动和停止Mysql服务

方法1. 启动Mysql服务   sudo /Library/StartupItems/MySQLCOM/MySQLCOM start   停止Mysql服务   sudo /Library/StartupItems/MySQLCOM/MySQLCOM stop   重启Mysql服务   sudo /Library/StartupItems/MySQLC...

mysql 日期处理

mysql获取一个小时内的数据 (第一种方法)SELECT * FROM 表名 WHERE 字段名>NOW()-INTERVAL 2 HOUR; (第二种方法)SELECT * FROM 表名 WHERE 字段名 > DATE_SUB(NOW(), INTERVAL 60 MINUTE); 字符串型日期比对 select name,cdate ...

mysql性能优化-慢查询分析、优化索引和配置【转】

一、优化概述 二、查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三、配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)      key_buffer_size 5)  ...