新手MySQL DBA项目需求:剩余空间<20MB时发送邮件告警
MySQL磁盘空间不足告警实现方案
Nice first DBA project—disk space monitoring is critical to avoid unexpected outages, so this is a great place to start! Let’s walk through a practical, easy-to-implement solution for your 100MB database.
1. 先明确监控目标
我们需要监控MySQL数据目录所在磁盘分区的剩余空间,而不是数据库本身的大小(因为数据库文件所在分区的剩余空间才是决定能否写入的关键)。
2. 编写告警脚本
下面是一个bash脚本示例,你可以直接修改配置参数适配你的环境:
#!/bin/bash # -------------------------- 配置参数 -------------------------- MYSQL_DATA_DIR="/var/lib/mysql" # 替换为你的MySQL实际数据目录 ALERT_THRESHOLD=20 # 告警阈值(单位:MB) OPS_EMAIL="ops@yourdomain.com" # 运维人员接收告警的邮箱 # ------------------------------------------------------------- # 获取目标分区的剩余可用空间(转换为纯数字MB) FREE_SPACE=$(df -BM "$MYSQL_DATA_DIR" | grep -v "Filesystem" | awk '{print $4}' | sed 's/M//') # 判断是否触发告警条件 if [ "$FREE_SPACE" -lt "$ALERT_THRESHOLD" ]; then ALERT_SUBJECT="⚠️ SQL Low Disk Space Alert: Only $FREE_SPACE MB Remaining" ALERT_BODY=" Warning: The disk partition hosting MySQL data ($MYSQL_DATA_DIR) is running low on space. - Current free space: $FREE_SPACE MB - Alert threshold: $ALERT_THRESHOLD MB Please take action immediately to avoid database write failures. " # 发送告警邮件(确保系统已安装mailx/mailutils) echo -e "$ALERT_BODY" | mailx -s "$ALERT_SUBJECT" "$OPS_EMAIL" fi
3. 脚本初始化与测试
- 给脚本添加执行权限:
chmod +x /opt/scripts/mysql_disk_alert.sh - 安装邮件工具(如果系统没有):
- Debian/Ubuntu:
sudo apt install mailutils - RHEL/CentOS:
sudo yum install mailx
- Debian/Ubuntu:
- 测试脚本:临时把
ALERT_THRESHOLD改得比当前剩余空间大,运行脚本检查是否能收到告警邮件。
4. 设置定时任务自动检查
用cron定期执行脚本,确保实时监控。比如每10分钟检查一次:
- 打开crontab编辑:
crontab -e - 添加以下内容(替换为你的脚本路径):
(末尾的日志输出可以帮你排查脚本执行问题)*/10 * * * * /opt/scripts/mysql_disk_alert.sh >> /var/log/mysql_disk_alert.log 2>&1
额外建议
- 如果你不确定MySQL数据目录路径,可以登录MySQL执行
SHOW VARIABLES LIKE 'datadir';查看 - 可以扩展脚本,添加数据库总大小统计(用
du -sh $MYSQL_DATA_DIR),让告警信息更全面 - 确保cron服务处于运行状态:
systemctl status cron(Debian/Ubuntu)或systemctl status crond(RHEL/CentOS)
内容的提问来源于stack exchange,提问作者maxwell Owusu
相关产品推荐
相关产品推荐

