MySQL服务未运行是Java应用连接失败的主因;需验证服务状态、添加8.3.0版mysql-connector-j驱动、配置含时区和SSL参数的JDBC URL,并通过SELECT 1测试真实连通性。

确认 MySQL 服务已正确安装并运行
很多 Java 应用启动时报 Communications link failure 或 Connection refused,根本原因不是代码写错,而是本地根本没跑起来 MySQL。先验证服务状态:
- Windows:打开任务管理器 → 服务标签页 → 找到
MySQL80(或类似名称),确保状态为“正在运行”;也可在命令行执行sc query MySQL80 -
macOS/Linux:终端运行
brew services list | grep mysql(Homebrew 安装)或sudo systemctl status mysql - 通用验证:执行
mysql -u root -p,能成功登录即说明服务就绪
添加 MySQL JDBC 驱动依赖(Maven)
Java 连 MySQL 必须通过 JDBC 驱动,版本不匹配会导致 ClassNotFoundException 或连接后无法执行某些 SQL(如 JSON 字段操作)。推荐使用官方最新稳定版:
mysql mysql-connector-j 8.3.0
注意:mysql-connector-java 已在 8.0.33 后废弃,新项目必须用 mysql-connector-j;若用旧版驱动连 MySQL 8+,可能因默认启用 caching_sha2_password 认证而报 Public Key Retrieval is not allowed 错误。
配置 JDBC URL 与连接参数
URL 格式不对是连接失败最常见原因。MySQL 8+ 默认要求显式指定时区和服务器证书策略:
立即学习“Java免费学习笔记(深入)”;
发卡宝是一个专业的软件卡密等虚拟商品在线交易平台,拥有多种兑换方式,费率低,结算快,正规企业平台一直稳定运营,24小时不间断提供自动发卡服务。【模板说明】试用版自带一套模板(响应式)【环境支持】PHP环境 / 200M或以上空间大小 / 开启父路径 / 设置index.php为默认首页 / 目录写入权限需要开启【数据库】MySQL【安装步骤】将文件上传至空间目录,运行“http://域名/inst
- 基础格式:
jdbc:mysql://localhost:3306/your_db?serverTimezone=Asia/Shanghai&useSSL=false - 若仍报
Unknown system variable 'query_cache_size',说明驱动试图兼容老版本协议,加&allowPublicKeyRetrieval=true - 生产环境建议启用 SSL:
&useSSL=true&requireSSL=true,并配置信任库 - 连接池(如 HikariCP)中不要在 URL 里写
autoReconnect=true—— 现代驱动已弃用该参数,应靠连接池自身的健康检查机制处理断连
测试连接是否真正可用(不只是 DriverManager.getConnection)
只调用 DriverManager.getConnection(...) 成功不代表数据库就 ready。常见陷阱是连接建立但无法执行查询,比如权限不足或表不存在:
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 1")) {
if (rs.next()) {
System.out.println("✅ 数据库连接与基础查询正常");
}
} catch (SQLException e) {
System.err.println("❌ 连接失败:" + e.getMessage());
}
务必加上实际查询(哪怕只是 SELECT 1),否则会掩盖 Access denied for user 或 No database selected 类错误。另外,Connection 对象创建后不自动校验连通性,JDBC 驱动直到第一次执行语句才真正发包到服务端。
本地开发时最容易被忽略的是 MySQL 的 bind-address 配置 —— 如果 my.cnf 里写了 bind-address = 127.0.0.1,那 localhost 走 socket 连接没问题,但换成 127.0.0.1 就可能因 DNS 解析或权限规则差异失败。









