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版(5)
Oct 09 PHP
增加反向链接的101个方法 站长推荐
Jan 31 PHP
php zip文件解压类代码
Dec 02 PHP
phpize的深入理解
Jun 03 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
php中JSON的使用与转换
Jan 14 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 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的ob_start();控制您的浏览器cache!
2007/02/14 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python之eval()函数危险性浅析
2014/07/03 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
Python实现画图软件功能方法详解
2020/07/28 Python
python 发送get请求接口详解
2020/11/17 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
《和我们一样享受春天》教学反思
2014/02/07 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
节水倡议书
2015/01/19 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
特种设备安全管理制度
2015/08/06 职场文书
公司新员工欢迎词
2015/09/30 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
python装饰器代码解析
2022/03/23 Python