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

如果您从 MySQL 收到ERROR 'file_name' not found (errno: 23)Can't open file: file_name (errno: 24)errno 23errno 24的任何其他错误,则意味着您没有为 MySQL 服务器分配足够的文件 Descriptors。您可以使用perrorUtil 来获取有关错误编号含义的描述:

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

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

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

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

--open-files-limitulimit 可以增加文件 Descriptors 的数量,但只能达到 os 所施加的限制。还有一个“硬”限制,仅当以root身份启动mysqld_safemysqld时才可以覆盖(请记住,在这种情况下,您还需要使用--user选项启动服务器,以便在以后不能 continue 以root的身份运行)它启动)。如果您需要增加 os 对每个进程可用文件 Descriptors 数量的限制,请查阅系统的文档。

Note

如果运行 tcsh Shell,则 ulimit 不起作用!要求当前限制时, tcsh 还会报告错误的值。在这种情况下,您应该使用 sh 来开始mysqld_safe