在 mysql 5.5 中更改打开文件限制

在 mysql 5.5 中更改打开文件限制

我在 Ubuntu 12.04 上运行 mysql 5.5 时遇到 open-files-limit 参数的问题。

我最近注意到由于 1024 限制而导致的一些问题,实际上主系统限制设置为 1024,因此我使用以下内容修改了 /etc/security/limits.conf:

* soft nofile 32000
* hard nofile 32000
root soft nofile 32000
root hard nofile 32000

之后,我检查了 root 和 mysql 用户的 ulimit 值,都返回了新值:32000,所以我认为更改已经完成。

我还更改了 my.cnf 文件中的值,将 open-files-limit 设置为 24000,如下所示:

open-files-limit    = 24000

现在出现了奇怪的部分,当我重新启动 mysql 服务并检查 open_files_limit 变量时,它返回它仍然设置为 1024,所以我遇到了与之前相同的问题(显然),我尝试在 my.cnf 配置文件中使用 open-files-limit 而不是 open_files_limit,结果相同,但是如果我覆盖服务命令来启动服务并仅使用 mysqld 启动(没有附加参数),服务启动并且当我检查参数时它返回 32000...我不知道它从哪里获取该值,因为它没有在 my.cnf 中设置并且它没有通过命令行给出,至少对我自己来说不是。

关于为什么它不起作用以及如何以正常方式解决它(通过服务启动它......)有什么想法吗?

答案1

我终于找到了问题所在,似乎 upstart 没有使用 /etc/security/limits.conf 中定义的参数,所以当我通过服务命令启动 mysql 时(因此,在 upstart 下),它会覆盖那些定义的限制并使用默认值 1024。

解决方法是修改定义 upstart 服务的 mysql.conf 文件,它位于 /etc/init/mysql.conf,并在 prestart 块之前添加以下几行:

# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000

第一个值定义软限制,另一个值定义硬限制,一旦添加这些行,服务就会按预期应用 my.conf 文件中定义的值工作。

此限制应适用于在 /etc/init 中定义的每个 upstart 服务,因此如果任何服务在打开文件限制方面有同样的问题,则此解决方案也应该有效。

相关内容