Linux环境下PHP检测MySQL同步状态的方法

栗子
栗子
发布时间:2026-10-15 | 2人浏览过
原创

本文介绍了在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 核心逻辑概述:

  1. 验证请求中的Key参数。
  2. 加载数据库实例列表和状态检查API。
  3. 遍历实例,调用 check_mysql_replication_status 函数。
  4. 根据返回的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监控数据库的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表