【问题标题】:Could not increase number of max_open_files to more than 4096 (request: 4214)无法将 max_open_files 的数量增加到超过 4096(请求:4214)
【发布时间】:2026-01-12 12:35:02
【问题描述】:

我在 Linux Debian 9(stretch) 上有 MariaDB + Nginx。 安装 MariaDB 并尝试启动它后,我收到错误消息: [Warning] Could not increase number of max_open_files to more than 4096 (request: 4214)。 所以我用谷歌搜索它,它告诉我应该将/etc/systemd/system/mysql.service 中的LimiNOFILE 更改为10000。我做到了,做了守护进程重新加载,它完全没有做任何事情。我仍然收到相同的错误消息。我尝试重新安装 MariaDB,但这也无济于事。我还在文件的最后添加了LimitMEMLOCK=10000,这并没有改变任何东西。

完整的追溯:

Link

提前谢谢你

【问题讨论】:

  • 您的系统中可以有更多的 LimiNOFILE 参见haydenjames.io/…
  • @nbk 是的,我已经检查过该网站,只有 /etc/systemd/system/mysqld.service 向我展示了一些东西。

标签: mysql linux mariadb


【解决方案1】:

我通过重新安装 MariaDB 解决了这个问题

$ sudo apt-get purge mariadb-server

您应该检查它是否仍在系统上:

$ sudo dpkg -l | grep mariadb

如果是,请执行:

$ sudo apt-get purge mariadb-common

但在此之前,我通过htop 删除了与 MariaDB/MySQL 相关的所有内容。 然后是安装它的标准程序:

$ sudo apt 更新

$ sudo apt install mariadb-server

$ sudo mysql_secure_installation

【讨论】:

  • 很好的答案!我的 mysql 服务器无法启动。按照描述清除它并进行全新安装后,它恢复正常。
【解决方案2】:

仅在服务级别更改它是不够的

您还必须编辑

/etc/mysql/conf.d/limits.cnf

并在其中包含这些行

[mysqld]
open_files_limit = 10000

那么,

服务mysql重启

您可以在limits.conf和mysql.service中将数字增加到1000000

【讨论】:

  • 感谢您的回复。文件 /etc/mysql/conf.d/limits.cnf 是空的...我还应该添加它吗?
  • 所以不是系统你检查了my.cnf,如果我的帖子里有这样的一行?
  • 这些是文件夹/etc/mysql/conf.d/ 中唯一的文件,它们是:mysql.cnfmysqldump.cnf mysql.cnf 仅有这一行:[mysql] 所以我将其更改为:[mysqld] open_files_limit = 10000但这无济于事。我仍然收到错误...
【解决方案3】:

openfile_files_limits这样的服务器设置无效,如果操作系统限制打开文件的数量,总是会导致错误。由于服务器默认以 mysql 用户身份运行,因此无法更改系统值(服务器中也没有更改这些限制的代码)。

Linux系统中打开文件的默认值是1024,可以通过

$> ulimit -n
1024

所以如果你有 root 权限或者你在 sudo'ers 列表中,只需增加这个值。 man ulimit 将为您提供更多信息。

【讨论】:

  • 是的,我确实拥有服务器的 root 权限,但是当我执行 man ulimit 时,输出为 No manual entry for ulimit
【解决方案4】:

只是注意到我的解决方案是修复 tmpdir 变量中的错误配置。它被设置为/mysqltmp(可能是因为/tmp 非常小)。我修复了它:

mkdir -p /mysqltmp
chown mysql.mysql /mysqltmp

我猜测将tmpdir 设置为不存在或权限错误的目录会触发此消息。

【讨论】:

    【解决方案5】:

    这可能是因为 SystemD 配置文件为服务设置的限制。如果是这种情况,您可以通过编辑 /usr/lib/systemd/system/mariadb.service 并将其增加到请求的值来解决它:

    LimitNOFILE=4214
    

    ...或者你想要的任何值:

    LimitNOFILE=100000
    

    open_files_limit 如果操作系统或 init 系统对用户或服务有下限,则不会有任何影响。

    【讨论】:

    • 这个文件对我来说不存在