虛擬主機域名注冊-常見問題數據庫問題MySQL

MySQL Too many connections

出現這種錯誤明顯就是 mysql_connect 之后忘記 mysql_close;

當大量的connect之后,就會出現Too many connections的錯誤,mysql默認的連接為100個,而什么情況下會出現這種錯誤呢?

正常的mysql_connect 之后調用 mysql_close()關閉連接

但在連接錯誤時,會者mysql_real_query()出現錯誤退出時,可能忘記mysql_close();

所以在程序return 之前一定要判斷是否close(),最穩妥的方法就是在寫任何函數時都只有一個出口!

還有可以通過修改mysql配置文件來加大允許連接的數量!

有時你的服務器是經常出現這樣的錯誤呢:

錯誤信息如下:

Can not connect to MySQL server

Error: Too many connections

Errno.: 1040

Similar error report has beed dispatched to administrator before.

從官方文檔知道Linux上面編譯安裝的mysql默認的連接為100個

文檔:http://dev.mysql.com/doc/refman/5.0/en/too-many-connections.html

mysql官方告訴我們需要修改max_connections的值,那么我們怎么去修改呢?有兩種方法

1、修改配置文件文件

修改/etc/my.cnf這個文件,在[mysqld] 中新增max_connections=N,如果你沒有這個文件請從編譯源碼中的support-files文件夾中復制你所需要的*.cnf文件為到 /etc/my.cnf。我使用的是my-medium.cnf,中型服務器配置。例如我的[mysqld]的內容如下

[mysqld]

port = 3306

socket = /tmp/mysql.sock

skip-locking

key_buffer = 160M

max_allowed_packet = 1M

table_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

max_connections=1000

由于對mysql還不是很熟悉,所以很多參數沒有修改。哈哈。。

2、非使用mysqld腳本自動啟動的用戶。

修改$MYSQL_HOME/bin/mysqld_safe文件

例如:/usr/local/mysql/bin/mysqld_safe這個文件

grep -n ‘max_connection’ $MYSQL_HOME/bin/mysqld_safe

修改對應行號的max_connections參數值

MySQL提示“too many connections”的解決辦法

​今天生產服務器上的MySQL出現了一個不算太陌生的錯誤“Too many connections”。平常碰到這個問題,我基本上是修改/etc/my.cnf的max_connections參數,然后重啟數據庫。但

是生產服務器上數據庫又不能隨便重啟。

沒辦法,只好想辦法手動去釋放一些沒用的連接。

登陸到MySQL的提示符下,數據show processlist這個命令,可以得到所以連接到這個服務器上的MySQL連接:

mysql> show  processlist;

+---------+------+---------------------+---------+---------+------+-------+-------------------+

| Id      | User | Host                | db      | Command | Time | State | Info              |

+---------+------+---------------------+---------+---------+------+-------+-------------------+

| 1180421 | ur   | 202.103.96.68:49754 | test1   | Sleep   |    1 |       | NULL              |

| 1180427 | ur   | 202.103.96.68:55079 | test2   | Sleep   |    1 |       | NULL              |

| 1180429 | ur   | 202.103.96.68:55187 | testdba | Sleep   |    0 |       | NULL              |

| 1180431 | ur   | 202.103.96.68:55704 | testdba | Sleep   |    0 |       | NULL              |

| 1180437 | ur   | 202.103.96.68:32825 | test1   | Sleep   |    1 |       | NULL              |

| 1180469 | ur   | 202.103.96.68:58073 | testdba | Sleep   |    0 |       | NULL              |

| 1180472 | ur   | 83.136.93.131:47613 | test2   | Sleep   |    8 |       | NULL              |

| 1180475 | root | localhost           | NULL    | Query   |    0 | NULL  | show  PROCESSLIST |

+---------+------+---------------------+---------+---------+------+-------+-------------------+

8 rows in set (0.00 sec)

mysql>

然后,你可以看到像上面這樣的MySQL數據連接列表,而且每一個都會有一個進程ID號(在上表的第一列)。我們只要輸入這樣的命令:

mysql> kill 1180421;

Query OK, 0 rows affected (0.00 sec)

mysql>

其中1180421為你在進程列表里找到并且要殺掉的進程號。

產生這種問題的原因是:

連接數超過了 MySQL 設置的值,與 max_connections 和 wait_timeout  都有關系。wait_timeout 的值越大,連接的空閑等待就越長,這樣就會造成當前連接數越大。

解決方法:

修改MySQL配置文件/etc/my.cnf,設置成max_connections=1000,wait_timeout=5。如果沒有此項設置可以自行添加,修改后重啟MySQL服務即可。要不經常性報此錯誤,則要對服務器作整體性能優化



來源:
閱讀:1417
日期:2017-06-21

【 字體: 】 
上一篇:radio 點擊圖片選中
下一篇:php設置session cookie有效期的問題
  >> 相關文章
 
發表評論

字數0
請輸入驗證碼:


  • 尊重網上道德,遵守中華人民共和國的各項有關法律法規
  • 承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
  • 本站管理人員有權保留或刪除其管轄留言中的任意內容
  • 本站有權在網站內轉載或引用您的評論
  • 參與本評論即表明您已經閱讀并接受上述條款
網友評論
沒有相關評論。
海南飞鱼游戏技巧 福彩大小单双选择技巧 甘肃省新11选5开奖 优家电商开网店赚钱吗 pp电子游戏大奖图 医蝶谷怎么赚钱 安卓捕鸟达人hd 百变王牌下载软件 开个超市能赚钱不 南方双彩网大全 福建十一选五基本走势图 安徽11选五走势一定牛 厦门股票配资 丁紫 河南体彩泳坛夺金 365里面的取消提款 排列三免费计划 山西快乐10分走势福彩