MySQL Binlog Automatic Cleanup script

Source: Internet
Author: User

# vim/data/scripts/delete_mysql_binlog.sh

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 6667686970717273747576777879808182838485868788899091 #!/bin/bash #======================================================================================= #   用于删除 MySQL Master 端已经同步完的 binlog【需在 Master 端运行】,以减少磁盘空间 #   每天凌晨 5:30 分运行一次 # #   注:需在 Slave 端添加允许 Master 端访问的帐号【帐号:check_binlog,密码:binlog_2356】 #          运行于 MySQL Master 端【目前只用于一主一从的同步模式,对于多从的情况暂时未考虑】 #======================================================================================= PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin      ## Slave端连接信息 SLAVE_ADDR="XXX.XXX.XXX.XXX"SLAVE_USER="check_binlog"SLAVE_PWD="binlog_2356"      LOGFILE="/data/logs/db_sync_info.log"PINGFILE="/tmp/mysqlping.log"      ## MySQL状态信息查看命令 SQLCMD="show slave status"      #======================================================================================= ## 检查MySQL是否已经运行 if [[ `ps aux | grep mysql[d] | wc -l` -eq 0 ]]; then    echo The MySQL is not running at: `date +%F" "%H-%M-%S` >> ${LOGFILE}     exit 1 fi      ## 测试Slave端的连通性 nohup mysqladmin -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} ping > ${PINGFILE} retval=`grep "^error" ${PINGFILE}` rm -f ${PINGFILE} if [[ "${retval}X" != "X" ]]; then    echo The MySQL Slave can not be connected at: `date +%F" "%H-%M-%S` >> ${LOGFILE}     exit 1 fi      ## 检查是否合法的Slave MASTER_ADDR=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk ‘$1=="Master_Host:" {print $2}‘` LOCAL_ADDR=`/sbin/ifconfig eth1 | awk -F ‘:‘ ‘/inet addr/{print $2}‘ | sed ‘s/[a-zA-Z ]//g‘` if [[ "${MASTER_ADDR}" != "${LOCAL_ADDR}" ]]; then    echo The MySQL Slave is not lawful at: `date +%F" "%H-%M-%S` >> ${LOGFILE}     exit 1 fi       ## 获得Slave端信息,以此来确定是否处于正常同步的情况 IO_STATUS=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk ‘$1=="Slave_IO_Running:" {print $2}‘` SQL_STATUS=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk ‘$1=="Slave_SQL_Running:" {print $2}‘` if [[ "${IO_STATUS}" != "Yes" || "${SQL_STATUS}" != "Yes" ]]; then    echo The MySQL Replication is not synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}     exit 1 fi      ## 再做一次判断,以保证数据同步绝对正常【创建测试数据】 mysql -uroot -e "create database if not exists mytestdb;"sleep 3       retval=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "show databases;" | grep mytestdb` mysql -uroot -e "drop database if exists mytestdb;"if [[ "${retval}X" = "X" ]]; then    echo The MySQL Replication is not synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}     exit 1 fi      ## 在已经同步的情况,还需要判断当前同步的binlog,以此来确定哪些已经是过期的binlog SLAVE_BINLOG1=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk ‘$1=="Master_Log_File:" {print $2}‘` SLAVE_BINLOG2=`mysql -h${SLAVE_ADDR} -u${SLAVE_USER} -p${SLAVE_PWD} -e "${SQLCMD}\G;" | awk ‘$1=="Relay_Master_Log_File:" {print $2}‘` ## 获得Master端,当前的binlog文件以及binlog路径 MASTER_BINLOG=`mysql -uroot -e "show master status;" | grep -v ‘^+‘ | tail -1 | awk ‘{print $1}‘`       ## 主从端已经同步到相同的binlog if [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then    CURR_BINLOG="${MASTER_BINLOG}"         ## 主从端已经同步,但从端的binlog还没有追赶到主端最新的binlog elif [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" != "${MASTER_BINLOG}" ]]; then    CURR_BINLOG="${SLAVE_BINLOG1}"         ## 主从端已经同步,主从端的binlog一致,但relaylog还不一致 elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then    CURR_BINLOG="${SLAVE_BINLOG2}"         else    echo Has noknown error at:`date +%F" "%H-%M-%S` >> ${LOGFILE}     exit 1 fi      mysql -uroot -e "purge binary logs to ‘${CURR_BINLOG}‘;"if [[ $? -eq 0 ]]; then    echo Clear MySQL binlog is ok at: `date +%F" "%H-%M-%S` >> ${LOGFILE} fi

# Crontab-e

* * * * */data/scripts/delete_mysql_binlog.sh >/dev/null 2>&1


This article is from the "Target: India" blog, please be sure to keep this source http://shunzi115.blog.51cto.com/5184443/1827022

MySQL Binlog Automatic Cleanup script

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.