Chinaunix首页 | 论坛 | 博客
  • 博客访问: 749079
  • 博文数量: 116
  • 博客积分: 923
  • 博客等级: 准尉
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-06 21:43
个人简介

一直帮老板搬运代码!!!

文章分类
文章存档

2013年(47)

2012年(69)

分类: Java

2012-11-07 12:02:21

mysql自动关闭服务、连接限制等问题的解决方法

//***********************************************本文章转载*******************************************************************************************
通过mysql服务器端程序mysql administrator调整连接参数。

将max_connections max_updates max_questions三项数据调整到很大的数字,那么你有限的操作将不会导致数据库服务的终止了
在mysql数据库中,如果一个连接8小时没有请求和操作,就会自动断开,从而导致一些基于数据库连接的应用程序,特别是 web 应用程序出错。
有三个方法可以解决这个问题:
1:修改mysql配置参数
2:修改jdbc
3:修改第三方的数据库连接池应用 proxool.xml

方法一:这个参数的名称是 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连接的 url:
jdbc:mysql://hostaddress:3306/schemaname?autoreconnect=true
添加 autoreconnect=true 这个参数,即能解决这个问题。

方法三:配置文件(proxool.xml):
mysql
jdbc:mysql://localhost/yourdatebase?useunicode=true&characterencoding=utf-8
com.mysql.jdbc.driver
90000
20
3
20
3
true
true
select current_user

三、开始菜单-运行-services.msc

找到mysql的服务并双击

点击恢复选项卡

第一次失败:默认是“不操作”

//***********************************************本文章转载*******************************************************************************************

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。
解决这个问题的办法有三种:
1. 增加 MySQL 的 wait_timeout 属性的值。
修改 /etc/mysql/my.cnf 文件,在 [mysqld] 节中设置:
# Set a connection to wait 8 hours in idle status.
wait_timeout = 864002. 减少连接池内连接的生存周期,使之小于上一项中所设置的 wait_timeout 的值。
修改 c3p0 的配置文件,设置:
# How long to keep unused connections around(in seconds)
# Note: MySQL times out idle connections after 8 hours(28,800 seconds)
# so ensure this value is below MySQL idle timeout
cpool.maxIdleTime=25200在 Spring 的配置文件中:
class="com.mchange.v2.c3p0.ComboPooledDataSource">


3. 定期使用连接池内的连接,使得它们不会因为闲置超时而被 MySQL 断开。
修改 c3p0 的配置文件,设置:
# Prevent MySQL raise exception after a long idle time
cpool.preferredTestQuery='SELECT 1'
cpool.idleConnectionTestPeriod=18000
cpool.testConnectionOnCheckout=true修改 Spring 的配置文件:
class="com.mchange.v2.c3p0.ComboPooledDataSource">
value="${cpool.preferredTestQuery}" />
value="${cpool.idleConnectionTestPeriod}" />
value="${cpool.testConnectionOnCheckout}" />



附:以下 awk 脚本可以用以将 c3p0.properties 文件中的属性设置转换成为 applicationContext.xml 中 数据库连接池 DataSource 所需的 XML 元素形式。
#!/bin/awk

BEGIN {
FS="=";
}
{
if (NF == 2) {
if ((x=index($1, ".")) > 0) {
property_name = substr($1, x+1, length($1));
} else {
property_name = $1;
}
printf(" ", property_name, $1);
}
}

阅读(7525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~