当我尝试将我的 java 程序连接到服务器时,我得到了这个异常:
CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
所以我找到了这些说明:
如果您收到 SQLException: Connection denied 或 Connection timed out 或 MySQL 特定的 CommunicationsException: Communications link failure,则意味着根本无法访问数据库。这可能有以下一种或多种原因:
- JDBC URL 中的 IP 地址或主机名错误。
- 本地 DNS 服务器无法识别 JDBC URL 中的主机名。
- JDBC URL 中的端口号缺失或错误。
- 数据库服务器已关闭。
- 数据库服务器不接受 TCP/IP 连接。
- 数据库服务器已用完连接。
- Java 和 DB 之间的某些东西正在阻止连接,例如防火墙或代理。
要解决其中一个问题,请遵循以下建议:
- 使用 ping 验证和测试它们。
- 刷新 DNS 或改用 JDBC URL 中的 IP 地址。
- 根据 MySQL DB 的 my.cnf 进行验证。
- 启动数据库。
- 验证 mysqld 是否在没有 --skip-networking 选项的情况下启动。
- 重新启动数据库并相应地修复您的代码,使其最终关闭连接。
- 禁用防火墙和/或配置防火墙/代理以允许/转发端口。
从这个答案。
我尝试了每个选项,但我不确定如何使用“my.ini”配置文件验证端口号(选项 3)。另外,我发现 services.msc 列表中缺少“MySQL”服务,但我确实发现使用了 3306 端口。它与问题有关吗?'my.ini' 配置文件应该是什么样子?我使用 MySQL Workbench 5.2.47。(MySQL 服务器版本为 5.6)。
我的连接代码:
private MySQLConnectivity() {
try { Class.forName("com.mysql.jdbc.Driver"); Connect();
} catch (ClassNotFoundException e)
{ // TODO Auto-generated catch block e.printStackTrace(); }
}
public void Connect() { try { MySQLConnectivity.Conn = (Connection)DriverManager.getConnection(URL, USER, PASS);
} catch (SQLException e)
{ // TODO Auto-generated catch block e.printStackTrace();
} finally { }