重装MySQL后Java应用连接数据库出现通信链路故障求助
问题排查与解决
1. 适配JDBC驱动与MySQL版本兼容性
重装MySQL后版本大概率更新(比如从5.x升级到8.x),旧驱动com.mysql.jdbc.Driver无法适配MySQL8+,需替换为com.mysql.cj.jdbc.Driver,同时URL必须添加时区参数。
- 若使用Maven,更新依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 版本需匹配你的MySQL实际版本 --> </dependency>
- 修改代码中的驱动类和URL:
static Connection getConnection() { try { // 适配MySQL8+的驱动类 Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } String username = "root"; String password = "password"; // 添加时区参数,按需关闭SSL(根据环境调整) String url = "jdbc:mysql://127.0.0.1:3306/wnetwork?serverTimezone=UTC&useSSL=false"; try{ // 建议单独传入用户名密码,避免URL拼接带来的编码问题 setConnection(DriverManager.getConnection(url, username, password)); } catch (SQLException e) { throw new IllegalStateException(e); } return connection; }
2. 配置MySQL用户TCP连接权限
终端连接MySQL用的是本地socket,而JDBC用的是127.0.0.1的TCP连接,重装后root用户可能未被授权TCP连接权限:
- 登录MySQL终端,执行授权命令:
GRANT ALL PRIVILEGES ON wnetwork.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
3. 检查MySQL绑定地址配置
确保MySQL允许127.0.0.1的TCP连接:
- 打开MySQL配置文件(my.cnf/my.ini),找到
bind-address配置项,设置为127.0.0.1或0.0.0.0(允许所有IP访问) - 重启MySQL服务:
# Linux系统 sudo systemctl restart mysql # Windows系统 net stop mysql && net start mysql
4. 补充URL必要参数
旧URL可能缺少MySQL新版本要求的参数,除时区外,若遇到公钥相关错误,可添加allowPublicKeyRetrieval=true,最终URL示例:
jdbc:mysql://127.0.0.1:3306/wnetwork?serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
内容的提问来源于stack exchange,提问作者Reconnact
相关产品推荐
相关产品推荐

