本文章介绍两个实例来介绍mysql同步状态检测实现程序有需要的朋友可参考一下。
代码如下复制代码#!/bin/sh#check mysql_slave status#crontab time 00:10mysql_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" ];thenecho "mysql is running!"elsemail -s "warn!server: $MYSQL_IP mysql is down" "$EMAIL"fiif [ "$IO_ENV" = "Yes" -a "$SQL_ENV" = "Yes" ];thenecho "Slave is running!"elseecho "[ $NOW ] Slave is not running!" >> "$MYSQL_SLAVE_LOG"cat "$MYSQL_SLAVE_LOG" | mail -s "WARN! ${MySQL_IP}_replicate_error" "$EMAIL"fiexit 0 php实例代码代码如下复制代码check_rep.phpif(empty($_REQUEST["key"])) die(':) missing key');if($_REQUEST["key"] != 'xupeng') die(':) error key');立即学习“PHP免费学习笔记(深入)”;include("mysql_instance.php");include("check_status_api.php");define("USERNAME", "用户名");define("PASSWORD", "密码");define("DEBUGMODE", false);$instances = get_instances();if($instances){echoEND;echo "n";if(!DEBUGMODE){echo "n";}else{echo "PHP 8.5.5PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。下载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 "instanceresultSlave_IO_RunningSlave_SQL_RunningMaster_HostMaster_PortReplicate_Do_DBmemoinstanceresultSlave_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";echoEND;}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, $username, $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(!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
