视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CentOS下编写shell脚本来监控MySQL主从复制的教程
2020-11-09 20:54:00 责编:小采
文档


目的:定时监控MySQL主从数据库是否同步,如果不同步,记录故障时间,并执行命令使主从恢复同步状态

1、创建脚本文件

vi /home/crontab/check_mysql_slave.sh #编辑,添加下面代码

#!/bin/sh

# check_mysql_slave status

ip=eth0 #网卡名称

mysql_binfile=/usr/local/mysql/bin/mysql

mysql_user=root #MySQL数据库账号

mysql_pass=123456 #密码

mysql_sockfile=/tmp/mysql.sock

datetime=`date +"%Y-%m-%d/%H:%M:%S"` #获取当前时间

mysql_slave_logfile=/home/logs/check_mysql_slave.log #日志文件路径,必须提前创建好

slave_ip=`ifconfig $ip|grep "inet addr" | awk -F[:" "]+ '{print $4}'`

status=$($mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "show slave status\G" | grep -i "running")

Slave_IO_Running=`echo $status | grep Slave_IO_Running | awk ' {print $2}'`

Slave_SQL_Running=`echo $status | grep Slave_SQL_Running | awk '{print $2}'`

if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]

then echo "Slave is Running!"

else

echo " $datetime $slave_ip Slave is not running!" >> $mysql_slave_logfile

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SLAVE STOP;"

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SLAVE START;"

$mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "EXIT"

fi

:wq! #保存退出

chmod +x /home/crontab/check_mysql_slave.sh #添加脚本执行权限

2、添加任务计划,修改/etc/crontab

vi /etc/crontab #在最后一行添加

*/10 * * * * root /home/crontab/check_mysql_slave.sh #表示每10分钟执行一次

:wq! #保存退出

3、重新启动crond使设置生效

/etc/rc.d/init.d/crond restart #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装

chkconfig crond on #设为开机启动

service crond start #启动

可以根据日志文件/home/logs/check_mysql_slave.log查看MySQL主从同步状态

PS:接下来这个脚本增加了“当发现同步出现无法同步的时候”会自动提取主库的file号,以及pos,进行同步主库,脚本内容如下:
 

#!/bin/sh
#set -x
#file is slave_repl.sh
#Author by Kevin
#date is 2011-11-13

mstool="/usr/local/mysql-3307/bin/mysql -h 192.168.1.106 -uroot -pw!zl7POg27 -P 3307"
sltool="/usr/local/mysql-3307/bin/mysql -h 192.168.1.107 -uroot -pw!zl7POg27 -P 3307"
declare -a slave_stat
slave_stat=($($sltool -e "show slave status\G"|grep Running |awk '{print $2}'))
if [ "${slave_stat[0]}" = "Yes" -a "${slave_stat[1]}" = "Yes" ]
 then
 echo "OK slave is running"
 exit 0
else
 echo "Critical slave is error"
 echo
 echo "*********************************************************"
 echo "Now Starting replication with Master Mysql!"
 file=`$mstool -e "show master status\G"|grep "File"|awk '{print $2}'` 
 pos=`$mstool -e "show master status\G"|grep "Pos"|awk '{print $2}'` 
 $sltool -e "slave stop;change master to master_host='192.168.1.106',master_port=3307,master_user='repl',master_password='w!zl7POg27',master_log_file='$file',master_log_pos=$pos;slave start;"
 sleep 3
 $sltool -e "show slave status\G;"|grep Running
 echo
 echo "Now Replication is Finished!"
 echo
 echo "**********************************************************"
 exit 2
fi
 
运行后效果,如下:
 
# ./slave_stop3307.sh 
*******************************
Now stop Slave Replication!
 Slave_IO_Running: No
 Slave_SQL_Running: No
*******************************
# ./slave_repl3307.sh 
Critical slave is error
*********************************************************
Now Starting replication with Master Mysql!
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
Now Replication is Finished!
**********************************************************

您可能感兴趣的文章:

  • Shell下实现免密码快速登陆MySQL数据库的方法
  • MySQL数据库的shell脚本自动备份
  • Centos7安装 mysql5.6.29 shell脚本
  • MySQL5.7安装过程并重置root密码的方法(shell 脚本)
  • 实战模拟监控MySQL服务shell脚本小结
  • MySQL的一些功能实用的Linux shell脚本分享
  • shell脚本自动修复mysql损坏的表
  • linux下mysql如何自动备份shell脚本
  • 一个简单的MySQL备份Shell脚本
  • Shell脚本检查IP格式及mysql操作实例
  • 用shell写一个mysql数据备份脚本
  • 下载本文
    显示全文
    专题