mysql 死机时自动重启

mysql 死机时自动重启

我有一台租用的 rackspace 服务器,用来运行我的个人项目。由于我比较抠门,所以它只有 256Mb 的 RAM,说实话处理不了太多事情。偶尔,当流量急剧上升时,服务器就会决定开始终止进程​​,而 mysqld 似乎是它最常终止的进程。我尝试访问我的网站,结果收到一条消息,提示建立数据库连接时出错。检查日志发现 mysqld 因内存不足而被终止。

由于我仍然像昨天一样穷,并且不想升级我的 rackspace VM 的 RAM,有没有办法让它在死机时自动重新启动 mysqld?

我曾想过使用类似 crontab 的东西,但遗憾的是,我也不知道具体要做什么。我想我是“桌面上的 Linux”一代的产物,因为我可以在我的台式机和笔记本电脑上做大多数事情(它们几乎只运行 Linux),但仍然缺乏很多 Linux 服务器管理技能。

服务器运行CentOS 6.3

答案1

这不是一个干净的解决方案,显然最好从一开始就避免这个问题。无论如何,我不确定 CentOS 如何管理服务,但我认为它使用service。如果是这样,你可以检查mysql服务是否正在运行

/sbin/service mysql status

如果正在运行,此命令将成功退出;mysql如果未运行,则返回非 0 退出状态。因此,如果服务未运行,您可以使用以下命令启动它:

/sbin/service mysql status || service mysql start

您可以添加此行以/etc/crontab每分钟启动这些命令:

* * * * * /sbin/service mysql status || service mysql start

答案2

这有点令人不安。

mysqld总是重新启动mysqld_safe因为底部有一个无限循环mysqld_safe来检查异常关机。如果错误太严重,甚至无法mysqld_safemysqld后续尝试中重新启动。

考虑到所设计的情况,如果无论如何都会拒绝它,强制启动mysqld_safe可能不是一个好主意。mysqldmysqld_safe

您需要在 my.cnf 中找到错误日志,它位于

[mysqld]
log-error=log-filename

或者

[mysqld_safe]
log-error=log-filename

阅读文本文件(可能通过运行tail -30 log-filename)并找到 mysqld 处理关闭的源头。

答案3

为了在低内存 VPS 上保持正常运行,我使用了 terdom 的修改版回答检查并重新启动MySQL。

/sbin/service mysqld status || service mysqld restart

我需要更改mysqlmysqld才能使其正常工作。如果没有它,我会收到错误“ ERROR! MySQL is running but PID file could not be found”。

在我的 CentOS 7.2 系统上,/sbin/service重定向到/bin/systemctl status,因此以下命令执行速度更快。

/bin/systemctl status  mysqld.service || /bin/systemctl start  mysqld.service

我最终在系统的根 crontab 中添加了以下行。它每分钟检查一次 MySQL 是否正在运行,并将 stdout 重定向为 null。除非出现问题,否则启动服务不会输出任何内容,因此无需在最后一个命令上添加 null 重定向。

* * * * * /bin/systemctl status mysqld.service > /dev/null || /bin/systemctl start  mysqld.service

双管道||意味着OR如果第一个命令因某种原因失败,则将执行第二个命令。(返回大于零的退出代码。)

这就像说,“运行第一个命令,或者,如果第一个命令因某种原因失败,则运行第二个命令”。

这与双“&”符号不同,后者&&的意思像是在说,“运行第一个命令,,只有第一个命令成功执行,才运行第二个命令”。

答案4

以下内容来自 jonnyreeves.co.uk


罪魁祸首就是 php-fpm!快速谷歌搜索后,我发现另一个 Wordpress 客户也遇到了类似的问题;建议调整 php-fpm 池配置 (/etc/php-fpm.d/www.conf) 并调整 pm 配置。主要更改是从 移动到 ,并将pm = dynamic值设置为pm = ondemand(基于观察每个工作者约 5% 的内存使用情况)。更改配置后,我重新启动了所有服务并检查了内存使用情况。pm.max_children5

service php-fpm restart
service nginx restart
service mariadb restart

重新启动后,内存使用量显著降低。

相关内容