这两天在日志中看到关于数据库报的异常:node
com.MySQL.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was X ms agomysql
使用Connector/J链接MySQL数据库,程序运行较长时间后就会报这个错误,有时错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。linux
错误的缘由:MySQL服务在长时间不链接以后断开了,断开以后的首次请求会抛出这个异常sql
缘由分析:一、既然是长时间不链接以后断开了,那这个时间应该是能够设定的,或者如今mysql用的仍是默认的值数据库
二、如何查看如今的时间值,以及如何修改个人mysql是安装在windows系统上,就以这个说明,如果在开发中mysql安装在Linux上,操做步骤几乎同样编程
查看默认值:一、DOC命令启动mysql:mysql -hlocalhost -u用户名 -p密码windows
二、查看和链接mysql时间有关的系统变量:show variables like '%timeout%'服务器
1)interactive_timeout:
参数含义:服务器关闭交互式链接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)
(2)wait_timeout:
参数含义:服务器关闭非交互链接以前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()url
的链接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时).net
wait_timeout:超时控制的变量,其时间为长度为28800s,就是8个小时,在8个小时以后会断开,须要从新链接,能够在访问的url中使用
jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true来是链接自动恢复,但这是mysql4及其如下版本使用,在mysql5中已经无效,必须调整系统变量来控制
Mysql5中对wait_timeout和interactive_timeout有两个说明:interactive_timeout:服务器关闭交互式链接前等待活动的秒数。交互式客户端定义为在
mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout
wait_timeout:服务器关闭非交互链接以前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化
会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的链接选项CLIENT_INTERACTIVE定义),又见interactive_timeout
结论:若要修改的话,须要同时修改这两个变量
变量值大小肯定:修改的话,若是变量值有范围大小限制,确定不要超过变量的最大范围值,查资料知:在windows环境中:1-2147483s,
Linux环境中:1-31536000s
Windows下修改:在%MySQL HOME%/bin下有mysql.ini配置文件,打开后在以下位置添加两个变量,赋值。(这里修改成388000)
保存退出,重启mysql服务,必定是重启musql服务,便能看到修改结果
windows下的配置文件具体是哪一个须要从windows系统服务中找到mysql,打开属性,看“可执行文件路径”里面的参数值,由于它多是my.cnf而
不是my.ini,这是因为安装时的设置,咱们可能会忽略它。
Linux环境下修改:配置文件在:cd /etc/my.cnf
wait_timeout=31536000
interactive_timeout=31536000
扩展:1.MySQL服务器所支持的最大链接数是有上限的,由于每一个链接的创建都会消耗内存,所以咱们但愿客户端在链接到MySQL Server处理完
相应的操做后,应该断开链接并释放占用的内存。若是你的MySQL Server有大量的闲置链接,他们不只会白白消耗内存,并且若是链接一直在累
加而不断开,最终确定会达到MySQL Server的链接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统
的运行状况来判断。在系统运行一段时间后,能够经过show processlist命令查看当前系统的链接状态,若是发现有大量的sleep状态的链接进程,
则说明该参数设置的过大,能够进行适当的调整小些。
2.编程时也可使用链接池设置超时时间,配置相对简单。但修改数据库更为本质一些