修改 MySQL 可打开文件数

Published on:
Tags: mysql

可打开文件数限制#

如果 MySQL 可打开的文件数值设置的过小,会出现 “too many open files” 的错误,这意味着一个进程已经打开了太多的文件(文件描述符),无法再打开新的文件了。

查看 MySQL 可打开文件数配置值

1
mysql> select @@open_files_limit;

查看某一个进程(MySQL进程)已经打开的文件数

1
ll /proc/pid/fd|wc -l

修改 MySQL open_files_limit 配置的值的两种方法:#

1.通过修改 MySQL 系统变量 max_connections 、 table_open_cache 或者 修改系统可打开最大文件描述符的数量 来修改 open_files_limit 的值#

MySQL 官方文档对这个字段的描述,open_files_limit 实际的取值会从下面四个值当中获取最大的。

  • 10 + max_connections + (table_open_cache * 2)
  • max_connections * 5
  • MySQL 8.0.19 and higher: The operating system limit.
  • Prior to MySQL 8.0.19:
    • The operating system limit if that limit is positive but not Infinity.
    • If the operating system limit is Infinity: open_files_limit value if specified at startup, 5000 if not.

通过修改 MySQL 系统变量 max_connections 、 table_open_cache 或者 修改系统可打开最大文件描述符的数量 来修改 open_files_limit 的值。

2. 修改 MySQL 的系统服务文件#

通过查看 MySQL 状态命令 service mysql status,查看MySQL的系统服务文件(MySQL systemd service file)。

mysql.service 文件的同级目录创建目录 mysql.service.d,并在目录里创建文件 limits.conf ,文件内容如下:

1
2
3
# /lib/systemd/system/mysql.service.d/limits.conf
[Service]
LimitNOFILE=20480

修改完后继续执行以下两条命令:

1
2
systemctl daemon-reload    # 重新加载配置文件
service mysql restart # 重启mysqld服务,使配置生效