返回

轻松解决 "Caused by: com...MySQLNonTransientConnectionException: Public Key Retrieval is not allowed" 的报错问题

后端

MySQLNonTransientConnectionException:彻底指南

概述

在与 MySQL 8.x 数据库交互时,您可能遇到的一个常见错误是 Caused by: com...MySQLNonTransientConnectionException: Public Key Retrieval is not allowed。该错误表明无法从服务器获取公钥,从而导致数据库连接失败。本指南将深入探讨此错误的成因并提供全面的解决方案。

原因

导致 MySQLNonTransientConnectionException: Public Key Retrieval is not allowed 错误的主要原因包括:

  • 不安全的连接: MySQL 8.x 强制执行使用 TLS 或 SSL 来加密数据库连接。如果您使用未加密的连接方式,就会触发此错误。
  • 不支持 TLS 或 SSL: 确保您的 MySQL 服务器已配置为支持 TLS 或 SSL。如果服务器不支持,您将无法使用加密连接。
  • 证书不匹配: 如果您使用自签名证书或客户端和服务器之间的证书不匹配,也会导致此错误。

解决方案

解决 MySQLNonTransientConnectionException: Public Key Retrieval is not allowed 错误的步骤如下:

  1. 启用安全的连接: 在连接 URL 中添加 ssl=true 参数,以启用 TLS 或 SSL 加密。
  2. 检查服务器支持: 使用 SHOW VARIABLES LIKE 'ssl%'; 命令检查 MySQL 服务器是否支持 TLS 或 SSL。
  3. 修复证书问题: 重新生成自签名证书或使用受信任的证书颁发机构颁发的证书。
  4. 其他提示:
    • 检查防火墙设置,确保允许 MySQL 连接。
    • 更新 MySQL 客户端和服务器至最新版本。
    • 检查 MySQL 配置文件是否有错误。
    • 联系 MySQL 技术支持以寻求进一步的帮助。

代码示例

使用 JDBC 启用 SSL 连接:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLNonTransientConnectionExceptionExample {

    public static void main(String[] args) {
        try {
            // 使用 TLS 连接到 MySQL 数据库
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_database?ssl=true", "username", "password");

            // 执行查询
            java.sql.Statement statement = connection.createStatement();
            java.sql.ResultSet resultSet = statement.executeQuery("SELECT * FROM my_table");

            // 处理查询结果

            // 关闭连接
            resultSet.close();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            // 处理数据库错误
            e.printStackTrace();
        }
    }
}

常见问题解答

1. 如何确定我的 MySQL 服务器是否支持 TLS 或 SSL?

使用 SHOW VARIABLES LIKE 'ssl%'; 命令来检查服务器是否支持 TLS 或 SSL。

2. 如何重新生成自签名证书?

您可以使用 MySQL 提供的工具 openssl 来重新生成自签名证书。

3. 我在使用 mysql_ssl_set 函数时遇到错误,该怎么办?

确保您正确地配置了 MySQL 连接并启用了 SSL。检查您的证书和连接参数是否正确。

4. 如何联系 MySQL 技术支持?

您可以访问 MySQL 官方网站或联系 MySQL 技术支持论坛寻求帮助。

5. 如何避免此错误?

始终使用安全的连接,定期更新 MySQL 客户端和服务器,并正确管理证书。

结论

MySQLNonTransientConnectionException: Public Key Retrieval is not allowed 错误是一个常见问题,但可以通过遵循本文概述的步骤轻松解决。通过理解错误的原因并实施适当的解决方案,您可以确保稳定的 MySQL 连接并防止此错误在未来发生。