我连接到MySQL数据库的程序运行正常.然后,在不更改用于设置连接的任何代码的情况下,我得到以下异常:
com.mysql.jdbc.exceptions.jdbc4.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.
Run Code Online (Sandbox Code Playgroud)
发生了什么?
用于获取连接的代码:
private static Connection getDBConnection() throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException {
String username = "user";
String password = "pass";
String url = "jdbc:mysql://www.domain.com:3306/dbName?connectTimeout=3000";
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 37
这是一个包装的例外,并不是很有趣.它是异常的根本原因,它实际上告诉我们一些根本原因.请在堆栈跟踪中进一步了解一下.你将面临一个SQLException: Connection refused或那个机会很大SQLException: Connection timed out.
如果在您的情况下也是如此,那么所有可能的原因是:
要解决其中一个问题,请遵循以下建议:
ping.my.cnfMySQL DB 验证它.--skip-networking选项的情况下启动.顺便说一句(与实际问题无关),您不一定需要在每次 getConnection()调用时加载JDBC驱动程序.在启动期间只需一次即可.
小智 12
检查数据库服务器上设置的等待超时.有时它默认为10秒.这会在10秒内失去连接.
mysql> show global variables like '%time%' ;
Run Code Online (Sandbox Code Playgroud)
更新它使它像28800
mysql> SET GLOBAL wait_timeout = 28800;
Run Code Online (Sandbox Code Playgroud)
我也遇到这个问题大约 8-9 天了。这是一些背景知识:我正在开发一个在 bash 中运行的简单 Java 应用程序。
细节:
[jvazquez@archbox ~]$ mysql --version mysql Ver 14.14 Distrib 5.5.9, for Linux (i686) using readline 5.1 Linux archbox 2.6.37-ARCH #1 SMP PREEMPT Fri Feb 18 16:58:42 UTC 2011 i686 Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz GenuineIntel GNU/Linux
该应用程序在 Arch Linux、Mac OS X 10.6 和 FreeBSD 7.2 中运行良好。当我将jar文件移动到不同主机的另一个arch linux时,使用相同的mysql,类似的my.cnf,以及类似的内核版本,连接死亡并获得与原始海报相同的错误:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
我为此尝试了在 so 和论坛上找到的所有可能的组合(例如http://forums.mysql.com/read.php?39,180347,180347#msg-180347,现在已关闭,我可以t post .. ),特别是:
正如它所指出的(如果你查找相同的异常,你会发现几个关于这个问题的线程Reproduce com.mysql.jdbc.exceptions.jdbc4.CommunicationsException,例如设置Spring、hibernate和C3P0 )。
如果链接被删除,只需将 mysqld:ALL 添加到 /etc/hosts.allow
我知道这有点牵强,但它可能对任何使用 GNU/Linux 并有此异常的人有所帮助,这个线程似乎是发布我的研究的最佳场所。
希望能帮助到你
我得到了同样的错误,但后来我发现了它,因为那时Mysql服务器没有运行.
所以要改变服务器的状态
希望这会有所帮助.
| 归档时间: |
|
| 查看次数: |
167396 次 |
| 最近记录: |