# (六):設置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。
**小結**
在解決這個看似簡單的問題過程中,遇到了更多的問題。
耐心真的非常重要!
此外,認真看書,打好基礎,也是可以避免一些問題的。
幸好,有網友分享經驗,有好友同事“飛鳥”相助,總算是圓滿解決了。
自己也算是積累了不少經驗。
**反思**
“老鳥”與“菜鳥”的一個重要區別就是,“老鳥”有著豐富的實踐經驗,而“菜鳥”沒有。
很多問題,不親自遇到并解決一次,你根本就不知道這些莫名其妙的問題為什么會發生。
我不想一直作為“菜鳥”,希望早日成為“老鳥”,倘若是一只“年輕的老鳥”就更好了。
不但如此,還希望能夠及時總結這些經驗,供今日的和明日的菜鳥參考。
若干年之后,當回想起作為“菜鳥”的日子,亦能感到自豪。