数据库异常总结

突然数据库不可用了,一直报错:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

方案:上述问题是由mysql5数据库的配置引起的。mysql5将其连接的等待时间(wait_timeout)缺省为8小时。

在其客户程序中可以这样来查看其值:

mysql> show global variables like 'wait_timeout'; 
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| wait_timeout  | 605800 |
+---------------+--------+
1 row in set (0.00 sec)

 28800 seconds,也就是8小时。 

如果在wait_timeout秒期间内,数据库连接(java.sql.Connection)一直处于等待状态,mysql5就将该连接关闭。这时,你的Java应用的连接池仍然合法地持有该连接的引用。当用该连接来进行数据库操作时,就碰到上述错误。这解释了为什么我的程序第二天不能登录 的问题

具体措施1:在jdbc连接url的配置中,你可以附上“autoReconnect=true”,但这仅对mysql5以前的版本起作用。增加“validation query”似乎也无济于事。 (5.0前有效)

具体措施2:设置等待超时为21天/etc/my.cnf 增加一行:wait_timeout=1814400

猜你喜欢

转载自zjjndnr.iteye.com/blog/2389645
今日推荐