MySQL主从状态检查sheel脚本

以下脚本可以在任意有mysql客户端的机器执行;检查配置的丛机ip相关的主从同步状态,并将结果返回;返回0为正常;1为异常。可结合邮件报警脚本使用。
脚本参考了其他网络资源,侵删。

#!/bin/bash
#mysql链接端口
PORT='3306'
#mysql用户名
USER='root'
#mysql密码
PASSWORD_MYSQL='Bocom_123'
#丛机ip地址
SLAVE_IP=127.0.0.1
#定义一个绿色输出的函数
function echo_green {
        echo -e "\033[32m$1\033[0m"
}
#以上为需要修改的配置信息
DATE=`date +%Y-%m-%d-%H-%M-%S`

echo_green $DATE
#判断是否为root用户
user=$(whoami)
echo $user
if [ "$user" != "root" ];then
   echo_green "不是root用户,请切换到root用户执行!"
   exit
fi
 
HOST_IP=$SLAVE_IP
	RESULT=1;
	check_master_slave_relation(){
		#读Slave_IO_Running是否为yes
		vIO=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Slave_IO_Running/' | awk -F ":" '{print $2}')
	#	echo "vIO=$vIO----"
		
		#读Slave_SQL_Running是否为yes
		vSQL=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Slave_SQL_Running:/' | awk -F ":" '{print $2}')
	#	echo "vSQL=$vSQL----"
		
		#读取主从延迟值
		vdelay=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Seconds_Behind_Master/' | awk -F ":" '{print $2}')
	#    echo "vdelay=$vdelay---"
		
		if [ $vIO = "" ];
		then
			echo_green "the username or password is wrong,or the mysql server is down,so we can not get value" 
		#表示主从同步错误
		return 	1	
		else 
			 #此处不能有空格
			if [ $vIO = 'Yes' ];
			then
			   #此处必须有空格
				if [ "$vSQL" = ' Yes' ];
				then
					#判断sql进程是否出现延迟
					echo_green "同步时延:$vdelay 秒"
					if [ $vdelay != 0  ];
					then
					
						if [ $vdelay -ge 60 ];
						then
							content3="${HOST_IP}: the status of io process and sql process is yes,but slave delayed $vdelay seconds,more than 1 minutes"
							echo_green "$content3"
							#表示主从同步错误
							return 1
						else
							echo_green "${HOST_IP} the status of io process and sql process is yes,but slave delayed $vdelay seconds,less than 1 minutes"
							#表示主从同步正常
							return 0
						fi
					else
						echo_green "There is no problem"
						#主从同步关系正常
						return 0
					fi
				else
					content2=$HOST_IP" Slave_IO_Running status:$vIO,Slave_SQL_Running status:$vSQL,please deal with it as soon as possible!"
					#主从同步关系错误
					return 1
					echo_green "$content2"
				fi
			else
			   content1=$HOST_IP" Slave_IO_Running status:$vIO,Slave_SQL_Running status:$vSQL,please deal with it as soon as possible!"  
			   echo_green $content1
			   #主从同步关系错误
			   return 1
			   
			fi
		fi
	}
	#第一个参数为对应MASTER的IP地址

	check_master_slave_relation
	RELATION_CHECK_RESULT=$?
	MASTER_HOST=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Master_Host:/' | awk -F ":" '{print $2}')
	 
    echo_green "检查主从关系失败,请手动修复主从后重试"	
	#返回检查结果给调用者
	return $RELATION_CHECK_RESULT	
 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MySQL 主从状态检查的 shell 脚本: ```bash #!/bin/bash # MySQL 主服务器信息 MASTER_HOST="master.example.com" MASTER_USER="root" MASTER_PASS="password" # MySQL 从服务器信息 SLAVE_HOST="slave.example.com" SLAVE_USER="root" SLAVE_PASS="password" # 检查主服务器状态 MASTER_STATUS=$(mysql -h $MASTER_HOST -u $MASTER_USER -p$MASTER_PASS -e "SHOW MASTER STATUS") MASTER_LOG_FILE=$(echo $MASTER_STATUS | awk '{print $1}') MASTER_LOG_POS=$(echo $MASTER_STATUS | awk '{print $2}') # 检查从服务器状态 SLAVE_STATUS=$(mysql -h $SLAVE_HOST -u $SLAVE_USER -p$SLAVE_PASS -e "SHOW SLAVE STATUS\G") SLAVE_IO_RUNNING=$(echo $SLAVE_STATUS | grep "Slave_IO_Running" | awk '{print $2}') SLAVE_SQL_RUNNING=$(echo $SLAVE_STATUS | grep "Slave_SQL_Running" | awk '{print $2}') SLAVE_IO_ERROR=$(echo $SLAVE_STATUS | grep "Last_IO_Error" | awk '{print $2}') SLAVE_SQL_ERROR=$(echo $SLAVE_STATUS | grep "Last_SQL_Error" | awk '{print $2}') # 检查主从同步状态 if [ "$SLAVE_IO_RUNNING" == "Yes" ] && [ "$SLAVE_SQL_RUNNING" == "Yes" ]; then echo "Replication is running. Master log file: $MASTER_LOG_FILE, position: $MASTER_LOG_POS" else echo "Replication is not running." echo "Slave_IO_Running: $SLAVE_IO_RUNNING" echo "Slave_SQL_Running: $SLAVE_SQL_RUNNING" echo "Last_IO_Error: $SLAVE_IO_ERROR" echo "Last_SQL_Error: $SLAVE_SQL_ERROR" fi ``` 该脚本会连接到主服务器和从服务器,分别检查它们的状态。如果主从同步正常运行,则会输出主服务器的日志文件和位置。如果主从同步出现问题,则会输出相关错误信息。请注意,这只是一个简单的示例脚本,您可能需要根据自己的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值