mysql更改timeouts数据库连接时间
2014-02-09 13:31
921 查看
想必大家在用MySQL时都会遇到连接超时的问题,如下图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/6917787c86cbbf108dcde9a2ac3d11d6.jpg)
就是这个异常(com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was X ms ago),是由于MySQL服务在长时间不连接之后断开了,断开之后的首次请求会抛出这个异常。那么既然是连接超时的问题,就要去MySQL中探究一下连接时间是怎么控制的。打开MySQL的控制台,运行:show
variables like ‘%timeout%’,查看和连接时间有关的MySQL系统变量,得到如下结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/78759dd37c5a74d6ff8b658f268c309c.jpg)
其中wait_timeout就是负责超时控制的变量,其时间为长度为28800s,就是8个小时,那么就是说MySQL的服务会在操作间隔8小时后断开,需要再次重连。也有用户在URL中使用jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true来使得连接自动恢复,当然了,这是可以的,不过是MySQL4及其以下版本适用。MySQL5中已经无效了,必须调整系统变量来控制了。MySQL5手册中对两个变量有如下的说明:
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout
如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。
MySQL的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。要修改就只能在配置文件里修改。Windows下在%MySQL HOME%/bin下有mysql.ini配置文件,打开后在如下位置添加两个变量,赋值。(这里修改为388000)
保存退出,重启mysql服务,一定是重启系统服务。便可看到修改结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/315da775a953399a1c6e6f8c554b56c6.jpg)
Linux系统下的配置文件为/etc/my.cnf。需要多说一点的是:windows下的配置文件具体是哪个需要从windows系统服务中找到mysql,打开属性,看“可执行文件路径”里面的参数值,因为它可能是my.cnf而不是my.ini,这是由于安装时的设置,我们可能会忽略它。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201610/dd68c621dc23e0dc446cdf023da915c4.jpg)
至此,修改完成,那么连接超时的问题从数据库上就解决了。当然在编程时也可以使用连接池设置超时时间,配置相对简单。但修改数据库更为本质一些。
个人见解。希望对使用者有用。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/6917787c86cbbf108dcde9a2ac3d11d6.jpg)
就是这个异常(com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was X ms ago),是由于MySQL服务在长时间不连接之后断开了,断开之后的首次请求会抛出这个异常。那么既然是连接超时的问题,就要去MySQL中探究一下连接时间是怎么控制的。打开MySQL的控制台,运行:show
variables like ‘%timeout%’,查看和连接时间有关的MySQL系统变量,得到如下结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/78759dd37c5a74d6ff8b658f268c309c.jpg)
其中wait_timeout就是负责超时控制的变量,其时间为长度为28800s,就是8个小时,那么就是说MySQL的服务会在操作间隔8小时后断开,需要再次重连。也有用户在URL中使用jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true来使得连接自动恢复,当然了,这是可以的,不过是MySQL4及其以下版本适用。MySQL5中已经无效了,必须调整系统变量来控制了。MySQL5手册中对两个变量有如下的说明:
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout
如此看来,两个变量是共同控制的,那么都必须对他们进行修改了。继续深入这两个变量wait_timeout的取值范围是1-2147483(Windows),1-31536000(linux),interactive_time取值随wait_timeout变动,它们的默认值都是28800。
MySQL的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是默认值。要修改就只能在配置文件里修改。Windows下在%MySQL HOME%/bin下有mysql.ini配置文件,打开后在如下位置添加两个变量,赋值。(这里修改为388000)
保存退出,重启mysql服务,一定是重启系统服务。便可看到修改结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201405/315da775a953399a1c6e6f8c554b56c6.jpg)
Linux系统下的配置文件为/etc/my.cnf。需要多说一点的是:windows下的配置文件具体是哪个需要从windows系统服务中找到mysql,打开属性,看“可执行文件路径”里面的参数值,因为它可能是my.cnf而不是my.ini,这是由于安装时的设置,我们可能会忽略它。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201610/dd68c621dc23e0dc446cdf023da915c4.jpg)
至此,修改完成,那么连接超时的问题从数据库上就解决了。当然在编程时也可以使用连接池设置超时时间,配置相对简单。但修改数据库更为本质一些。
个人见解。希望对使用者有用。
相关文章推荐
- mysql查看数据库表的大小、更改时间、基本信息
- 更改openfire数据库连接为mysql
- 如何使用navicat for mysql连接本地数据库,并且导入数据文件
- Java连接sqlserver,Mysql,oracle等数据库的方法
- Python3 MySQL 数据库连接
- C/C++通过MySQL的API连接数据库并对数据库中内容RSA解密
- 解决mysql使用java web程序连接发生异常,数据库连接没问题的异常
- 学习记录0321-数据库基础-利用JDBC连接本地MySQL
- Mysql连接数据库封装类
- oracle连接数据库的时间
- MySQL>连接数据库
- linux 更改mysql的数据库目录
- MySQL之对数据库库表的字符集的更改
- mysql+jsp,在jsp页面连接了数据库,已成功获取数据库字段,请问如何取到当前用户对应的信息
- CentOS 6.5 下 QT4 连接 mysql 数据库的步骤
- JDBC连接数据库工具类(mysql、oracle、sqlserver)
- MySQL 数据库连接 静态语句块
- mysql、sqlserver、oracle、informix、sybase、DB2、神通等数据库,连接DRVIER+URL
- Mybatis连接mysql,数据库中字符乱码问题
- [lampp] 不能通过互联网连接数据库 MySQL is not accessable via network