突然数据库不可用了,一直报错:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms agocom.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