標籤:配置 open 運行 解決方案 mysql pid 永久 return 原來 flush
mysql 預設連結數是100個 最大是16384。
原則:想盡一切辦法不重啟導致原因:
出現這種錯誤明顯就是 mysql_connect 之後忘記 mysql_close;
當大量的connect之後,就會出現Too many connections的錯誤,mysql預設的串連為100個,而什麼情況下會出現這種錯誤呢?
正常的mysql_connect 之後調用 mysql_close()關閉串連
但在串連錯誤時,會者mysql_real_query()出現錯誤退出時,可能忘記mysql_close();
所以在程式return 之前一定要判斷是否close(),最穩妥的方法就是在寫任何函數時都只有一個出口!
查看連結:查看當前串連數
./mysqladmin -uroot -p1234.com statusUptime: 1370150 Threads: 1 (當前串連數) Questions: 79 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.000
./mysql -uroot -p1234.com -e ‘show status‘ | grep -i Threads Delayed_insert_threads 0Slow_launch_threads 0Threads_cached 1Threads_connected 1Threads_created 2Threads_running 1 ##(當前串連數)
mysql> show status like ‘Threads%‘;+-------------------+-------+| Variable_name | Value |+-------------------+-------+| Threads_cached | 1 || Threads_connected | 1 || Threads_created | 2 || Threads_running | 1 | ###當前串連數+-------------------+-------+4 rows in set (0.00 sec)
查看最大串連數
[[email protected] bin]# ./mysql -uroot -p1234.com -e ‘show variables‘ | grep max_connectionsmax_connections 500
mysql> show global variables like ‘max_conn%‘;+--------------------+-------+| Variable_name | Value |+--------------------+-------+| max_connect_errors | 10 || max_connections | 500 |## 最大串連數+--------------------+-------+2 rows in set (0.00 sec)
解決方案:想盡一切辦法不重啟 這種情況一般是進不去資料庫了,修改設定檔得重啟,對於線上的資料庫風險太大了,進入資料庫用sql修改,現在是進不去了
方法1:使用gdb工具 不用進入資料庫,不用重啟資料庫 方法如下:
[[email protected] bin]# gdb -p $(cat /data/mydata/xxx.pid) -ex "set max_connections=500" -batch [New LWP 7667][New LWP 4816][New LWP 341][New LWP 338][New LWP 337][New LWP 336][New LWP 335][New LWP 331][New LWP 330][New LWP 329][New LWP 328][New LWP 327][New LWP 326][New LWP 325][New LWP 324][New LWP 323][New LWP 322][Thread debugging using libthread_db enabled]0x00000035654df1b3 in poll () from /lib64/libc.so.6
查看mysql pid位置的方法 在設定檔 my.cnf裡尋找用 ps -ef | grep mysql 尋找
mysql> show variables like ‘%pid%‘;+---------------+----------------------+| Variable_name | Value |+---------------+----------------------+| pid_file | /data/mydata/xxx.pid |+---------------+----------------------+1 row in set (0.00 sec)
修改完畢後 ,嘗試重新進入資料庫,並查看連結數
這種方法設定後,只是暫時的,資料庫重啟後,會變為原來的數值,要想永久,設定完後修改設定檔my.cnf
方法2 前提是還可以進入資料庫進入資料庫
設定新的最大串連數為200:mysql> set GLOBAL max_connections=200
顯示當前啟動並執行Query:mysql> show processlist
顯示目前狀態:mysql> show status
退出用戶端:mysql> exit
這種方法設定後,只是暫時的,資料庫重啟後,會變為原來的數值,要想永久,設定完後修改設定檔my.cnf
方法3:需要重啟資料庫修改 my.conf
max_connection = 1000;
類比mysql串連數過多 指令碼內容
#!/bin/bashset j=2while true do let "j=j+1"/usr/local/mysql/bin/mysqlslap -a -c 500 -i 10 -uroot -p1234.comdone
運行此指令碼 ,然後導致mysql串連數過多無法串連,多試幾次確定無法串連 再用gdb工具測試
mysql串連數過多 解決方案