我有一个客户谁拥有数字海洋托pipe的networking服务器,他们有一个奇怪的随机MySQL数据库问题…
每个月有1-4次数据库服务器崩溃,必须手动重新启动。
我一直无法弄清楚这个随机崩溃的原因,所以我现在每次都要这样做:
ssh root@IP-HERE -l root server-user-password v service mysql restart 这将重新启动MySQL服务器,一切都很好,直到一个星期或3个以后,当它再次随机发生,然后重复过程。
由于我的客户端没有服务器pipe理经验,甚至不知道什么命令提示符/terminal窗口是或看起来像…我需要拿出一些解决scheme,将允许任何人,包括一只猴子能够复制上面概述的过程当我不可用!
一些信息:
有了这些信息,可以build立某种单击解决scheme脚本,客户端可以点击并从他的Mac上启动一个脚本/程序,当这个紧急问题出现时,它将自动运行上面的过程重新启动他的MySQL服务器。对他而言,我不在身边帮忙?
你有没有想过监控MYSQL服务器?
也许Nagios太大了,但是脚本和cron或者monit也是很轻量级的。
Monit提供了一个非常简单的基本Web前端,您也可以重新启动服务。
我认为最简单的方法就是使用monit 。 这是一个用于监视和pipe理守护程序或类似程序的轻量级实用程序。
安装monit
# aptitude install monit
为mysql创buildconf文件
# cat /etc/monit/conf.d/mysql check process mysqld with pidfile /var/run/mysqld/mysqld.pid group database start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql stop" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout
重新启动监视
# service monit restart
检查mysql状态
# netstat -an | grep 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN # service mysql status mysql start/running, process 33446
停止mysql服务器(只是为了模仿一些问题)
# service mysql stop
检查monit日志文件
[EEST Mar 30 12:34:10] info : 'ubuntu14' Monit started [EEST Mar 30 12:36:10] error : 'mysqld' process is not running [EEST Mar 30 12:36:10] info : 'mysqld' trying to restart [EEST Mar 30 12:36:10] info : 'mysqld' start: /etc/init.d/mysql [EEST Mar 30 12:38:12] info : 'mysqld' process is running with pid 34085
在几分钟内,它重新启动MySQL服务器
但这只是一个解决方法,就像@lain提到你应该find问题的根源。
起初,你有(如果不生成existend和)生成SSH密钥到服务器(实现无密码login):
ssh-copy-id root@IP-HERE
login到服务器并设置一个脚本,如:
#!/bin/bash service mysql restart exit 0
使其可执行:
chmod +x script.sh
在你的客户端上,你想通过ssh调用脚本。 简化以下ssh命令的执行(使用Platypus或Apple Automator等作为包装器):
ssh root@IP-HERE -l root script.sh
现在,您可以将可点击的服务器重新启动器传递给您的客户端。
顺便说一句:你应该解决这个问题,而不是build立一个蹩脚的重新启动解决方法。 我向你保证,利用这个重新引导的解决方法将会比解决问题更令人头痛。 就像皮博迪所说的,你应该看看慕尼黑或者蒙特,来发现潜在的问题。
忘了手动重启,它太慢了,需要你或者客户端(你有时候想去度假,不是吗?)。 只要设置一些监控,并自动执行。 Zabbix和Nagios很适合整体监控,但对于一台服务器来说可能太大了。 你可以设置monit来检查你的mysql,并自动地立即重新启动。
但是你正在修复症状,而不是原因,这是不好的。 你必须find真正的原因,为什么是MySQL崩溃(启用更详细的日志logging,监视服务器的另一个指标),并修复它。