mysql5.7出現大量too many connections及too many open files錯誤,且配置最大連接數未生效


    too many connections是由於mysql配置中連接數過少,不足以支撐當前的並發數,too many open files是由於mysql open_files_limit的值大小不夠。

    最開始mysql日志出現的錯誤為too many connections,mysql配置文件已經配置了最大連接數max_connections=2000,登錄到mysql中,查看mysql連接收:show processlist;  (查看詳細執行信息使用:show full processlist;),發現線程數只有500多,並沒有達到配置文件中的最大配置,登錄mysql查看其生效的最大連接數及mysql open_files_limit

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 214   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%open_files_limit%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)

配置文件中配置的連接數2000未生效

linux一切皆文件,查看linux open files

[root@localhost work]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7739
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7739
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

open files的大小只有1024,需要調大一些,設置為65535

vim /etc/security/limits.conf

添加

* soft  nofile 65535
* hard  nofile 65535

重新打開ssh窗口,登錄,查看設置結果

[root@localhost ~]# ulimit -n
65535

使mysql配置生效有如下兩種方式

1、登錄mysql,查看連接數,沒有變化,還是214,在mysql開機啟動服務文件中添加如下

vim /usr/lib/systemd/system/mysql.service

LimitNOFILE=infinity
LimitMEMLOCK=infinity

重啟mysql

systemctl daemon-reload
systemctl restart mysql

查看最大連接數連接數及mysql open_files_limit,可以發現open_files_limit的大小被設置為與unlimit -n大小一致

mysql> show variables like '%open_files_limit%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65536 |
+------------------+-------+
1 row in set (0.00 sec)

mysql>  show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 2000  |
+-----------------+-------+
1 row in set (0.00 sec)

2、如果未使用開機啟動,使用mysql_safe也可以使配置生效,但open_files_limit的大小被設置為了10000

mysql> show variables like '%open_files_limit%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 10000 |
+------------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 2000  |
+-----------------+-------+
1 row in set (0.00 sec)

 

總結:

    調大linux系統open files

    設置mysql max_connections 

    1、如果使用開機啟動,則在service文件中添加

LimitNOFILE=infinity
LimitMEMLOCK=infinity
使配置生效,並重新啟動
systemctl daemon-reload
systemctl restart mysql
2、未使用開機啟動,使用mysql_safe啟動(open_files_limit被設置為10000,如果不夠大,可以在配置文件my.cnf中修改)
mysqld_safe --defaults-file=/etc/my.cnf &

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM