mysql主從同步檢測

來源:互聯網
上載者:User

標籤:status   mysql   local   檢測   

檢查mysql主從同步#!/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin    LOGFILE=/data/repair_mysql_sync_`date +%F`.logSQLCMD1="show slave status"    ## 查看MySQL是否已啟動if [[ `ps aux | grep mysqld | grep -v grep`"X" = "X" ]]; then    echo The MySQL is not running at: `date +%F" "%H-%M-%S` >> ${LOGFILE}    exit 1fi    ## 獲得MySQL從端Relay binlog的路徑retval=`grep "^relay-log" /etc/my.cnf | grep -v relay-log- | grep ‘/‘`if [[ "${retval}" = "X" ]]; then    RELAY_BINLOG_PATH=`ps aux | grep -w mysqld | grep -v grep | awk ‘{print $13}‘ | awk -F ‘=‘ ‘{print $2}‘`else    RELAY_BINLOG_PATH=`dirname $(echo ${retval} | awk -F ‘=‘ ‘{print $2}‘)`fi    ## 尋找master.info檔案,用於定位Binlog資訊MASTER_FILE=`ps aux | grep -w mysqld | grep -v grep | awk ‘{print $13}‘ | awk -F ‘=‘ ‘{print $2}‘`/master.infoif [[ ! -e ${MASTER_FILE} ]]; then   echo This Server is not MySQL Slave at: `date +%F" "%H-%M-%S` >> ${LOGFILE}   exit 1fi    ## 獲得當前的同步狀態IO_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Slave_IO_Running:" {print $2}‘`SQL_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Slave_SQL_Running:" {print $2}‘`if [[ "${IO_STATUS}" = "Yes" && "${SQL_STATUS}" = "Yes" ]]; then   echo Now, The MySQL Replication is synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}   exit 0fi    ## 從master.info檔案中,獲得MySQL主端的同步資訊REPLI_INFO=`sed ‘/^$/d‘ ${MASTER_FILE} | tail +2 | head -5`REPLI_BINLOG_FILE=`echo ${REPLI_INFO} | awk ‘{print $1}‘`REPLI_IPADDR=`echo ${REPLI_INFO} | awk ‘{print $3}‘`REPLI_USER=`echo ${REPLI_INFO} | awk ‘{print $4}‘`REPLI_PWD=`echo ${REPLI_INFO} | awk ‘{print $5}‘`    ## 刪除無用的Relay binlogrm -rf ${RELAY_BINLOG_PATH}/*-relay-bin.*    ## 直接從0位置開始同步SQLCMD2="change master to master_host=‘${REPLI_IPADDR}‘, master_user=‘${REPLI_USER}‘, master_password=‘${REPLI_PWD}‘,"SQLCMD2="${SQLCMD2} master_log_file=‘${REPLI_BINLOG_FILE}‘, master_log_pos=0"mysql -uroot -e "stop slave;"mysql -uroot -e "${SQLCMD2};"mysql -uroot -e "start slave;"    ## 如果同步的過程中,出現重複記錄導致同步失敗,就跳過while truedo    sleep 2    IO_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Slave_IO_Running:" {print $2}‘`    SQL_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Slave_SQL_Running:" {print $2}‘`    BEHIND_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Seconds_Behind_Master:" {print $2}‘`    SLAVE_BINLOG1=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Master_Log_File:" {print $2}‘`    SLAVE_BINLOG2=`mysql -uroot -e "${SQLCMD1}\G;" | awk ‘$1=="Relay_Master_Log_File:" {print $2}‘`           ## 出現錯誤,就將錯誤資訊記錄到記錄檔,並跳過錯誤繼續同步    if [[ "${IO_STATUS}" != "Yes" || "${SQL_STATUS}" != "Yes" ]]; then        ERRORINFO=`mysql -uroot -e "${SQLCMD1}\G;" | awk -F ‘: ‘ ‘$1=="Last_Error" {print $2}‘`        echo "The MySQL synchronous error information: ${ERRORINFO}" >> ${LOGFILE}        mysql -uroot -e "stop slave;"        mysql -uroot -e "set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"        mysql -uroot -e "start slave;"               ## 已完成同步,就正常退出    elif [[ "${IO_STATUS}" = "Yes" && "${SQL_STATUS}" = "Yes" && "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && ${BEHIND_STATUS} -eq 0 ]]; then        echo The MySQL synchronous is ok at: `date +%F" "%H-%M-%S` >> ${LOGFILE}        break    fidone

本文出自 “江湖笑笑生” 部落格,請務必保留此出處http://hashlinux.blog.51cto.com/9647696/1865729

mysql主從同步檢測

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.