加大MySql的最大连接数

本文介绍了两种调整MySQL最大连接数的方法:一是通过修改safe_mysqld文件;二是直接修改MySQL源代码。这两种方法均可有效解决高并发下数据库连接不足的问题。
     mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些, 
有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译。下面我们就分别介绍这两种方法: 

1.修改safe_mysqld 
找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 : 

-O max_connections=1000 


例如 :(其中前面有---的是原来的内容,而+++是修改过以后的) 
--- safe_mysqld.orig Mon Sep 25 09:34:01 2000 
+++ safe_mysqld Sun Sep 24 16:56:46 2000 
@@ -109,10 +109,10 @@ 
if test \"$#\" -eq 0 
then 
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \\ 
- --skip-locking >> $err_log 2>&1 
+ --skip-locking -O max_connections=1000 >> $err_log 2>&1 
else 
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR \\ 
- --skip-locking \"$@\" >> $err_log 2>&1 
+ --skip-locking \"$@\" -O max_connections=1000 >> $err_log 2>&1 
fi 
if test ! -f $pid_file # This is removed if normal shutdown 
then 
然后关闭mysql重启它,用 
/mysqladmin所在路径/mysqladmin -uroot -p variables 
输入root数据库账号的密码后可看到 
| max_connections | 1000 | 
即新改动已经生效。 

2.修改原代码 

解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行: 

{ \"max_connections\", (long*) &max_connections,1000,1,16384,0,1}, 

把它改为: 

{ \"max_connections\", (long*) &max_connections,1000,1,16384,0,1}, 

存盘退出,然后./configure ;make;make install可以获得同样的效果



本文转自king_819 51CTO博客,原文链接:http://blog.51cto.com/kerry/118878,如需转载请自行联系原作者

Java导致MySQL量不断增加的原因主要有以下几点: - **连未关闭**:若Java应用中使用数据库后未正确关闭,连池仍持有该连引用,随着时间推移,连量会持续增加。例如在使用Hibernate框架进行数据库操作时,可能存在建立连后未断开的情况,像在Linux系统中,有程序因别人封装好的jar包里的InputStream只有新建打开没有关闭,一直在循环新建打开文件,直到超过系统默认的大打开文件个限制(默认1024)报错,这也可能间影响数据库量,因为资源未合理释放,会使系统整体资源紧张,影响数据库管理[^1][^2]。 - **连超时设置不合理**:MySQL的`wait_timeout`参设置过小,在该时间内数据库处于等待状态,MySQL会关闭连,但Java应用的连池仍持有引用,后续使用该连操作数据库时会出现问题,且可能导致连量异常增加。例如默认`wait_timeout`为28800秒,当连长时间等待后被MySQL关闭,Java应用可能会重新创建新连,从而使连增多[^1]。 - **默认连限制**:Mysql数据库默认连是100,对于一般程序可能不够用,特别是使用Hibernate框架进行数据库操作时,问题会更明显。若程序对数据库需求较大,而默认连无法满足,Java应用会不断尝试创建新连,导致连量不断上升[^1]。 解决方法如下: - **确保连正确关闭**:在Java代码中,使用完数据库后,要确保调用`Connection.close()`方法关闭连。对于使用的各类资源,如`InputStream`等,也要及时关闭,避免资源泄漏。例如检查代码中是否存在未关闭的资源,将别人封装好的jar包里的`InputStream`加上关闭操作,保证资源合理释放[^2]。 - **调整连超时参**:修改MySQL的`my.ini`文件,在`[mysqld]`后面增加`wait_timeout=XXXXX`(XXXXX为合适的超时时间),保存后重启MySQL,以避免因连超时设置过小导致的连异常和量增加问题。例如将`wait_timeout`设置为一个较大的值,让连有足够的时间处于等待状态而不被过早关闭[^1]。 - **加大MySQL**:在Mysql安装文件的`my.ini`文件中,找到`max-connections=100`,将这个值根据项目实际情况调大,如调整为1000等,以满足Java应用对数据库量的需求[^1]。 ```java // 示例代码,使用try-with-resources确保连正确关闭 try (Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM your_table")) { while (resultSet.next()) { // 处理结果集 } } catch (SQLException e) { e.printStackTrace(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值