死时自动重启mysql


15

我有一个机架式服务器,一直在租用它来运行我的个人项目。由于我很便宜,它具有256Mb的RAM,老实说无法处理。每隔一段时间,当流量急剧上升时,服务器决定开始终止进程​​,而mysqld似乎是一种流行的杀死进程。我尝试访问我的站点,并收到一条消息,提示建立数据库连接出错。检查日志发现,mysqld由于内存不足而被杀死。

由于我仍然像昨天一样贫穷,并且不想升级机架空间VM的RAM,有没有办法告诉我它死后自动重启mysqld?

我曾想过使用crontab之类的东西,但是,a,我也不知道该怎么做。我猜我是“台式机上的Linux”一代的产品,因为我可以在台式机和笔记本电脑(几乎只运行Linux)上执行大多数操作,但是仍然缺少许多Linux服务器管理技能。

服务器运行CentOS 6.3


什么发行版?我认为新贵会在ubuntu上做到这一点
Journeyman Geek

哎呀 忘记提及细节:CentOS
Los Frijoles

嗯 也许也想包含该版本
Journeyman Geek

不减损这个问题,但是也许一个长期的解决方案是避免出现这种情况:)如果您只想为个人项目使用一个简单的不受管理的VPS,则可以从一个更大的盒子上拉一个好价钱专门从事低端服务的提供商。我对此感到非常满意。有很多地方可以找到此类VPS提供程序,例如lowendtalk.com。
John Chadwick

Answers:


16

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

/sbin/service mysql status

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

/sbin/service mysql status || service mysql start

您可以将此行添加到/etc/crontab每分钟启动thes命令:

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


6

这有点令人不安。

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

考虑到这种情况mysqld_safe是设计好的mysqld,如果mysqld_safe仍然拒绝它,强制启动可能不是一个好主意。

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

[mysqld]
log-error=log-filename

要么

[mysqld_safe]
log-error=log-filename

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


有趣的是...查看我的日志,它说mysqld已重新启动,但是大约1-2小时后,它将说该过程结束了。之后,下一条记录是我的手动开始。也许我已将mysqld_safe配置错误?
Los Frijoles 2013年

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如果第一个命令以某种方式失败,它将执行第二个命令。(返回大于零的退出代码。)

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

这与双与号不同,&&后者就像说:“运行第一个命令,并且,只有第一个命令成功时才运行第二个命令”。


1

以下是来自 jonnyreeves.co.uk的内容


罪魁祸首是php-fpm!一个快速的谷歌发现另一个Wordpress客户遭受类似的症状。建议是调整php-fpm池配置(/etc/php-fpm.d/www.conf)并调整pm配置。主要的变化是从移动pm = dynamicpm = ondemand与一个pm.max_children的值5(基于观察每个工人〜5%的内存使用情况)。更改配置后,我重新启动了所有服务并检查了内存使用情况。

service php-fpm restart
service nginx restart
service mariadb restart

重新启动后,内存使用率显着降低。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.