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 相关文章推荐
用libtemplate实现静态网页生成
Oct 09 PHP
基于mysql的bbs设计(三)
Oct 09 PHP
php 图片上添加透明度渐变的效果
Jun 29 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
php调用mysql数据 dbclass类
May 07 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
twig模板获取全局变量的方法
Feb 05 PHP
php常用正则函数实例小结
Dec 29 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 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
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
php提交post数组参数实例分析
2015/12/17 PHP
php格式化json函数示例代码
2016/05/12 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
js实现每日签到功能
2018/11/29 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
PyQT实现多窗口切换
2018/04/20 Python
python3 爬取图片的实例代码
2018/11/06 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Python 串口通信的实现
2020/09/29 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
小学庆六一活动方案
2014/02/28 职场文书
暑期社会实践证明书
2014/11/17 职场文书
检讨书格式
2015/01/23 职场文书
2015年敬老月活动总结
2015/03/27 职场文书