Documentation Home

B.3.2.16 找不到文件和类似错误

如果MySQL 出现、或 任何其他错误,这意味着您没有为 MySQL 服务器分配足够的文件描述符。您可以使用perror实用程序来获取错误编号含义的描述: ERROR 'file_name' not found (errno: 23)Can't open file: file_name (errno: 24)errno 23errno 24

$> perror 23
OS error code  23:  File table overflow
$> perror 24
OS error code  24:  Too many open files
$> perror 11
OS error code  11:  Resource temporarily unavailable

这里的问题是mysqld试图同时打开太多文件。您可以告诉mysqld不要一次打开这么多文件,或者增加mysqld可用的文件描述符的数量 。

要告诉mysqld一次打开较少的文件,可以通过减小table_open_cache 系统变量的值(默认值为 64)来减小表缓存。这可能无法完全防止文件描述符用完,因为在某些情况下,服务器可能会尝试临时扩展缓存大小,如 第 8.4.3.1 节,“MySQL 如何打开和关闭表”中所述。减小 的值 max_connections也会减少打开文件的数量(默认值为 100)。

要更改mysqld 可用的文件描述符的数量 ,您可以使用 mysqld_safe--open-files-limit选项或设置 系统变量。请参阅第 5.1.8 节,“服务器系统变量”。设置这些值的最简单方法是向您的选项文件添加一个选项。请参见第 4.2.2.2 节,“使用选项文件”。如果您有不支持设置打开文件限制 的旧版本mysqld ,您可以编辑mysqld_safe脚本。脚本中有注释掉的行ulimit -n 256。您可以删除open_files_limit#字符取消注释此行,并更改数字 以设置要提供给mysqld256的文件描述符的数量。

--open-files-limitulimit可以增加文件描述符的数量,但只能达到操作系统施加的限制。 还有一个”限制,只有当您启动mysqld_safemysqld as时才能覆盖它root(请记住,在这种情况下您还需要使用该选项启动服务器, 以便它 在启动后--user不会继续运行 as root). 如果您需要增加操作系统对每个进程可用的文件描述符数量的限制,请查阅您系统的文档。

笔记

如果运行tcsh shell, ulimit不起作用! 当您询问电流限制时,tcsh也会报告不正确的值。在这种情况下,您应该使用 sh启动mysqld_safe