首页 > 后端开发 > php教程 > php在linux下检测mysql同步状态的方法_PHP

php在linux下检测mysql同步状态的方法_PHP

WBOY
发布: 2016-05-31 13:18:00
原创
828 人浏览过

本文实例讲述了php在linux下检测mysql同步状态的方法。分享给大家供大家参考。具体分析如下:

这里通过两个实例来介绍mysql同步状态检测实现方法。代码如下:

代码如下:

#!/bin/sh 
  
#check MySQL_Slave Status 
#crontab time 00:10 
MYSQL_USER="root"
MYSQL_PWD="123456"
MYSQL_SLAVE_LOG="/tmp/check_mysql_slave.log"
EMAIL="1351010****@139.com"
  
MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "] '{print $5}'` 
MYSQL_IP=`ifconfig eth0|grep "inet addr" | awk -F[:" "] '{print $4}'` 
MYSQL_SLAVE_STATUS=$(/usr/local/webserver/mysql/bin/mysql -u root -psylc23hua -S /tmp/mysql.sock -e
 
"show slave statusG" | grep -i "running") 
IO_ENV=`echo $MYSQL_SLAVE_STATUS | grep IO | awk ' {print $2}'` 
SQL_ENV=`echo $MYSQL_SLAVE_STATUS | grep SQL | awk '{print $2}'` 
NOW=$(date -d today '%Y-%m-%d %H:%M:%S') 
  
if [ "$MYSQL_PORT" = "3306" ];then
  echo "mysql is running!"
else
  mail -s "warn!server: $MYSQL_IP mysql is down" "$EMAIL"
fi
  
if [ "$IO_ENV" = "Yes" -a "$SQL_ENV" = "Yes" ];then
  echo "Slave is running!"
else
  echo "[ $NOW ] Slave is not running!" >> "$MYSQL_SLAVE_LOG"
  cat "$MYSQL_SLAVE_LOG" | mail -s "WARN! ${MySQL_IP}_replicate_error" "$EMAIL"
fi
  
exit 0


php实例代码,代码如下:
check_rep.php:

代码如下:

if(emptyempty($_REQUEST["key"])) die(':) missing key');
if($_REQUEST["key"] != 'xupeng') die(':) error key');
 
include("mysql_instance.php");
include("check_status_api.php");
 
define("USERNAME", "用户名");
define("PASSWORD", "密码");
define("DEBUGMODE", false);
 
$instances = get_instances();
 
if($instances){
 echo <<
 

 
END;
 echo "
n";
 if(!DEBUGMODE){
  echo "
n";
 }else{
  echo "
n";
 }
 foreach($instances as $host){
  $res = check_mysql_replication_status($host, USERNAME, PASSWORD);
  if(!DEBUGMODE){
   switch($res["result"]){
    case -4:
     $memo = "未知异常";
     break;
    case -3:
     $memo = "查询失败";
     break;
    case -2:
     $memo = "无法连接端口";
     break;
    case -1:
     $memo = "状态未知";
     break;
    case 0:
     $memo = "OK";
     break;
    case 1:
     $memo = "同步失败";
     if($res["Slave_IO_Running"] <> "Yes"){
      $memo .= $res["Last_IO_Error"] . "(" .  $res
 
["Last_IO_Errno"] . ")";
     }
     if($res["Slave_SQL_Running"] <> "Yes"){
      $memo .= $res["Last_SQL_Error"] . "(" .  $res
 
["Last_SQL_Errno"] . ")";
     }
     break;
    case 2:
     $memo = "数据库未设置同步";
     break;
   }
   echo "
 
n";
  }else{
   echo "
 
n";
  }
 }
 echo "





















































n”;
 回声  
结尾;
}其他{
 die("没有定义 mysql 实例。");
}


check_status_api.php:

代码如下:

/*
 * 查看mysql服务器的同步状态
 */
函数 check_mysql_replication_status($host, $username, $password)
{
 //状态默认未知
 $r = 数组(
  “结果”=> -1
  );
 尝试{
  $dbh = @mysql_connect($主机, $用户名, $密码);
  if(!$dbh){
   // 无法连接
   $r["结果"] = -2;
   返回($r);
  }
  $query = "显示从属状态";
  $res = @mysql_query($query, $dbh);
  $err = @mysql_error();
  if($err){
   // 无法连接
   $r["结果"] = -3;
   返回($r);
  }
  $row = mysql_fetch_array($res);
  $r = $行;
  if(($r["Slave_IO_Running"] == "是") && ($r["Slave_SQL_Running"] == "是"))
  {
   $r["结果"] = 0;
  }其他{
   if(!emptyempty($row)){
    $r["结果"] = 1;
   }其他{
    $r["结果"] = 2;
   }
  }
 }catch(异常$e){
  $r["结果"] = -4;
 }
 返回($r);
}


mysql_instance.php:

代码如下:

//将 *.* 上的复制客户端授予 '用户名'@'监控主机ip' IDENTIFIED BY '密码';  $mysql_instances =
 
大批(); 
$mysql_instances[] = "远程ip:端口"; 

函数 get_instances()
{   
全局$mysql_instances;   
返回$mysql_instances;  
}


将三个以上PHP文件放在虚拟目录中,然后通过URL访问。

访问方式:http://ip/check_repl.php?key=xupeng

希望本文对大家的php程序设计有所帮助。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
instance result Slave_IO_Running Slave_SQL_Running Master_Host Master_Port Replicate_Do_DB memo
instance result Slave_IO_Running Slave_SQL_Running Master_Host Master_Port Replicate_Do_DB Slave_IO_State Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
{$host} {$res['result']} {$res['Slave_IO_Running']} {$res['Slave_SQL_Running']} {$res['Master_Host']} {$res['Master_Port']} {$res['Replicate_Do_DB']} {$memo}
{$host} {$res['result']} {$res['Slave_IO_Running']} {$res['Slave_SQL_Running']} {$res['Master_Host']} {$res['Master_Port']} {$res['Replicate_Do_DB']} {$res['Slave_IO_State']} {$res['Last_IO_Errno']} {$res['Last_IO_Error']} {$res['Last_SQL_Errno']} {$res['Last_SQL_Error']}