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

php在linux下检测mysql同步状态的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-08 11:34:31 浏览: 评论:0 

这篇文章主要介绍了php在linux下检测mysql同步状态的方法,是Linux下使用php检测mysql同步状态的实用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了php在linux下检测mysql同步状态的方法。分享给大家供大家参考。具体分析如下:

这里通过两个实例来介绍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实例代码,代码如下:

check_rep.php:

  1. if(emptyempty($_REQUEST["key"])) die(':) missing key'); 
  2. if($_REQUEST["key"] != 'xupeng'die(':) error key'); 
  3.  
  4. include("mysql_instance.php"); 
  5. include("check_status_api.php"); 
  6.  
  7. define("USERNAME""用户名"); 
  8. define("PASSWORD""密码"); 
  9. define("DEBUGMODE", false); 
  10.  
  11. $instances = get_instances(); 
  12.  
  13. if($instances){ 
  14.  echo << 
  15.  
  16. <!-- 30分钟自动刷新 --> 
  17.  
  18. END
  19.  echo " 
  20. n"; 
  21.  if(!DEBUGMODE){ 
  22.   echo " 
  23. n"; 
  24.  }else
  25.   echo " 
  26. n"; 
  27.  } 
  28.  foreach($instances as $host){ 
  29.   $res = check_mysql_replication_status($host, USERNAME, PASSWORD); 
  30.   if(!DEBUGMODE){ 
  31.    switch($res["result"]){ 
  32.     case -4: 
  33.      $memo = "未知异常"
  34.      break
  35.     case -3: 
  36.      $memo = "查询失败"
  37.      break
  38.     case -2: 
  39.      $memo = "无法连接端口"
  40.      break
  41.     case -1: 
  42.      $memo = "状态未知"
  43.      break
  44.     case 0: 
  45.      $memo = "OK"
  46.      break
  47.     case 1: 
  48.      $memo = "同步失败"
  49.      if($res["Slave_IO_Running"] <> "Yes"){ 
  50.       $memo .= $res["Last_IO_Error"] . "(" .  $res 
  51.  
  52. ["Last_IO_Errno"] . ")"
  53.      } 
  54.      if($res["Slave_SQL_Running"] <> "Yes"){ 
  55.       $memo .= $res["Last_SQL_Error"] . "(" .  $res 
  56.  
  57. ["Last_SQL_Errno"] . ")"
  58.      } 
  59.      break
  60.     case 2: 
  61.      $memo = "数据库未设置同步"
  62.      break
  63.    } 
  64.    echo " 
  65.  
  66. n"; 
  67.   }else
  68.    echo " 
  69.  
  70. n"; 
  71.   } 
  72.  } 
  73.  echo " 
  74. <table border=""
  75. <tbody> 
  76. <tr> 
  77. <td>instance</td> 
  78. <td>result</td> 
  79. <td>Slave_IO_Running</td> 
  80. <td>Slave_SQL_Running</td> 
  81. <td>Master_Host</td> 
  82. <td>Master_Port</td> 
  83. <td>Replicate_Do_DB</td> 
  84. <td>memo</td> 
  85. </tr> 
  86. <tr> 
  87. <td>instance</td> 
  88. <td>result</td> 
  89. <td>Slave_IO_Running</td> 
  90. <td>Slave_SQL_Running</td> 
  91. <td>Master_Host</td> 
  92. <td>Master_Port</td> 
  93. <td>Replicate_Do_DB</td> 
  94. <td>Slave_IO_State</td> 
  95. <td>Last_IO_Errno</td> 
  96. <td>Last_IO_Error</td> 
  97. <td>Last_SQL_Errno</td> 
  98. <td>Last_SQL_Error</td> 
  99. </tr> 
  100. <tr> 
  101. <td>{$host}</td> 
  102. <td>{$res['result']}</td> 
  103. <td>{$res['Slave_IO_Running']}</td> 
  104. <td>{$res['Slave_SQL_Running']}</td> 
  105. <td>{$res['Master_Host']}</td> 
  106. <td>{$res['Master_Port']}</td> 
  107. <td>{$res['Replicate_Do_DB']}</td> 
  108. <td>{$memo}</td> 
  109. </tr> 
  110. <tr> 
  111. <td>{$host}</td> 
  112. <td>{$res['result']}</td> 
  113. <td>{$res['Slave_IO_Running']}</td> 
  114. <td>{$res['Slave_SQL_Running']}</td> 
  115. <td>{$res['Master_Host']}</td> 
  116. <td>{$res['Master_Port']}</td> 
  117. <td>{$res['Replicate_Do_DB']}</td> 
  118. <td>{$res['Slave_IO_State']}</td> 
  119. <td>{$res['Last_IO_Errno']}</td> 
  120. <td>{$res['Last_IO_Error']}</td> 
  121. <td>{$res['Last_SQL_Errno']}</td> 
  122. <td>{$res['Last_SQL_Error']}</td> 
  123. </tr> 
  124. </tbody> 
  125. </table> 
  126. n"; 
  127.  echo << 
  128.  
  129. END
  130. }else
  131.  die("no mysql instances defined."); 

check_status_api.php:

  1. /* 
  2.  * 检查mysql服务器的同步状态 
  3.  */ 
  4. function check_mysql_replication_status($host$username$password
  5.  //默认状态未知 
  6.  $r = array
  7.   "result" => -1 
  8.   ); 
  9.  try{ 
  10.   $dbh = @mysql_connect($host$username$password); 
  11.   if(!$dbh){ 
  12.    //无法连接 
  13.    $r["result"] = -2; 
  14.    return($r); 
  15.   } 
  16.   $query = "SHOW SLAVE STATUS"
  17.   $res = @mysql_query($query$dbh); 
  18.   $err = @mysql_error(); 
  19.   if($err){ 
  20.    //无法连接 
  21.    $r["result"] = -3; 
  22.    return($r); 
  23.   } 
  24.   $row = mysql_fetch_array($res); 
  25.   $r = $row
  26.   if(($r["Slave_IO_Running"] == "Yes") && ($r["Slave_SQL_Running"] == "Yes")) 
  27.   { 
  28.    $r["result"] = 0; 
  29.   }else
  30.    if(!emptyempty($row)){ 
  31.     $r["result"] = 1; 
  32.    }else
  33.     $r["result"] = 2; 
  34.    } 
  35.   } 
  36.  }catch(Exception $e){ 
  37.   $r["result"] = -4; 
  38.  } 
  39.  return($r); 

mysql_instance.php:

  1. //GRANT REPLICATION CLIENT ON *.* TO '用户名'@'监控主机ip' IDENTIFIED BY '密码';  $mysql_instances = 
  2.  
  3. array();  
  4. $mysql_instances[] = "远程ip:端口";  
  5. function get_instances()  
  6. {    
  7. global $mysql_instances;    
  8. return $mysql_instances;   

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

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

Tags: linux检测 mysql同步状态

分享到: