如何防止我的 ec2 微实例 mysql 数据库崩溃?

如何防止我的 ec2 微实例 mysql 数据库崩溃?

我有一个包含 WordPress 网站的 Amazon ec2 微型实例。从昨天开始,我的 mysql 数据库一直崩溃:

[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo service mysqld status
mysqld dead but subsys locked

我尝试重新启动 mysqld,但每 5 分钟后它就会不断崩溃并显示相同的消息 - “建立数据库连接时出错”

这是我的数据库日志文件读取的内容 -

160123 05:44:41 mysqld_safe mysqld restarted
160123  5:44:43 [Note] /usr/libexec/mysql55/mysqld (mysqld 5.5.46) starting as process 7928 ...
160123  5:44:44 [Note] Plugin 'FEDERATED' is disabled.
160123  5:44:46 InnoDB: The InnoDB memory heap is disabled
160123  5:44:46 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160123  5:44:46 InnoDB: Compressed tables use zlib 1.2.8
160123  5:44:46 InnoDB: Using Linux native AIO
160123  5:44:46 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
160123  5:44:46 InnoDB: Completed initialization of buffer pool
160123  5:44:46 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160123  5:44:46 [ERROR] Plugin 'InnoDB' init function returned error.
160123  5:44:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160123  5:44:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160123  5:44:46 [ERROR] Aborting    
160123  5:44:46 [Note] /usr/libexec/mysql55/mysqld: Shutdown complete
160123 05:44:46 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

当我在 Google 上搜索该问题的解决方案时,发现的常见解决方案mysqld dead but subsys locked是创建一个交换文件。我完全按照大多数解决方案的建议进行操作,但由于我不太熟悉 UNIX,所以我不知道我所做的是否正确。

正如 Wunter 所问,用 的结果更新我的问题free。我有 1MB 的交换空间。

[ec2-user@ip-xx-xx-xx-xxx /]$ free
             total       used       free     shared    buffers     cached
Mem:       1019452     613820     405632         76      19124      64348
-/+ buffers/cache:     530348     489104
Swap:      1048572      46604    1001968

在此输入图像描述

或者,这个问题还有其他解决方案吗?请帮忙。

答案1

为了清楚起见,该消息mysqld dead but subsys locked症状,不是一个原因。也就是说,这意味着 mysqld 崩溃了(“死亡”),并且 init 系统的状态数据库具有过时的信息(“但是 subsys 已锁定”)。它不会告诉你为什么事情崩溃了。

该问题在您的 mysql 服务器日志中得到了解释:

160123  5:44:46 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
160123  5:44:46 InnoDB: Completed initialization of buffer pool
160123  5:44:46 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160123  5:44:46 [ERROR] Plugin 'InnoDB' init function returned error.
160123  5:44:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160123  5:44:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160123  5:44:46 [ERROR] Aborting    

这表示当 InnoDB(存储引擎)尝试初始化时,它想要将 128M RAM 分配给mmap()'ed 区域,但是失败了。

您声明您已添加交换空间。考虑到错误消息,这确实应该是正确的解决方案,但显然它不起作用;可能是因为您没有添加足够的交换空间。

尝试增加交换空间的大小。如果这不能解决问题,请运行free,并更新您的问题以发布该命令的输出。

相关内容