如果遇到如下错误:
这就是MySQL的文件描述符不够用了。
1、如何解决
第一步:设置OS参数(如果你有权限的话):
在文件末尾:/etc/security/limits.conf
添加如下内容:
#mysql hard nofile65535#mysql soft nofile65535
上面的配置,是OS限制各个用户能够打开的文件描述符限制(hard soft区别参看man ulimit),新增上面两行,表示mysql用户能够打开65535个文件描述符(可以使用lsof -u mysql|wc -l查看当前打开了多少个文件描述符)。
第二步:修改MySQL参数:
在MySQL配置文件my.cnf 中新增下面的行:
open_files_limit = 65535
innodb_open_files+65535
然后重启MySQL,就可以解决了
2、原因
查看官方文档:
操作系统允许mysqld打开的文件数 。此变量在运行时的值是系统允许的实际值,可能与您在服务器启动时指定的值不同。在MySQL无法更改打开文件数的系统上,该值为0。
有效 open_files_limit值是基于在系统启动时指定的值(如果有的话)和的值max_connections 和table_open_cache使用这些公式:1) 10 + max_connections + (table_open_cache * 2)2) max_connections * 5
3) operating system limit ifpositive4) ifoperating system limit is Infinity:
open_files_limit value specified at startup,5000 ifnone
服务器尝试使用这三个值中的最大值来获取文件描述符的数量。如果无法获得那么多描述符,则服务器会尝试获得系统允许的数量。
上面的办法一般就能解决问题了。不过在实践中发现,在my.cnf中设置的参数open_files_limit值是无效的,即MySQL启动后open_files_limit始终以OS的文件描述符为准。
无论如何,MySQL打开的文件描述符限制都是OS的文件描述符限制,和配置文件中open_files_limit的设置没有关系
查看进程打开文件最大限制:
cat /proc/sys/fs/file-max ###查看系统级别的最大限制
ulimit -n 查看用户级别的限制(一般是1024,阿里云和华为云这种云主机一般是65535)
文章链接:https://www.cnblogs.com/cjsblog/p/9367043.html
http://www.orczhou.com/index.php/2010/10/mysql-open-file-limit/