您的位置:首页 > 数据库 > MySQL

怎么查看和修改 MySQL 的最大连接数?

2013-09-26 10:30 531 查看
使用 MySQL 数据库的站点,当访问连接数过多时,就会出现 "Too many connections" 的错误。出现这种错误有两种情况,一种是网站访问量实在太大,服务器已经负担不起,此时就应该考虑负载均衡或者其它减少服务器压力的办法。另一种情况就是 MySQL 的最大连接数设置得太小,当访问量稍大就出现连接过多的错误。

  MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看

mysql> show variables like 'max_connections';

此命令将得到类似以下的输出结果:

+-----------------+-------+

| Variable_name | Value |

+-----------------+-------+

| max_connections | 2000 |

+-----------------+-------+

1 row in set (0.00 sec)


  要对 mysql 的最大连接数进行修改,只需要在 my.cnf 配置文件里面修改 max_connections 的值,然后重启 mysql 就行。如果 my.ini 文件中没有找到 max_connections 条目,可自行添加以下条目

max_connections = 200




mysql max_connections
最大连接数,用户数


设置max_connections

(这个办法在debian+mysql Ver 12.22 Distrib 4.0.22, for pc-linux (i386)

里实验了)

设置办法是在my.cnf文件中,添加下面的最后红色的一行:

[mysqld]

port=3306

#socket=MySQL

skip-locking

set-variable = key_buffer=16K

set-variable = max_allowed_packet=1M

set-variable = thread_stack=64K

set-variable = table_cache=4

set-variable = sort_buffer=64K

set-variable = net_buffer_length=2K

set-variable = max_connections=32000

(在院里的DELL机器mysql4.0里的语法不同

max_connecionts=2000

直接这么写就好了



修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。

注意:

1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;

2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;

3、添加了最大允许连接数,对系统消耗增加不大。

4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。



用mysqld --help 可以查看到max_connections 变量。 

或者 mysql -uuser -p

后mysql>show variables;

也会看到max_connections 。

下面是修改张老师 的redhat9的方法:

先是mysql -uw01f -p

mysql>show variables;

看到max_connections 为100

mysql>exit;

vi /etc/my.cnf

[mysqld]

set-variable=max_connections=250 #加入这些内容

:wq

/etc/init.d/mysqld restart

好了,行了。

下面的是抄的,我用不了

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可以获得同样的效果。

查看Mysql连接数

登录到mysql客户端后,使用status命令也能获得thread连接数以及当前连接的id

或者用

Mysql代码

show full processlist

看一下所有连接进程,注意查看进程等待时间以及所处状态 是否locked

如果进程过多,就把进程打印下来,然后查看

Mysql代码

mysql -e 'show full processlist;' > 111

查找非locked的进程,一般就是当前执行中卡死,导致后面的进程排队的原因。

另外,修改mysql最大连接数的方法:

编辑MySQL(和PHP搭配之最佳组合)配置文件 

my.cnf 或者是 my.ini

在[MySQL(和PHP搭配之最佳组合)d]配置段添加:

Apache代码

max_connections = 1000

保存,重启MySQL(和PHP搭配之最佳组合)服务。

然后用命令:

MySQL(和PHP搭配之最佳组合)admin -uroot -p variables

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

Linux代码

| max_connections | 1000 |

修改MySQL默认最大连接数

MYSQL数据库安装完成后,默认

最大连接数是100,一般流量稍微大一点的论坛或网站

这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个

方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MYSQL即可

方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword

设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

显示当前运行的Query:mysql> show processlist

显示当前状态:mysql> show status

退出客户端:mysql> exit

查看当前最大连接数:mysqladmin -uusername -ppassword variables

方法三:以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可以获得同样的效果。

1、查看当前所有连接的详细资料:

mysqladmin -uroot -proot processlist

D:\MySQL\bin>mysqladmin -uroot -proot processlist

+-----+------+----------------+---------+---------+------+-------+------------------+

| Id | User | Host | db | Command | Time | State | Info |

+-----+------+----------------+---------+---------+------+-------+------------------+

| 591 | root | localhost:3544 | bbs | Sleep | 25 | | |

| 701 | root | localhost:3761 | | uery | 0 | | show processlist |

+-----+------+----------------+---------+---------+------+-------+------------------+

2、只查看当前连接数(Threads就是连接数.):

mysqladmin -uroot -proot status

D:\MySQL\bin>mysqladmin -uroot -proot status

Uptime: 2102 Threads: 3 Questions: 15531 Slow queries: 0 Opens: 0 Flush tab

les: 1 Open tables: 61 Queries per second avg: 7.389

3、修改mysql最大连接数:

打开my.ini,修改max_connections=100(默认为100)。

命令: show processlist;

如果是root帐号,你能看到所有用户的当前连接。如果是其它普通帐号,只能看到自己占用的连接。

show processlist;只列出前100条,如果想全列出请使用show
full processlist;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: