合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# (六):设置MySQL的最大连接数(max_connections) 在上一篇文章中"[一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例 ](http://blog.csdn.net/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。 **小结** 在解决这个看似简单的问题过程中,遇到了更多的问题。 耐心真的非常重要! 此外,认真看书,打好基础,也是可以避免一些问题的。 幸好,有网友分享经验,有好友同事“飞鸟”相助,总算是圆满解决了。 自己也算是积累了不少经验。 **反思** “老鸟”与“菜鸟”的一个重要区别就是,“老鸟”有着丰富的实践经验,而“菜鸟”没有。 很多问题,不亲自遇到并解决一次,你根本就不知道这些莫名其妙的问题为什么会发生。 我不想一直作为“菜鸟”,希望早日成为“老鸟”,倘若是一只“年轻的老鸟”就更好了。 不但如此,还希望能够及时总结这些经验,供今日的和明日的菜鸟参考。 若干年之后,当回想起作为“菜鸟”的日子,亦能感到自豪。