MYSQL数据库自动断开连接
第一次往服务器上传项目,结果第二天就开始报错,访问不了数据库,以为谁不小心把数据库删了,看了看发现数据库数据都在,又重启了一下tomcat发现有能用了,就很迷,然后百度了一下发现,MySQL数据库8小时不访问就自动断开链接了。
看大佬们的博客发现一共三种解决方案。
一:修改MySQL配置参数
这个参数的名称是 wait_timeout,其默认值为 28800秒(8小时)。其意义为关闭一个连接之前在这个连接上等到行动的秒数,也就是说,如果一个连接闲置超过这个选项所设置的秒数,MySQL会主动断开这个连接。
修改操作:
linux下打开/etc/my.cnf,在属性组mysqld下面添加参数如下:
[mysqld]
interactive_timeout=28800000
wait_timeout=28800000
windows下打开my.ini,增加:
interactive_timeout=28800000
wait_timeout=28800000
有实践表明,没有办法把这个值设置成无限大,即永久。因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作。不推荐
二:修改JDBC
修改如下JDBC连接的 URL:
jdbc:mysql://hostaddress:3306/schemaname?autoReconnect=true
添加 autoReconnect=true这个参数,即能解决这个问题。
我就是用的这种方法,不过长时间不访问后,第一次访问还是没有链接到数据库,关掉页面第二次访问才链接到,不清楚是我写的有问题,还是这个参数就是这样希望来个大佬解答一下。
三:修改第三方的数据库连接池应用 Proxool.xml
配置文件(proxool.xml):
<?xml version="1.0"encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<!-- proxool别名 -->
<alias>mysql</alias>
<!--数据库连接URL -->
<driver-url>
jdbc:mysql://localhost/yourDatebase?useUnicode=true&characterEncoding=UTF-8</driver-url>
<!-- JDBC驱动名称 -->
<driver-class>com.mysql.jdbc.Driver</driver-class>
<!--数据库连接帐号 -->
<driver-properties>
<property name="user"value="root" />
<property name="password"value="password" />
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 -->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!--指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受 -->
<maximum-new-connections>20</maximum-new-connections>
<!--最少保持的空闲连接数 -->
<prototype-count>3</prototype-count>
<!--允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>20</maximum-connection-count>
<!--最小连接数 -->
<minimum-connection-count>3</minimum-connection-count>
<!--在分配连接前后是否进行有效性测试,这个是解决本问题的关键 -->
<test-before-use>true</test-before-use>
<test-after-use>true</test-after-use>
<!--用于测试的SQL语句一定要写(不知道问什么)-->
<house-keeping-test-sql>SELECTCURRENT_USER</house-keeping-test-sql>
</proxool>
</something-else-entirely>