Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

如果您收到错误信息 "ERROR '文件名' not found (errno: 23)"、"Can't open file: 文件名 (errno: 24)" 或任何其他错误信息,其中包含 "errno 23" 或 "errno 24",这意味着您没有为 MySQL 服务器分配足够的文件描述符。您可以使用 perror 工具来获取错误号的解释:

$> 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)。这可能不会完全防止文件描述符耗尽,因为在某些情况下,服务器可能会尝试临时扩展缓存大小,如 Section 10.4.3.1, “How MySQL Opens and Closes Tables” 中描述的那样。减少 max_connections 的值也会减少打开的文件数量(默认值为 100)。

要改变给 mysqld 可用的文件描述符数量,您可以使用 --open-files-limit 选项来启动 mysqld_safe,或者设置 open_files_limit 系统变量。请参阅 Section 7.1.8, “Server System Variables”。最简单的方法是将这些值添加到您的选项文件中。请参阅 Section 6.2.2.2, “Using Option Files”。如果您有一个旧版本的 mysqld,该版本不支持设置打开文件描述符的限制,您可以编辑 mysqld_safe 脚本。在脚本中,有一行注释掉的 ulimit -n 256。您可以删除前面的 # 字符来取消注释这行,并更改数字 256 来设置为给 mysqld 可用的文件描述符数量。

--open-files-limitulimit 可以增加文件描述符的数量,但只能增加到操作系统限制允许的最大值。还有一个 hard 限制,只有当您作为 root 用户启动 mysqld_safemysqld 时才可以覆盖。请记住,在这种情况下,您还需要使用 --user 选项来启动服务器,以防止它继续以 root 身份运行。如果您需要增加每个进程可用的操作系统文件描述符限制,请参阅您的系统文档。

Note

如果您使用的是 tcsh shell,ulimit 不起作用!tcsh 还会报告错误的值,当您询问当前限制时。这种情况下,您应该使用 sh 来启动 mysqld_safe