如何优化Linux下MySQL 5.0【涉及discuz论坛数据库too many connections问题】

第一种解决方案收集(推荐) /
mysql 5.0的默认最大连接数为100, 对于大负载量的并发需求可能不够,这时你可以修改mysql的最大连接。
查看mysql的当前最大连接数:
mysqladmin -uroot -ppassword variables | grep max_connections
或者
mysql> SHOW GLOBAL VARIABLES WHERE Variable_name='max_connections';

修改方法有如下几种

1.
mysql> SET GLOBAL max_connections=1000;

修改后会立即生效,不需要重启mysql服务,但是重启后会失效。

2.修改/etc/my.cnf,
在[mysqld] 下面添加:
max_connections=1000

修改后需要重启mysql服务才会重效。
结合第1和第2种方法,可以实现修改立即生效,以后重启也会有效。

3.修改/usr/bin/mysqld_safe
将下面的内容
if test -z "$args"
then
$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking >> $err_log 2>&1
else
eval "$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking $args >> $err_log 2>&1"

改为(添加红色字体的内容):
if test -z "$args"
then
$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking   -O max_connections=1000 >> $err_log 2>&1
else
eval "$NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR $USER_OPTION --pid-file=$pid_file --skip-external-locking $args -O max_connections=1000 >> $err_log 2>&1"

修改后重启mysql服务后有效。

建议用第一和第二种方法进行修改。

******************************************************************
/************************mssql连接数修改********************/
whereis my.cnf

max_connections=1000   '数据库最大连接数
vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
max_connections=1000
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


///
whereis safe_mysqld
vi /usr/local/mysql/bin/mysqld_safe
vi /usr/bin/mysqld_safe
max_connections

root
查看进程
ps -ef
进入mysql命令
mysql -uroot -p
查看mysql参数
show variables;   //查看mysql设置
show status;     //查看当前数据库状态,如查看当前连接数 Threads-connection

重启
redoot
*********************************************************************************************************
*****************************让它快速释放响应时间长的连接*************************************

  如何优化Linux下MySQL 5.0 - worm128 - Winlone技术博客 
上图的查看命令:
mysql -uroot -p  '进入mysql命令窗口
show status;  '查看当前数据库状态
show variables;  '查看数据库设置
【如果max_connections设置了300,那么这里的Threads_connected就为301,超出了mysql的最大连接,就会报错"Too many connection"】

interactive_timeout 需在mysql_connect()设置CLIENT_INTERACTIVE选项后起作用,并被赋值为wait_timeout;
mysql>set wait_timeout = 10; 对当前交互链接有效;
mysql>set interactive_timeout = 10; 对后续起的交互链接有效;

该超时时间单位是秒,从变量从上次SQL执行后算起;当前空闲若超过该时间,则也会被强制断开
-----------------------------------------------------------------------------------------------

// 修改方法一 ///
错误编号:1040

问题分析:

连接数超过了 mysql教程 设置的值,与 max_connections 和 wait_timeout  都有关系。wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。


到c:windows目录下(windows 2000下为winnt),找到my.ini文件打开后。

在my.ini文件中[mysqld]下添加
set-variable = max_connections= 10000

然后save modification 保存修改。
最后把mysql重新启动一次即可。

 
解决方法:

1、虚拟主机用户请联系空间商优化 mysql 服务器的配置;

2、独立主机用户请联系服务器管理员优化 mysql 服务器的配置,可参考:

修改 mysql 配置文件(windows下为 my.ini, linux下为 my.cnf )中的参数:

max_connections= 1000
wait_timeout = 5

mysql 5.1以上的修改文件

you can increase this value in main config file (e.g., /etc/my.cnf) using this syntax:

[mysqld]
set-variable=max_connections=250
wait_timeout = 55 代码多长时间自放弃此连接

更多详细内容请查看:http://www.111cn.net/database/mysql/Too-many-connections.htm

// 修改方法二 ///
这 段时间服务器崩溃2次,一直没有找到原因,今天看到论坛发出的错误信息邮件,想起可能是mysql的默认连接数引起的问题,一查果然,老天,默认 连接数才100, 怎么够呀,在网上找了半天资料,有说修改my.cnf的,有说修改safe_mysqld,试了,前者无用,
后者文件找不到:)原来是以前的版本跟现在的版本有所不同。

言归正传,我以centos 4.4 下面的mysql 5.0.33 手工编译版本为例说明:

vi /usr/local/mysql/bin/mysqld_safe

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

-O max_connections=1500

具体一点就是下面的位置:

用红字特别说明:

then $NOHUP_NICENESS $ledir/$MYSQLD

$defaults --basedir=$MY_BASEDIR_VERSION

--datadir=$DATADIR $USER_OPTION

--pid-file=$pid_file

--skip-external-locking

-O max_connections=1500

>> $err_log 2>&1 else

eval "$NOHUP_NICENESS $ledir/$MYSQLD

$defaults --basedir=$MY_BASEDIR_VERSION

--datadir=$DATADIR $USER_OPTION

--pid-file=$pid_file

--skip-external-locking $args

-O max_connections=1500 >>

$err_log 2>&1"

保存。

# service mysqld restart

# /usr/local/mysql/bin/mysqladmin -uroot -p variables

输入root数据库账号的密码后可看到

max_connections 1500 即新改动已经生效。

还有一种方法:

修改原代码:

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

{"max_connections", OPT_MAX_CONNECTIONS,

"The number of simultaneous clients allowed.", (gptr*) &max_connections,

(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,

0},

把它改为:

{"max_connections", OPT_MAX_CONNECTIONS,

"The number of simultaneous clients allowed.", (gptr*) &max_connections,

(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,

0},

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值