我遇到了以下错误:
打开的文件过多 (24)
经过大量研究,我们发现打开文件状态确实显示打开的文件数,但当此数字低于打开文件限制设置?这怎么可能呢?
我们正在使用表打开缓存设置,在阅读了 MySQL 文档中关于 table_open_cache 以及 MySQL 如何打开和关闭表的内容后,我们开始认为这是因为状态计数 open_files 没有计算进入的打开的表表打开缓存,但不确定。
关于这是如何实现的,有任何明确的答案吗?
答案1
当前版本的 Amazon Linux AMI 使用 systemd。如果您使用的是 systemd,则您设置的任何内容/etc/security/limits.conf
都将被 systemd 忽略。
找到适用于您的 MySQL 版本的 .service 文件并更新它。例如:
/usr/lib/systemd/system/mysqld.service
在该Service
部分下添加以下内容:
[Service]
LimitNOFILE=4096
将 4096 更改为您需要的限制。
更新该文件后重新加载 systemd 配置:
systemctl daemon-reload
然后重新启动mysql服务器。
答案2
运行以下命令查看打开文件限制:
mysql> select @@max_open_files ;
从系统方面来看:
#sudo -u mysql bash
$ulimit -Sn
$ulimit -Hn
在你的 my.cnf 中添加以下行:
open-files-limit = 4096
检查 /etc/security/limits.conf 中是否有 mysql 的字符串,并在需要时添加:
# echo "mysql soft nofile 4096" >> /etc/security/limits.conf
# echo "mysql hard nofile 4096" >> /etc/security/limits.conf
然后重新启动mysql服务器将值更改为您需要的值