检查远程 mysql 是否正在运行

检查远程 mysql 是否正在运行

我想要一个可以使用 cron 作业运行的 bash shell 脚本,以检查远程服务器上的 mysql 是否正在运行。如果正在运行,则不执行任何操作,而是启动服务器。

cronjob 将每分钟检查远程服务器是否处于活动状态(或非活动状态)。我可以自己编写 cron job,但我需要 shell 脚本的帮助来检查远程 mysql 是处于启动状态还是关闭状态。检查后响应是否处于启动状态并不重要。但检查很重要。

谢谢。

答案1

连接到mysqld使用mysql管理员

MySQL 文档提到mysqladmin ping

检查服务器是否可用。如果服务器正在运行,mysqladmin 的返回状态为 0,如果服务器未运行,则返回 1。即使出现“拒绝访问”等错误,该返回状态也为 0,因为这意味着服务器正在运行但拒绝连接,这与服务器未运行不同。

首先,创建一个没有权限的用户

mysql> GRANT USAGE ON *.* TO ping@'%' IDENTIFIED BY 'ping';

创建这样的脚本

#!/bin/bash

MYSQL_USER=ping
MYSQL_PASS=ping
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysqladmin ping ${MYSQL_CONN} 2>/dev/null 1>/dev/null
MYSQLD_RUNNING=${?}
if [ ${MYSQLD_RUNNING} -eq 1 ]; then service mysql start ; fi

按照你的意愿将该脚本放入 crontab 中

确保 3306 上的防火墙已打开,以便 ping@'%' 可以连接。

答案2

检查很简单,如下:

mysql -e "select 1" || echo down

您可以将 echo 替换为 ssh 命令以 root 身份启动服务,但这似乎有点冒险。它可能存在安全隐患。它可能不可靠。我建议你应该使用某种适当的集群/故障转移软件来执行此操作。有 MySQL MMM,我们以前用过,但我知道它已经过时了。

答案3

假设您拥有 sshkey auth,以便 root 用户无需密码即可登录远程计算机,您可以运行以下命令 -

ssh remotemysql “如果 ['ps -efww | grep mysql| grep -v grep']; 然后回显“服务器已启动”; 否则回显“服务器已关闭”; fi”

用 mysql 启动脚本替换 echo "server is down"。例如 /etc/init.d/mysqld start

答案4

我想要一个 bash shell 脚本,可以使用 cron 作业运行该脚本来检查远程服务器上的 mysql 是否正在运行。

这让我心神不宁。我无法想象为什么有人会认为这是管理服务的好方法。Mysql 附带启动脚本,它将与 systemd 和 sysvinit 集成,而这两种方式是启动 Linux/Unix 系统中服务的标准方式。Systemd 内置了重新启动失败服务的功能 - 但我从未见过默认配置出于非常明显的原因行使此选项,如果有充分的理由这样做,可以通过 sysV 系统上的 inittab 中的 respawn 来调用它。如果这与运行 DBMS 的每个用户实例有关(以 Kmail 的方式),那么触发环应该由用户会话控制,而不是由 cron 控制。

但撇开问题的合法性不谈,使用 mysql 或 mysqladmin 来监控服务状态需要暴露连接数据库的凭据 - 从安全角度来看这不是一个好主意。它还会给资源管理带来麻烦(当您达到最大连接数时,您的服务可能看起来已关闭)

您可以通过以下方式判断服务是否正在运行:

  • 在“ps”的输出中或 /proc 文件系统中是否存在 mysqld 进程
  • 相关端口上的监听套接字(你可以使用 netcat 探测或从 netstat 的输出中检测)

相关内容