MYSQL数据库出现错误,从错误日志中发现以下类似的提示,
/usr/sbin/mysqld: Can’t open file: ‘/database/table.frm'(errno: 24)
查看了对应表文件的权限及拥有组,确信没有问题。
根据错误代码errno:24 得知,该错误是指数据库打开了大量的文件,已超出系统本身允许打开的文件数量限制,因此导致被锁定。
通过登录
mysql -uroot -p密码
执行以下SQL命令
SHOW VARIABLES LIKE 'open%';
发现允许MYSQL可能允许的open_files_limit 数为1024,该值为默认值。
而事实上,我们通过ulimit -n命令,能发现系统本身允许打开的文件数量的值也是1024
解决方法
我们需要更改两项内容,来完成设置允许打开的文件数量大小的值的更改,并且,系统允许打开的文件数量的值起到先决作用,因为mysql允许打开的文件数量的值是不能大于系统的,而只能是小于或等于。
1:更改系统句柄
vi /etc/security/limits.conf
在对应处加上例如
* - nofile 10000
该值为系统允许的文件句柄打开数量总开关,因此该值的大小决定了例如php-fpm,apache,nginx,mysql等其它服务能够同时打开句柄的数量值。
本项修改需要重新登录SSH,再执行以下命令,才能看到是否生效。
ulimit -n
2: 更改MYSQL允许打开的文件数量值
打开vi /etc/my.cnf文件,在[mysqld]标签段中添加一行:
open_files_limit = 10000
然后重启mysql