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


Posted in PHP onJanuary 15, 2015

本文实例讲述了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 << 

 

<!-- 30分钟自动刷新 --> 

 

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 " 

<table border=""> 

<tbody> 

<tr> 

<td>instance</td> 

<td>result</td> 

<td>Slave_IO_Running</td> 

<td>Slave_SQL_Running</td> 

<td>Master_Host</td> 

<td>Master_Port</td> 

<td>Replicate_Do_DB</td> 

<td>memo</td> 

</tr> 

<tr> 

<td>instance</td> 

<td>result</td> 

<td>Slave_IO_Running</td> 

<td>Slave_SQL_Running</td> 

<td>Master_Host</td> 

<td>Master_Port</td> 

<td>Replicate_Do_DB</td> 

<td>Slave_IO_State</td> 

<td>Last_IO_Errno</td> 

<td>Last_IO_Error</td> 

<td>Last_SQL_Errno</td> 

<td>Last_SQL_Error</td> 

</tr> 

<tr> 

<td>{$host}</td> 

<td>{$res['result']}</td> 

<td>{$res['Slave_IO_Running']}</td> 

<td>{$res['Slave_SQL_Running']}</td> 

<td>{$res['Master_Host']}</td> 

<td>{$res['Master_Port']}</td> 

<td>{$res['Replicate_Do_DB']}</td> 

<td>{$memo}</td> 

</tr> 

<tr> 

<td>{$host}</td> 

<td>{$res['result']}</td> 

<td>{$res['Slave_IO_Running']}</td> 

<td>{$res['Slave_SQL_Running']}</td> 

<td>{$res['Master_Host']}</td> 

<td>{$res['Master_Port']}</td> 

<td>{$res['Replicate_Do_DB']}</td> 

<td>{$res['Slave_IO_State']}</td> 

<td>{$res['Last_IO_Errno']}</td> 

<td>{$res['Last_IO_Error']}</td> 

<td>{$res['Last_SQL_Errno']}</td> 

<td>{$res['Last_SQL_Error']}</td> 

</tr> 

</tbody> 

</table> 

n"; 

 echo << 

 

END; 

}else{ 

 die("no mysql instances defined."); 

}

check_status_api.php:
/* 

 * 检查mysql服务器的同步状态 

 */ 

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); 

  } 

  $query = "SHOW SLAVE STATUS"; 

  $res = @mysql_query($query, $dbh); 

  $err = @mysql_error(); 

  if($err){ 

   //无法连接 

   $r["result"] = -3; 

   return($r); 

  } 

  $row = mysql_fetch_array($res); 

  $r = $row; 

  if(($r["Slave_IO_Running"] == "Yes") && ($r["Slave_SQL_Running"] == "Yes")) 

  { 

   $r["result"] = 0; 

  }else{ 

   if(!emptyempty($row)){ 

    $r["result"] = 1; 

   }else{ 

    $r["result"] = 2; 

   } 

  } 

 }catch(Exception $e){ 

  $r["result"] = -4; 

 } 

 return($r); 

}

mysql_instance.php:
//GRANT REPLICATION CLIENT ON *.* TO '用户名'@'监控主机ip' IDENTIFIED BY '密码';  $mysql_instances = 

 

array();  

$mysql_instances[] = "远程ip:端口"; 
function get_instances()  

{    

global $mysql_instances;    

return $mysql_instances;   

}

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

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

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

PHP 相关文章推荐
一篇不错的PHP基础学习笔记
Mar 18 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
PHP学习笔记之一
Jan 17 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
php树型类实例
Dec 05 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
php中静态类与静态变量用法的区别分析
Jan 15 #PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 #PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 #PHP
php中JSON的使用与转换
Jan 14 #PHP
php rsa加密解密使用详解
Jan 14 #PHP
ThinkPHP 404页面的设置方法
Jan 14 #PHP
THINKPHP内容分页代码分享
Jan 14 #PHP
You might like
德劲1104的电路分析与改良
2021/03/01 无线电
PHP开发中四种查询返回结果分析
2011/01/02 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
Python语言的变量认识及操作方法
2018/02/11 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
屈臣氏官方旗舰店:亚洲享负盛名的保健及美妆零售商
2019/03/15 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
校运会广播稿
2015/08/19 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL