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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
转换中文日期的PHP程序
Oct 09 PHP
怎样在UNIX系统下安装MySQL
Oct 09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
Jan 10 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
Yii输入正确验证码却验证失败的解决方法
Jun 06 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 PHP
PHP大文件分割分片上传实现代码
Dec 09 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循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
php获取域名的google收录示例
2014/03/24 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
Python进程间通信之共享内存详解
2017/10/30 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
python 实现两个npy档案合并
2020/07/01 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
马丁路德金演讲稿
2014/05/19 职场文书
甘南现象心得体会
2014/09/11 职场文书
茶花女读书笔记
2015/06/29 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
灵能百分百第三季什么时候来?
2022/03/15 日漫
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
Golang ort 中的sortInts 方法
2022/04/24 Golang