Mysql 错误 Errcode: 24 - Too many open files

对mysql 建立复合分区(按月建立一级分区,再按天建立二级分区 ),没有查询条件,查询表数据时,爆出如下错误:err Out of resources when opening file './viaresult1/fr_facerecogresult#P#p201906#SP#p201906sp11.MYD' (Errcode: 24 - Too many open files)。原因:打开文件数量太多,超出了open_files_limit这个参数的限制,在一个表中有多个分区的时候,这种情况更容易发生

1 查看mysql打开的文件

[root@localhost mycat]# ps -le |grep mysqld     #查看mysql的进程号
[root@localhost mycat]# lsof -p 10088  |wc -l    #查看mysql打开的文件数量
4998
[root@localhost mycat]# lsof -p 10088               #查看mysql 打开的所有文件

2 查看Mysql open_files_limit 限制

show variables like 'open_files_limit%'   
5000

由此基本可以断定是mysql open_files_limit限制的原因造成
    

my.cnf里如果配置了open_files_limit,则open_files_limit最后取值为 配置文件 open_files_limit,max_connections*5, wanted_files= 10+max_connections+table_cache_size*2 三者中的最大值。

如果my.cnf里如果没配置open_files_limit,则open_files_limit最后取值为max_connections*5,10+max_connections+table_cache_size*2,ulimit -n(查看linux 运行进程打开的最大文件数)中的最大者

修改open_files_limit参数
在网上找了很多资料,有的说直接在/etc/mysql/mysql.conf.d/mysqld.cnf文件中的[mysqld]部分添加open_files_limit参数,比如open_files_limit=102400,并且在/etc/security/limits.conf 添加mysql soft nofile 102400和mysql hard nofile 102400这两个参数然后重启MySQL,但是发现不能生效。


以下方法可用:


在文件/etc/systemd/system/multi-user.target.wants/mysqld.service(也有可能是/etc/systemd/system/mysqld.service这个文件)最后添加LimitNOFILE=102400

然后执行systemctl daemon-reload,接着再重启mysql服务sudo service mysql restart,可以看到已经修改成功了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值