zoukankan      html  css  js  c++  java
  • CentOS下编写shell脚本来监控MySQL主从复制的教程

    这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下

    目的:定时监控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 statusG" | 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 statusG"|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 statusG"|grep "File"|awk '{print $2}'` 
        pos=`$mstool -e "show master statusG"|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 statusG;"|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!
    **********************************************************
    
  • 相关阅读:
    资深技术Leader曹乐:如何成为技术大牛
    深入理解golang: interface
    Redis主体流程分析
    为什么我们总爱讨论技术与业务之间的那些是是非非?
    [产品]九卷读书:产品的视角-产品思维框架
    go http server 编程实践及源码分析
    [产品]九卷读书: 产品的视角-产品经理能力模型
    [产品]:腾讯8分钟产品课
    Golang gRPC学习(02): 编写helloworld服务
    括号生成
  • 原文地址:https://www.cnblogs.com/liuyansheng/p/8056374.html
Copyright © 2011-2022 走看看