MySQL Too Many Connections 提高最大鏈接數 max_connections 設置

MySQL設置上有一個max_connections參數,預設的默認值為「151」。當MySQL需要中高的使用量時,默認值是不夠用的,必須提高max_connections這個配置參數,如果沒有提高的情況下又超出這個預設值的使用數量,就會輸出「too many connections」錯誤。但max_connections這個配置數值不可以任意提高的,如果設置的數值超出伺服器資源,在實際運行上遇到很多用戶連接時,必然會遇到不可預期的問題。

但在 CentOS 7 中,把 max_connections 設置成1000,發現會有一種情況,max_connections 的數值會顯示「214」,為甚麼呢?

因為MySQL每開啟一個連線會開啟一些檔案,如果MySQL發現系統的開啟數量限制 open file 太小,不夠應付 max_connections 數量的設定,便會自動降低。所以,只要把這個數值同一時間提高就可以了。

提高 open files limit,需要分別設置系統的 ulimit 和 MySQL 啓動參數這兩個地方。

修改 ulimit:

  1. 查看系統的 ulimit 配置
    # ulimit -a | grep "open files"
  2. 修改配置檔
    # vi /etc/security/limits.conf

    加入配置項,只針對mysql這個用戶

    mysql hard nofile 10000
    mysql soft nofile 10000
  3. 需要重啓伺服器讓其配置生效

修改 MySQL 啓動參數:

  1. 修改啓動檔
    # vi /lib/systemd/system/mysql.service

    在 [Service] 區域,加入配置參數

    LimitNOFILE=10000
  2. 由於改動了mysql.service,需要先執行 systemctl daemon-reload,再執行重啓
    # systemctl daemon-reload
    # systemctl restart mysql

修改完成後,可以進入mysql確認:

  1. 登入 MySQL
    # mysql -u root -p
  2. 執行查閱設置的指令
    mysql> show global variables like '%open_files_limit%';
    mysql> show global variables like '%max_connections%';

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料