Linux环境下PHP检测MySQL同步状态的方法
本文介绍了在Linux环境中使用PHP和Shell脚本监控MySQL主从复制同步状态的具体实现方法,通过分析SHOW SLAVE STATUS输出判断主从同步是否正常。
目标与准备
本方案旨在监控MySQL从库的同步健康状况,确保数据一致性。主要涉及两个部分:基于Shell的命令行监控脚本,以及基于PHP的Web端可视化监控接口。
第1步:配置Shell监控脚本
该脚本用于定期执行同步检查,并在检测到故障时发送报警邮件。
- 目的:自动检测MySQL端口连通性及从库同步线程状态。
- 入口:Linux Shell环境。
- 关键参数:需配置正确的数据库账号、密码、Socket路径或IP端口,以及接收报警的邮箱地址。
以下是一个典型的Shell检查逻辑示例:
#!/bin/sh
# 检查MySQL从库状态
MYSQL_USER="root"
MYSQL_PWD="your_password"
EMAIL="admin@example.com"
NOW=$(date -d today +'%Y-%m-%d %H:%M:%S')
# 获取端口和IP (示例逻辑)
MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306" | awk -F[:" "]+ '{print $5}'`
# 执行SHOW SLAVE STATUS并提取关键状态
# 注意:实际生产中建议使用更稳健的参数传递方式
SLAVE_STATUS=$(/usr/local/webserver/mysql/bin/mysql -u $MYSQL_USER -p$MYSQL_PWD -e "show slave statusG" | grep -i "running")
IO_ENV=`echo $SLAVE_STATUS | grep IO | awk '{print $2}'`
SQL_ENV=`echo $SLAVE_STATUS | grep SQL | awk '{print $2}'`
# 判断状态并处理
if [ "$IO_ENV" = "Yes" -a "$SQL_ENV" = "Yes" ]; then
echo "Slave is running!"
else
echo "[ $NOW ] Slave is not running!" >> /tmp/check_mysql_slave.log
# 触发报警逻辑 (如发送邮件)
fi
exit 0
第2步:构建PHP监控接口
提供Web页面以图形化展示各实例的同步状态,便于实时监控。
- 目的:通过HTTP请求获取MySQL实例列表,查询并展示同步详情。
- 操作:将PHP文件部署到Web服务器目录,设置访问密钥防止未授权访问。
check_rep.php 核心逻辑概述:
- 验证请求中的Key参数。
- 加载数据库实例列表和状态检查API。
- 遍历实例,调用
check_mysql_replication_status函数。 - 根据返回的Result代码(如0表示正常,1表示同步失败)生成HTML表格展示结果。
check_status_api.php 状态检查函数逻辑:
function check_mysql_replication_status($host, $username, $password) {
$r = array("result" => -1);
try {
$dbh = mysql_connect($host, $username, $password);
if (!$dbh) {
$r["result"] = -2; // 连接失败
return $r;
}
$res = mysql_query("SHOW SLAVE STATUS", $dbh);
if (mysql_error()) {
$r["result"] = -3; // 查询失败
return $r;
}
$row = mysql_fetch_array($res);
// 检查IO和SQL线程是否均为Yes
if ($row && $row['Slave_IO_Running'] == "Yes" && $row['Slave_SQL_Running'] == "Yes") {
$r["result"] = 0; // OK
} else {
$r["result"] = empty($row) ? 2 : 1; // 未配置同步 或 同步失败
}
} catch (Exception $e) {
$r["result"] = -4; // 异常
}
return $r;
}
第3步:配置实例列表
在 mysql_instance.php 中定义需要监控的MySQL从库IP和端口:
$mysql_instances = array();
$mysql_instances[] = "远程ip:端口";
确保监控主机拥有 REPLICATION CLIENT 权限以便读取同步状态。
完成判断
部署完成后,访问 http://ip/check_repl.php?key=your_secret_key,若页面正确显示各个实例的Slave_IO_Running和Slave_SQL_Running状态为“Yes”,则表明监控配置成功且同步正常。
排错建议
若发现同步中断,请查看日志中的Last_IO_Error或Last_SQL_Error字段,通常涉及网络延迟、主键冲突或DDL操作导致的同步阻塞。
总结
以上就是在Linux下通过PHP和Shell检测MySQL同步状态的详细内容,更多关于PHP监控数据库的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









