php在linux下检测mysql同步状态的方法
发布时间:2020-12-13 02:20:49 所属栏目:PHP教程 来源:网络整理
导读:《PHP实战:php在linux下检测mysql同步状态的方法》要点: 本文介绍了PHP实战:php在linux下检测mysql同步状态的方法,希望对您有用。如果有疑问,可以联系我们。 本篇章节讲解php在linux下检测mysql同步状态的办法.供大家参考研究.具体分析如下: P
《PHP实战:php在linux下检测mysql同步状态的方法》要点: 本篇章节讲解php在linux下检测mysql同步状态的办法.分享给大家供大家参考.具体分析如下:PHP教程 这里通过两个实例来介绍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,$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()? 将以上三个PHP文件放在虚拟目录中,然后通过URL拜访. 拜访方式:http://ip/check_repl.php?key=xupengPHP教程 希望本文所述对大家的php程序设计有所赞助.PHP教程 欢迎参与《PHP实战:php在linux下检测mysql同步状态的方法》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |