mysql maxconnections 最大值_(六):设置MySQL的最大连接数(max_connections)

当MySQL达到默认最大连接数100时,可通过设置`max_connections`解决TooManyConnections错误。设置方法包括使用`set GLOBAL max_connections`命令和修改配置文件`my.cnf`,注意权限和配置节的正确使用。遇到问题如配置被忽略、无法用localhost连接,可能涉及sock文件路径等。实践经验对于解决问题至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# (六):设置MySQL的最大连接数(max_connections)

在上一篇文章中"[一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例 ](http://blog.youkuaiyun.com/fansunion/article/details/13291301)"提到,项目中新增几个数据库后,数据库最大连接数达到了默认的最大值100。此时,如果再创建连接,就会报错(TooManyConnections)。

因此,需要手动设置MySQL的最大连接数(max_connections)。

就是这么一个简单的事,花了几个小时,查询很多资料,请教好友同事“飞鸟”,才搞定这个问题。

问题中存在问题,问题中存在陷阱,是这个问题的真实写照。

**1.设置MySQL的最大连接数。**

网友有如下经验,使用下面这个命令

~~~

set GLOBAL max_connections=1500;

~~~

**让人迷惑的是,提示“查询OK,0行受到影响”**

~~~

mysql>  set GLOBAL max_connections=1500;

Query OK, 0 rows affected (0.00 sec)

~~~

我误认为没有设置成功,并且通过“show status”这个命令也没有找到“max_connections”这个参数和值。

**实际查询确认方法**

~~~

mysql> show variables like '%max_connections%';

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

| Variable_name   | Value |

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

| max_connections | 1500  |

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

1 row in set (0.05 sec)

~~~

通过这种方法,MySQL重启后,仍然有效。

**2.MySQL配置文件总是被忽略。**

World-writable config file '/etc/my.cnf' is ignored

To fix this problem, use the following command to change file’s permissions

要修复该问题,使用以下命令更改该文件的权限。

chmod 644 /etc/my.cnf

[http://hi.baidu.com/perfect_song/item/32c25c0434dea110ebfe38bb](http://hi.baidu.com/perfect_song/item/32c25c0434dea110ebfe38bb)

权限过大是导致这个问题的原因。

**3.奇葩的MySQL配置文件。**

Linux系统/etc/my.cnf有下面这项配置。

因为第一次打开这个文件的时候,就有这项配置,我就觉得这个配置是合理的。

不但如此,我们启动MySQL的方式是 "mysqld_safe &",所以我理解成下面这个配置是

专门为这个命令配置的。

~~~

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/usr/local/mysql/mysqld.pid

datadir=/usr/local/mysql/var

socket=/usr/local/mysql/mysql.sock

max_connections=1000

~~~

实际上,上面这个配置根本是不合理的,真够坑的。

**正确的配置**

~~~

[mysqld]

datadir=/usr/local/mysql/var

socket=/usr/local/mysql/mysql.sock

pid-file=/usr/local/mysql/mysqld.pid

log-error=/var/log/mysqld.log

max_connections=1000

~~~

**疑惑**1:如果这个地方配置了“max_connections”,同时设置了“set GLOBAL max_connections=1500”,哪个会起作用呢?

**疑惑**2:今天在看MySQL5.1参考手册时,"一般情况,你不应编辑**mysqld_safe**脚本。相反,应使用命令行选项或my.cnf选项文件的[mysqld_safe]部分的选项来配置**mysqld_safe**。"貌似[mysqld_safe]是可以存在的。

**更多详细配置**

可以参考Windows下MySQL的配置参数, my.ini、 my-huge.ini、 my-large.ini。

**4.mysqld_safe正确的启动方式。**

"mysqld_safe & ","&"的作用是让MySQL服务在后台跑。这样,咱们仍然可以正常使用当前bash终端。

以前书上有讲过,忘记了。

基础不牢,地动山摇!

**5.无法使用localhost主机连接mysql。**

mysql -uroot -p123456

无法登录,提示"Can't connect to local MySQL server through socket '/tmp/mysql.sock'"

而 mysql -h 192.168.1.1 -uroot -p123456

可以登录。

最终,我们发现mysql.sock是手动创建的,而Linux的socket文件是不能被编辑的。

解决方案:给个链接。

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

或者mysql的配置文件socket=/usr/local/mysql/mysql.sock,不使用/tmp/mysql.sock。

**小结**

在解决这个看似简单的问题过程中,遇到了更多的问题。

耐心真的非常重要!

此外,认真看书,打好基础,也是可以避免一些问题的。

幸好,有网友分享经验,有好友同事“飞鸟”相助,总算是圆满解决了。

自己也算是积累了不少经验。

**反思**

“老鸟”与“菜鸟”的一个重要区别就是,“老鸟”有着丰富的实践经验,而“菜鸟”没有。

很多问题,不亲自遇到并解决一次,你根本就不知道这些莫名其妙的问题为什么会发生。

我不想一直作为“菜鸟”,希望早日成为“老鸟”,倘若是一只“年轻的老鸟”就更好了。

不但如此,还希望能够及时总结这些经验,供今日的和明日的菜鸟参考。

若干年之后,当回想起作为“菜鸟”的日子,亦能感到自豪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值