Ubuntu 12.04 服务器 - MySQL 持续崩溃 - 可能是 InnoDB 问题

Ubuntu 12.04 服务器 - MySQL 持续崩溃 - 可能是 InnoDB 问题

我一直在寻找解决方案,但似乎没有什么效果。我在这个服务器上有一个 Drupal 6 网站。

服务器:Ubuntu 12.04 Apache/2.2.22 (Ubuntu) 5.3.10-1ubuntu3.8 MySQL 5.5.32 Drupal 6

这是我的 Apache2 和 MySQL 错误文件以及 MySQL 配置文件的链接。请看一下。 https://drive.google.com/folderview?id=0By8qja37RfvzWUt1a0lGSzZqR3M&usp=sharing 这些文件非常大,所以我链接到它们而不是粘贴在这里。如果需要,我可以粘贴在这里。只要告诉我就行。谢谢。

我搜索了很多。我主要尝试用 Google 搜索错误本身,但似乎找不到正确的解决方案。我想我已经将问题缩小到 innodb 的问题,但仅此而已。我检查了错误日志中的表,phpMyAdmin 说它们没问题,我还是修复了它们,但仍然崩溃了。

当我的网站崩溃时,我必须重新启动 Apache,然后重新启动 MySQL,然后网站才能恢复。它每天崩溃 2 - 6 次。

任何帮助都将不胜感激。谢谢。

答案1

我有理由相信您的 MySQL 安装没有任何问题,这就是为什么修复表时显示未发现任何问题。这些是真正问题的产物:

您的机器根本没有足够的内存来完成您要做的所有事情。

从您的配置中:

key_buffer              = 384M

在这之间innodb_buffer_pool_size 的默认值128M 中,必须有 512M 可用一直如果在 MySQL 启动或重启时无法分配,它就不会启动。

131210 13:06:25 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
131210 13:06:25 InnoDB: Completed initialization of buffer pool
131210 13:06:25 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131210 13:06:25 [ERROR] Plugin 'InnoDB' init function returned error.

这不是 MySQL 崩溃——而是 MySQL 无法启动——或者重新启动——因为没有 128MB 的可用内存可供分配。

错误 12 是“内存不足”——系统内存。

错误日志中的其他消息本质上都是副作用。

我怀疑您还会看到以下日志:

YYMMDD HH:MM:SS mysqld_safe Number of processes running now: 0

如果该错误消息之前没有立即出现崩溃转储(“MySQL 捕获信号 xx”,随后是堆栈跟踪和大量调试信息),则不太可能是 MySQL 崩溃——这是内核杀死 MySQL 以试图防止整个系统因与可用内存相关的危机情况而崩溃。Apache 的分叉模型因这一点而臭名昭著——随着您的站点变得繁忙,Apache 会产生更多子进程,每个子进程对内存的需求都很大。

您可能会在系统日志中找到这方面的证据。

Xxx xx xx:xx:xx [machine name] kernel: Out of memory: Killed process xxxx, UID xx, (mysqld).

选项包括添加更多内存,或通过配置减少 MySQL 的内存占用,或减少 Apache 可以产生的子进程数,或从系统中删除其他进程,或将数据库和 Web 服务器分离到不同的机器上,或添加更多交换 - 但进行交换的 MySQL 机器不会达到最佳性能。

对于类似的场景,另请参阅:

相关内容