在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例 "提到,项目中新增几个数据库后,数据库最大连接数达到了默认的最大值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
权限过大是导致这个问题的原因。 3.奇葩的MySQL配置文件。
Linux系统/etc/my.cnf有下面这项配置。
因为第一次打开这个文件的时候,就有这项配置,我就觉得这个配置是合理的。
不但如此,我们启动MySQL的方式是 "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文件是不能被编辑的。