加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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实战:php在linux下检测mysql同步状态的方法,希望对您有用。如果有疑问,可以联系我们。

本篇章节讲解php在linux下检测mysql同步状态的办法.分享给大家供大家参考.具体分析如下:PHP教程

这里通过两个实例来介绍mysql同步状态检测实现办法.代码如下:
PHP教程

代码如下:
#!/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()?
{???
global $mysql_instances;???
return $mysql_instances;??
}PHP教程


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

拜访方式:http://ip/check_repl.php?key=xupengPHP教程

希望本文所述对大家的php程序设计有所赞助.PHP教程

欢迎参与《PHP实战:php在linux下检测mysql同步状态的方法》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读