在上一篇文章中""提到,项目中新增几个数据库后,数据库最大连接数达到了默认的最大值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
权限过大是导致这个问题的原因。
3.奇葩的MySQL配置文件。
Linux系统/etc/my.cnf有下面这项配置。
因为第一次打开这个文件的时候,就有这项配置,我就觉得这个配置是合理的。 不但如此,我们启动MySQL的方式是 "mysqld_safe &",所以我理解成下面这个配置是 专门为这个命令配置的。 [mysqld_safe]log-error=/var/log/mysqld.logpid-file=/usr/local/mysql/mysqld.piddatadir=/usr/local/mysql/varsocket=/usr/local/mysql/mysql.sockmax_connections=1000实际上,上面这个配置根本是不合理的,真够坑的。
正确的配置
[mysqld]
datadir=/usr/local/mysql/var
socket=/usr/local/mysql/mysql.sockpid-file=/usr/local/mysql/mysqld.pidlog-error=/var/log/mysqld.logmax_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。
小结
在解决这个看似简单的问题过程中,遇到了更多的问题。
耐心真的非常重要!
此外,认真看书,打好基础,也是可以避免一些问题的。
幸好,有网友分享经验,有好友同事“飞鸟”相助,总算是圆满解决了。
自己也算是积累了不少经验。
反思
“老鸟”与“菜鸟”的一个重要区别就是,“老鸟”有着丰富的实践经验,而“菜鸟”没有。
很多问题,不亲自遇到并解决一次,你根本就不知道这些莫名其妙的问题为什么会发生。
我不想一直作为“菜鸟”,希望早日成为“老鸟”,倘若是一只“年轻的老鸟”就更好了。
不但如此,还希望能够及时总结这些经验,供今日的和明日的菜鸟参考。
若干年之后,当回想起作为“菜鸟”的日子,亦能感到自豪。
参考资料相关阅读
原文参见: (小雷网-FansUnion.cn)