我有一个客户,他的网络服务器托管在 Digital Ocean 上,他们遇到了一个奇怪的随机 MySQL 数据库问题......
每月数据库服务器崩溃 1-4 次,必须手动重新启动。
我一直无法找出这次随机崩溃的原因,所以每次发生这种情况时我都必须执行这个过程:
- 打开终端命令提示符窗口
- 输入并运行:
ssh root@IP-HERE -l root
- 输入服务器用户密码:
server-user-password
v - 输入并运行命令:
service mysql restart
这将重新启动 MySQL 服务器,并且一切恢复正常,直到一周或三周后它再次随机发生,然后重复该过程。
由于我的客户没有服务器管理经验,甚至不知道命令提示符/终端窗口是什么或是什么样子......我需要想出一些解决方案,让任何人,包括猴子能够在我不在的时候复制上面概述的过程!
一些信息:
- 开发人员/管理员(我):运行 Windows 7 PC
- 客户:正在运行 Mac OS X(最新的操作系统)
- 服务器:正在运行 Ubuntu 12.0.4
有了这些信息,是否有可能构建某种一键解决方案脚本,客户可以单击并从他的 Mac 启动一个脚本/程序,当他遇到紧急问题而我不在身边时,该脚本/程序会自动运行上述过程来重新启动他的 MySQL 服务器?
答案1
您是否曾经想过监控 MYSQL 服务器?
也许 Nagios 太大了,但是带有脚本和 cron 或 monit 的东西也很轻量。
Monit 提供了一个非常简单的基本 Web 前端,您也可以在其中重新启动服务。
答案2
我认为最简单的方法是使用监控. 它是一个用于监控和管理守护进程或类似程序的轻量级实用程序。
安装 monit
# aptitude install monit
为 mysql 创建 conf 文件
# 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
检查监控日志文件
[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 提到的,您应该找到问题的根源。
答案3
首先,您必须(如果不存在则生成)将您的 ssh 密钥传输到服务器(以实现无密码登录):
ssh-copy-id root@IP-HERE
登录服务器并设置如下脚本:
#!/bin/bash
service mysql restart
exit 0
使其可执行:
chmod +x script.sh
在客户端上,你想通过 ssh 调用脚本。简化以下 ssh 命令的执行(使用鸭嘴兽或 Apple Automator 等作为包装器):
ssh root@IP-HERE -l root script.sh
现在您可以将可点击的服务器重启程序传递给您的客户端。
顺便说一句:你应该解决问题,而不是建立一个糟糕的重启解决方法。我向你保证,使用这个重启解决方法会比解决问题更令人头疼。就像 peabody 所说的那样,你应该查看 munin 或 monit 来检测潜在问题。
答案4
忘记手动重启吧,它太慢了,而且需要你或客户(你有时想去度假,不是吗?)。只需设置一些监控并自动执行即可。Zabbix
并且Nagios
适合整体监控,但对于一台服务器来说可能太大了。您可以设置monit
检查您的 mysql 并自动且几乎立即为您重启。
但你修复的是症状,而不是原因,这很糟糕。你必须找到 mysql 崩溃的真正原因(启用更详细的日志记录,监控服务器的其他指标)并修复它。