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

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

本文介绍了在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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。