我在使用open-files-limit参数在Ubuntu 12.04上运行mysql 5.5时遇到了问题。
我最近注意到一些问题,由于1024限制,实际上主系统限制被设置为1024,所以我修改了/etc/security/limits.conf文件,内容如下:
* soft nofile 32000 * hard nofile 32000 root soft nofile 32000 root hard nofile 32000
之后,我检查root的ulimit值,甚至是mysql用户,都返回了新的值:32000,所以我认为已经做了更改。
我还更改了my.cnf文件的值,将open-files-limit设置为24000,如下所示:
open-files-limit = 24000
现在来奇怪的是,当我重新启动mysql服务,并检查open_files_limitvariables,它返回,它仍然设置为1024,所以我有同样的问题,以前(显然),我试图使用打开文件限制而不是在my.cnfconfiguration文件中的open_files_limit,相同的结果,但如果我重写服务命令启动服务,并启动只使用mysqld(没有额外的参数),服务启动,当我检查参数,它返回32000 …我不知道它从哪里获得这个值,因为它不是在my.cnf中设置的,至less不是通过命令行给出的。
任何想法,为什么它不工作的变化,以及如何以正常的方式解决它(通过服务启动…)?
我终于find了问题,似乎新贵不使用在/etc/security/limits.conf中定义的参数,所以当我通过服务命令启动mysql(所以,在新贵之下),它覆盖了那些定义的限制和使用默认1024。
解决方法是修改定义upstart服务的mysql.conf文件,它位于/etc/init/mysql.conf,并在预启动块之前添加以下行:
# 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中定义的每一个暴发户服务,所以如果任何服务与打开的文件限制有相同的问题,这个解决scheme也应该工作。