配色: 字号:
检测mysql同步状态实现代码
2016-08-22 | 阅:  转:  |  分享 
  




































































































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

#!/bin/sh



#checkMySQL_SlaveStatus

#crontabtime00: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=`ifconfigeth0|grep"inetaddr"|awk-F[:""]+''{print$4}''`

MYSQL_SLAVE_STATUS=$(/usr/local/webserver/mysql/bin/mysql-uroot-psylc23hua-S/tmp/mysql.sock-e



"showslavestatusG"|grep-i"running")

IO_ENV=`echo$MYSQL_SLAVE_STATUS|grepIO|awk''{print$2}''`

SQL_ENV=`echo$MYSQL_SLAVE_STATUS|grepSQL|awk''{print$2}''`

NOW=$(date-dtoday+''%Y-%m-%d%H:%M:%S'')



if["$MYSQL_PORT"="3306"];then

echo"mysqlisrunning!"

else

mail-s"warn!server:$MYSQL_IPmysqlisdown""$EMAIL"

fi



if["$IO_ENV"="Yes"-a"$SQL_ENV"="Yes"];then

echo"Slaveisrunning!"

else

echo"[$NOW]Slaveisnotrunning!">>"$MYSQL_SLAVE_LOG"

cat"$MYSQL_SLAVE_LOG"|mail-s"WARN!${MySQL_IP}_replicate_error""$EMAIL"

fi



exit0



php实例代码



代码如下 复制代码

check_rep.php



if(empty($_REQUEST["key"]))die('':)missingkey'');

if($_REQUEST["key"]!=''xupeng'')die('':)errorkey'');



include("mysql_instance.php");

include("check_status_api.php");



define("USERNAME","用户名");

define("PASSWORD","密码");

define("DEBUGMODE",false);



$instances=get_instances();



if($instances){

echo<<







END;

echo"

n";

if(!DEBUGMODE){

echo"



n";

}else{

echo"



n";

}

foreach($instancesas$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;

case0:

$memo="OK";

break;

case1:

$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;

case2:

$memo="数据库未设置同步";

break;

}

echo"



n";

}else{

echo"



n";

}

}

echo"



instanceresultSlave_IO_RunningSlave_SQL_RunningMaster_HostMaster_PortReplicate_Do_DBmemo
instanceresultSlave_IO_RunningSlave_SQL_RunningMaster_HostMaster_PortReplicate_Do_DBSlave_IO_StateLast_IO_ErrnoLast_IO_ErrorLast_SQL_ErrnoLast_SQL_Error
{$host}{$res[''result'']}{$res[''Slave_IO_Running'']}{$res[''Slave_SQL_Running'']}{$res[''Master_Host'']}{$res[''Master_Port'']}{$res[''Replicate_Do_DB'']}{$memo}
{$host}{$res[''result'']}{$res[''Slave_IO_Running'']}{$res[''Slave_SQL_Running'']}{$res[''Master_Host'']}{$res[''Master_Port'']}{$res[''Replicate_Do_DB'']}{$res[''Slave_IO_State'']}{$res[''Last_IO_Errno'']}{$res[''Last_IO_Error'']}{$res[''Last_SQL_Errno'']}{$res[''Last_SQL_Error'']}


n";

echo<<



END;

}else{

die("nomysqlinstancesdefined.");

}

check_status_api.php



/

检查mysql服务器的同步状态

/

functioncheck_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="SHOWSLAVESTATUS";

$res=@mysql_query($query,$dbh);

$err=@mysql_error();

if($err){

//无法连接

$r["result"]=-3;

return($r);

}

$row=mysql_fetch_arrawww.shanxiwang.nety($res);

$r=$row;

if(($r["Slave_IO_Running"]=="Yes")&&($r["Slave_SQL_Running"]=="Yes"))

{

$r["result"]=0;

}else{

if(!empty($row)){

$r["result"]=1;

}else{

$r["result"]=2;

}

}

}catch(Exception$e){

$r["result"]=-4;

}

return($r);

}

mysql_instance.php







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

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

献花(0)
+1
(本文系网络学习天...首藏)
类似文章 更多
发表评论: