当前位置:首页 > PHP教程 > php高级应用 > 列表

检测mysql同步状态实现代码(php/linux)

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-28 15:05:01 浏览: 评论:0 

本文章介绍两个实例来介绍mysql同步状态检测实现程序有需要的朋友可参考一下,代码如下:

  1. #!/bin/sh  
  2.    
  3. #check MySQL_Slave Status  
  4. #crontab time 00:10  
  5. MYSQL_USER="root" 
  6. MYSQL_PWD="123456" 
  7. MYSQL_SLAVE_LOG="/tmp/check_mysql_slave.log" 
  8. EMAIL="1351010****@139.com" 
  9.    
  10. MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`  
  11. MYSQL_IP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`  
  12. MYSQL_SLAVE_STATUS=$(/usr/local/webserver/mysql/bin/mysql -u root -psylc23hua -S /tmp/mysql.sock -e 
  13.  
  14. "show slave statusG" | grep -i "running")  
  15. IO_ENV=`echo $MYSQL_SLAVE_STATUS | grep IO | awk ' {print $2}'`  
  16. SQL_ENV=`echo $MYSQL_SLAVE_STATUS | grep SQL | awk '{print $2}'`  
  17. NOW=$(date -d today +'%Y-%m-%d %H:%M:%S')  
  18.    
  19. if [ "$MYSQL_PORT" = "3306" ];then 
  20.   echo "mysql is running!" 
  21. else 
  22.   mail -s "warn!server: $MYSQL_IP mysql is down" "$EMAIL" 
  23. fi 
  24.    
  25. if [ "$IO_ENV" = "Yes" -a "$SQL_ENV" = "Yes" ];then 
  26.   echo "Slave is running!" 
  27. else 
  28.   echo "[ $NOW ] Slave is not running!" >> "$MYSQL_SLAVE_LOG" 
  29.   cat "$MYSQL_SLAVE_LOG" | mail -s "WARN! ${MySQL_IP}_replicate_error" "$EMAIL" 
  30. fi 
  31.    
  32. exit 0 

php实例代码,代码如下:

  1. //check_rep.php 
  2. if(emptyempty($_REQUEST["key"])) die(':) missing key'); 
  3. if($_REQUEST["key"] != 'xupeng'die(':) error key'); 
  4.  
  5. include("mysql_instance.php"); 
  6. include("check_status_api.php"); 
  7.  
  8. define("USERNAME""用户名"); 
  9. define("PASSWORD""密码"); 
  10. define("DEBUGMODE", false); 
  11.  
  12. $instances = get_instances(); 
  13.  
  14. if($instances){ 
  15.  echo << 
  16.  
  17. <!-- 30分钟自动刷新 --> 
  18.  
  19. END
  20.  echo " 
  21. n"; 
  22.  if(!DEBUGMODE){ 
  23.   echo " 
  24.  
  25. n"; 
  26.  }else
  27.   echo " 
  28.  
  29. n"; 
  30.  } 
  31.  foreach($instances as $host){ 
  32.   $res = check_mysql_replication_status($host, USERNAME, PASSWORD); 
  33.   if(!DEBUGMODE){ 
  34.    switch($res["result"]){ 
  35.     case -4: 
  36.      $memo = "未知异常"
  37.      break
  38.     case -3: 
  39.      $memo = "查询失败"
  40.      break
  41.     case -2: 
  42.      $memo = "无法连接端口"
  43.      break
  44.     case -1: 
  45.      $memo = "状态未知"
  46.      break
  47.     case 0: 
  48.      $memo = "OK"
  49.      break
  50.     case 1: 
  51.      $memo = "同步失败"
  52.      if($res["Slave_IO_Running"] <> "Yes"){ 
  53.       $memo .= $res["Last_IO_Error"] . "(" .  $res 
  54.  
  55. ["Last_IO_Errno"] . ")"
  56.      } 
  57.      if($res["Slave_SQL_Running"] <> "Yes"){ 
  58.       $memo .= $res["Last_SQL_Error"] . "(" .  $res 
  59.  
  60. ["Last_SQL_Errno"] . ")"
  61.      } 
  62.      break
  63.     case 2: 
  64.      $memo = "数据库未设置同步"
  65.      break
  66.    } 
  67.    echo " 
  68.  
  69. n"; 
  70.   }else
  71.    echo " 
  72.  
  73. n"; 
  74.   } 
  75.  } 
  76.  echo " 
  77. <table border=""
  78. <tbody> 
  79. <tr> 
  80. <td>instance</td> 
  81. <td>result</td> 
  82. <td>Slave_IO_Running</td> 
  83. <td>Slave_SQL_Running</td> 
  84. <td>Master_Host</td> 
  85. <td>Master_Port</td> 
  86. <td>Replicate_Do_DB</td> 
  87. <td>memo</td> 
  88. </tr> 
  89. <tr> 
  90. <td>instance</td> 
  91. <td>result</td> 
  92. <td>Slave_IO_Running</td> 
  93. <td>Slave_SQL_Running</td> 
  94. <td>Master_Host</td> 
  95. <td>Master_Port</td> 
  96. <td>Replicate_Do_DB</td> 
  97. <td>Slave_IO_State</td> 
  98. <td>Last_IO_Errno</td> 
  99. <td>Last_IO_Error</td> 
  100. <td>Last_SQL_Errno</td> 
  101. <td>Last_SQL_Error</td> 
  102. </tr> 
  103. <tr> 
  104. <td>{$host}</td> 
  105. <td>{$res['result']}</td> 
  106. <td>{$res['Slave_IO_Running']}</td> 
  107. <td>{$res['Slave_SQL_Running']}</td> 
  108. <td>{$res['Master_Host']}</td> 
  109. <td>{$res['Master_Port']}</td> 
  110. <td>{$res['Replicate_Do_DB']}</td> 
  111. <td>{$memo}</td> 
  112. </tr> 
  113. <tr> 
  114. <td>{$host}</td> 
  115. <td>{$res['result']}</td> 
  116. <td>{$res['Slave_IO_Running']}</td> 
  117. <td>{$res['Slave_SQL_Running']}</td> 
  118. <td>{$res['Master_Host']}</td> 
  119. <td>{$res['Master_Port']}</td> 
  120. <td>{$res['Replicate_Do_DB']}</td> 
  121. <td>{$res['Slave_IO_State']}</td> 
  122. <td>{$res['Last_IO_Errno']}</td> 
  123. <td>{$res['Last_IO_Error']}</td> 
  124. <td>{$res['Last_SQL_Errno']}</td> 
  125. <td>{$res['Last_SQL_Error']}</td> 
  126. </tr> 
  127. </tbody> 
  128. </table> 
  129. n"; 
  130.  echo << 
  131.  
  132. END
  133. }else
  134.  die("no mysql instances defined."); 
  135. //check_status_api.php 
  136. /* 
  137.  * 检查mysql服务器的同步状态 
  138.  */ 
  139. function check_mysql_replication_status($host$username$password
  140.  //默认状态未知 
  141. //开源代码phpfensi.com 
  142.  $r = array
  143.   "result" => -1 
  144.   ); 
  145.  try{ 
  146.   $dbh = @mysql_connect($host$username$password); 
  147.   if(!$dbh){ 
  148.    //无法连接 
  149.    $r["result"] = -2; 
  150.    return($r); 
  151.   } 
  152.   $query = "SHOW SLAVE STATUS"
  153.   $res = @mysql_query($query$dbh); 
  154.   $err = @mysql_error(); 
  155.   if($err){ 
  156.    //无法连接 
  157.    $r["result"] = -3; 
  158.    return($r); 
  159.   } 
  160.   $row = mysql_fetch_array($res); 
  161.   $r = $row
  162.   if(($r["Slave_IO_Running"] == "Yes") && ($r["Slave_SQL_Running"] == "Yes")) 
  163.   { 
  164.    $r["result"] = 0; 
  165.   }else
  166.    if(!emptyempty($row)){ 
  167.     $r["result"] = 1; 
  168.    }else
  169.     $r["result"] = 2; 
  170.    } 
  171.   } 
  172.  }catch(Exception $e){ 
  173.   $r["result"] = -4; 
  174.  } 
  175.  return($r); 
  176. //mysql_instance.php 
  177. //GRANT REPLICATION CLIENT ON *.* TO '用户名'@'监控主机ip' IDENTIFIED BY '密码';  $mysql_instances = 
  178.  
  179. array();  
  180. $mysql_instances[] = "远程ip:端口";  $mysql_instances[] = "远程ip:端口";  
  181. function get_instances()  
  182. {    
  183. global $mysql_instances;    
  184. return $mysql_instances;   
  185. }   

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

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

Tags: mysql同步状态 php同步状态

分享到: