我正在尝试在Windows服务器上执行 mysqldump ,但收到以下错误消息:
mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES
Run Code Online (Sandbox Code Playgroud)
这是我正在运行的命令:
mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"
Run Code Online (Sandbox Code Playgroud)
重新启动 mysql 服务没有帮助。
我总是收到同一张桌子的消息。
我已经尝试将table_cache和max_connections变量分别从 64减少到 32 和 30 减少到 10,但我这次仍然遇到不同表的错误(从现在开始,错误消息总是提到第二个表)。
相同的脚本在十几个具有相同数据库的其他Windows服务器上运行,没有问题。
所有数据库都有 85 个表。
tec*_*007 24
根据这里- “操作系统错误代码 24:打开的文件太多”,它与更一般的错误 23“资源不足”一致。
所以看起来好像你的文件句柄用完了。这通常是服务器端设置/问题,无论是在 MySQL 中,还是在操作系统本身中。
也许检查/调整MySQL 本身的--open-files-limit设置,看看是否有帮助。
此外,也许尝试运行转储,而没有其他人正在使用数据库,使用--single-transaction设置而不是--Lock-File,因为有几个人建议这将一次处理一张表而不是一次打开它们(因此使用较少的文件句柄)。
除此之外,您可能必须找到有关此特定服务器资源不足的根本原因。这可能涉及通过禁用尽可能多的服务/进程并查看转储是否通过来进行故障排除。然后从那里找出谁是吃太多资源并且可能没有正确释放它们的罪魁祸首。
您是否可以尝试使用它--single-transaction而不是--lock-tables例如表是 InnoDB 并且您没有使用集群表并且在转储期间不会发生 ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE?如果您有 MySQL 支持组织,最好确认这是否可行。
我只在 unix 上尝试过这个,但基本上如果我尝试使用具有 2000 个表的数据库,它会失败并出现与您类似的错误,例如我已经使用了所有打开的文件句柄。