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 相关文章推荐
一个目录遍历函数
Oct 09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
Jan 02 PHP
关于页面优化和伪静态
Oct 11 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
vue 表单输入格式化中文输入法异常问题
2018/05/30 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
python3将视频流保存为本地视频文件
2018/06/20 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
flask实现验证码并验证功能
2019/12/05 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
Python定义一个函数的方法
2020/06/15 Python
python中四舍五入的正确打开方式
2021/01/18 Python
阿里旅行:飞猪
2017/01/05 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
酒店应聘自荐信
2013/11/09 职场文书
应届毕业生求职信
2013/11/30 职场文书
会计应届生的自荐信
2013/12/13 职场文书
年度考核自我鉴定
2014/03/19 职场文书
学习心理学的体会
2014/11/07 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
音乐教师求职信范文
2015/03/20 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript