MySQL监控Shell脚本实战指南
监控MySQL服务状态的Shell脚本方法
通过Shell脚本监控MySQL服务是否正常运行,可以采用多种方式实现。以下列举几种常见方法:
使用mysqladmin命令检查
#!/bin/bash
mysqladmin -u root -p密码 ping 2>/dev/null | grep -q alive
if [ $? -eq 0 ]; thenecho "MySQL is running"
elseecho "MySQL is not running"# 可以添加自动重启命令# systemctl restart mysql
fi
通过进程检查方式
#!/bin/bash
if ps aux | grep -q [m]ysqld; thenecho "MySQL process is running"
elseecho "MySQL process is not found"
fi
检查端口监听情况
#!/bin/bash
if netstat -tulnp | grep -q 3306; thenecho "MySQL port is listening"
elseecho "MySQL port is not listening"
fi
尝试连接并执行简单查询
#!/bin/bash
if mysql -u root -p密码 -e "SELECT 1" >/dev/null 2>&1; thenecho "MySQL is accessible"
elseecho "MySQL is not accessible"
fi
完整监控脚本示例
#!/bin/bash
# 配置部分
MYSQL_USER="root"
MYSQL_PASS="密码"
ALERT_EMAIL="admin@example.com"# 检查函数
check_mysql() {# 方法1:使用mysqladminif ! mysqladmin -u $MYSQL_USER -p$MYSQL_PASS ping 2>/dev/null | grep -q alive; thenreturn 1fi# 方法2:执行简单查询if ! mysql -u $MYSQL_USER -p$MYSQL_PASS -e "SELECT 1" >/dev/null 2>&1; thenreturn 1fireturn 0
}# 主逻辑
if check_mysql; thenecho "$(date): MySQL is running normally" >> /var/log/mysql_monitor.log
elseecho "$(date): MySQL is down! Attempting to restart..." >> /var/log/mysql_monitor.logsystemctl restart mysql# 检查重启是否成功sleep 5if check_mysql; thenecho "MySQL restarted successfully" >> /var/log/mysql_monitor.logelseecho "Failed to restart MySQL" >> /var/log/mysql_monitor.logmail -s "MySQL Alert" $ALERT_EMAIL < /var/log/mysql_monitor.logfi
fi
设置定时任务
将脚本保存为/usr/local/bin/mysql_monitor.sh
,添加执行权限:
chmod +x /usr/local/bin/mysql_monitor.sh
添加到crontab,每5分钟检查一次:
*/5 * * * * /usr/local/bin/mysql_monitor.sh
注意事项
- 脚本中密码明文存储不安全,建议使用MySQL配置文件或环境变量
- 生产环境建议添加更多错误处理和日志记录
- 可以结合监控系统如Nagios、Zabbix实现更全面的监控
- 根据实际MySQL配置调整连接参数
以上方法可以根据实际环境选择或组合使用,实现MySQL服务的有效监控。