我有一个包含 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
,并更新您的问题以发布该命令的输出。