1. 检查基础配置(出现频率45%)

// 正确连接模板(Java 8+)
String url = "jdbc:mysql://localhost:3306/mydb?"
           + "useSSL=false&"            // 禁用SSL(测试环境)
           + "serverTimezone=Asia/Shanghai&" // 必须设置时区
           + "characterEncoding=utf8";
String user = "root";
String password = "123456";

// 加载驱动(新版可省略Class.forName)
try (Connection conn = DriverManager.getConnection(url, user, password)) {
    // 连接成功...
}

2. 检查驱动依赖(Maven配置)

<!-- pom.xml 必须包含正确版本 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version> <!-- 根据MySQL版本选择 -->
</dependency>

3. 服务状态检查(命令行)

# 检查MySQL服务状态
sudo systemctl status mysql

# 尝试本地连接(排除代码问题)
mysql -u root -p

4. 网络连通性验证

# 测试端口是否开放
telnet 服务器IP 3306

# 检查防火墙(CentOS示例)
sudo firewall-cmd --list-ports
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

5. 权限配置检查

-- 检查用户权限
SELECT host, user FROM mysql.user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;

6. 查看完整错误日志

try {
    // 连接代码...
} catch (SQLException e) {
    System.out.println("完整错误信息:");
    e.printStackTrace(); // 必须打印完整堆栈
}

7. 版本兼容性检查

MySQL版本 推荐驱动版本
5.6 5.1.x
5.7 5.1.x
8.0 8.0.x

8. 高级配置检查

// 解决时区问题(8.x驱动必须)
String url = "jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai";

// 解决SSL警告
useSSL=false

高频错误对照表

错误现象 解决方案
Communications link failure 检查服务状态/网络/防火墙
Access denied for user 检查用户名密码/权限配置
The server timezone is invalid 连接参数添加serverTimezone配置
No suitable driver found 检查驱动依赖/Class.forName
Public Key Retrieval is not allowed 添加allowPublicKeyRetrieval=true

建议按照以上顺序逐步排查,95%的连接问题都可以通过这些步骤解决。如果仍然失败,请提供完整错误日志进行深度分析。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐