遇到mysql超出最大連接數,相信不少人第一反應就是查看mysql進程,看有沒有慢查詢,當然這個做法是完全正確的!
但是很多時候真正的問題不在這裡。
今天有遇到同樣的問題,一味查看mysql進程和慢查詢日志,無果。
後來老大提點了一下,查看一下nginx日志,發現有一兩個訪問執行時候比較長,然後使用top命令查看了一下服務器負載,驚了,居然超高!
最後發現原來有一台web分流主機掛了,導致另外幾台web主機負載增高,從而導致了php-fpm的執行效率降低。
那麼這跟mysql有什麼關系呢?原因很簡單,因為php執行時間過長,mysql連接遲遲未釋放,就會導致連接數過多出現。
最後總結:其實很多時候,一個問題的根本原因並不是那麼直接的呈現出來,需要自己去跟蹤。
老大有一句很實用的話:遇到問題先查日志(mysql、php、nginx等)
windows2003系統
增加默認MYSQL連接數的方法
方法一:進入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改為 max_connections=1000 服務裡重起MYSQL即可
方法二:MySQL的最大連接數默認是100客戶端登錄:mysql -uusername -ppassword
設置新的最大連接數為200:mysql> set GLOBAL max_connections=200
顯示當前運行的Query:mysql> show processlist
顯示當前狀態:mysql> show status
退出客戶端:mysql> exit
查看當前最大連接數:mysqladmin -uusername -ppassword variables
linux系統
以centos 4.4 下面的MySQL 5.0.33 手工編譯版本為例說明:
代碼如下 復制代碼vi /usr/local/MySQL/bin/MySQLd_safe
找到safe_MySQLd編輯它,找到MySQLd啟動的那兩行,在後面加上參數 :
代碼如下 復制代碼-O max_connections=1500
具體一點就是下面的位置:
用說明:
代碼如下 復制代碼 then $NOHUP_NICENESS $ledir/$MySQLD
$defaults --basedir=$MY_BASEDIR_VERSION
--datadir=$DATADIR $USER_OPTION
--pid-file=$pid_file
--skip-external-locking
-O max_connections=1500
>> $err_log 2>&1 else
eval "$NOHUP_NICENESS $ledir/$MySQLD
$defaults --basedir=$MY_BASEDIR_VERSION
--datadir=$DATADIR $USER_OPTION
--pid-file=$pid_file
--skip-external-locking $args
-O max_connections=1500 >>
$err_log 2>&1"
保存。
代碼如下 復制代碼 # service MySQLd restart
# /usr/local/MySQL/bin/MySQLadmin -uroot -p variables
輸入root數據庫賬號的密碼後可看到
max_connections 1500 即新改動已經生效。
還有一種方法,
修改原代碼:
解開MySQL的原代碼,進入裡面的sql目錄修改MySQLd.cc找到下面一行:
代碼如下 復制代碼 {"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) &max_connections,
(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,
0},
把它改為:
代碼如下 復制代碼 {"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) &max_connections,
(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,
0},
存盤退出,然後./configure ;make;make install可以獲得同樣的效果。以上的相關內容就是對修改MySQL最大連接數的3種方法的介紹,望你能有所收獲。