【问题标题】:mysqldump: Got errno 12 on writemysqldump:写入时出现 errno 12
【发布时间】:2017-10-24 17:35:53
【问题描述】:

最近,当我运行一个多年来一直没有任何问题的脚本时,我开始收到这些消息。

该命令似乎完成了它的工作,生成的文件似乎是完整的,这只是增加了神秘感。

这是在 VPS 上,它的 CPU 和内存有限,所以大概我正在达到这些限制之一,但确定会有所帮助。

所以我查找了有关mysqldump 错误代码的参考,但一无所获。 StackOverflow 上有类似的问题,但都是针对不同的errno 号码。

【问题讨论】:

  • 这通常是达到内存限制的结果,因此您可能需要在另一台机器上运行mysqldump 进程。也有可能您的 /etc/my.cnf 为该规格的机器指定了太多的 MySQL 内存。
  • 不是在另一台机器上运行 mysqldump 的真正选项。我无权访问机器的/etc/my.cnf文件,而用户的.my.cnf只有一个密码。可能需要升级 VPS。但是没有参考是不是也很奇怪?

标签: mysql


【解决方案1】:

TLDR:如果您在 MySQLDump 中遇到内存问题,请设置 max_allowed_pa​​cket(也为 QuickMode 使用 --quick)

使用此参数来防止内存泄漏和溢出:--max_allowed_packet=2M。默认值为16M,最大允许值为64M。如果失败,请尝试较低的值。

完整的演示用法

nice mysqldump
-u MYUSERNAME
-pMYPASSWORD
--max_allowed_packet=2M
-h DATABASEHOST
--default-character-set=latin1
--skip-set-charset
--no-tablespaces
-N --routines
--quick
--skip-triggers
DATABASENAME > OUTPUTFILE
  • nice:优先运行此命令。
  • max_allowed_packet:这样就解决了问题。
  • quick:这是通过分块减少内存问题的另一种尝试,但这将解决 errno 6(mysql 处理中的内存不足),并且可能不会解决 errno 12(linux 进程处理中的内存不足) ,但我仍然这样做是为了帮助记忆。 (是的,quick 是这个参数的错误名称。)

诊断错误代码 12(以及诊断任何旧错误号)

您始终可以使用errno() 找出退出代码的含义。退出代码 12 用于...

ENOMEM — 12 : 无法分配内存

要查看错误代码是什么,只需在 linux 中运行此命令:errno 12,或任何数字。要查看所有可能的错误,请运行 errno -ls

基本上,您的主机不允许您使用内存来执行备份命令。

【讨论】:

  • 感谢有关 max_allowed_pa​​cket 的提示。我会试试看。至于 errno 命令:我使用的 VPS 上似乎不存在。虽然在其他地方工作;谢谢你。
  • 祝你好运,让我知道结果如何!
猜你喜欢
  • 2014-04-12
  • 2016-10-08
  • 2020-10-27
  • 2015-08-08
  • 2016-04-11
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多