https://dev.mysql.com/doc/refman/5.6/en/table-cache.html
其中指出: “table_open_cache 和 max_connections 系统变量会影响服务器保持打开的最大文件数。如果您增加其中一个或两个值,您可能会遇到操作系统对每个进程打开文件描述符的数量施加的限制。许多操作系统允许您增加打开文件的限制,尽管方法因系统而异。请查阅您的操作系统文档,以确定是否可以增加限制以及如何增加限制。”
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_open_files_limit
其中指出:“操作系统允许 mysqld 打开的文件数。此变量在运行时的值是系统允许的实际值,可能与您在服务器启动时指定的值不同。在 MySQL 无法更改打开文件数的系统上,该值为 0。…有效的 open_files_limit 值基于系统启动时指定的值(如果有)以及 max_connections 和 table_open_cache的值. 服务器尝试使用这三个值中的最大值来获取文件描述符的数量。如果无法获取那么多描述符,服务器会尝试获取系统允许的尽可能多的描述符。”
mysql> SHOW GLOBAL STATUS LIKE 'Opened_tables'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Opened_tables | 43618 | +---------------+-------+ 1 row in set (0.00 sec) mysql>4、解决方案
如果 MySQL 以下警告开头:
Could not increase number of max_open_files to more than 10000 (request: 65535)
这意味着某个地方正在达到极限。让我们通过编辑任何配置的限制来解决这个问题。查看以下文件:
linux-2dk8:/ # find -name mysql.service ./etc/systemd/system/multi-user.target.wants/mysql.service find: File system loop detected; ‘./.snapshots/1/snapshot’ is part of the same file system loop as ‘.’. ./usr/lib/systemd/system/mysql.service ./sys/fs/cgroup/pids/system.slice/mysql.service ./sys/fs/cgroup/devices/system.slice/mysql.service ./sys/fs/cgroup/systemd/system.slice/mysql.service linux-2dk8:/ # cat /usr/lib/systemd/system/mysql.service
在mysql.service文件中查找配置
linux-2dk8:/ # cat /usr/lib/systemd/system/mysql.service
# Sets open_files_limit LimitNOFILE = 10000
请不要使用无穷大作为值;它默认为 65535。因此,如果您看到值 infinity,请将其替换为所需的限制。
修改之后的为:
# Sets open_files_limit LimitNOFILE = 65535
完成此操作后,您现在应该重新加载系统守护程序并重新启动 MySQL 服务:
systemctl daemon-reload systemctl restart mysql
通过 MySQL 命令行检查新限制。您可以使用以下查询,确保设置了新限制:
mysql> SHOW VARIABLES LIKE 'open_files_limit'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | open_files_limit | 65535 | +------------------+-------+ 1 row in set (0.01 sec)



