Mysql二進制日志管理腳本

Mysql運行很長時間以后會導致二進制很大或者很多,需要定期備份清理。

二進制日志清理:
mysql提供expire-logs-days變量用以清理過期日志。
默認為0表示不清理,最大值為99天。
可以在my.cnf添加: 表示刪除5天以前的二進制日志
expire-logs-days = 5
set global expire_logs_days=5; //全局會話設置日志過期時間
# 日志查看
show binary logs;
show master logs;
flush logs; //二進制日志滾動
reset master; //重置二進制日志,

二進制日志備份:
通過nfs自動備份至其他Server
安裝NFS:客戶端需要安裝,否則客戶端在mount時,指定nfs掛載失敗。

Centos6服務端:
yum install -y nfs-utils rpcbind
vi /etc/exports
  /data/binlog_backup 192.168.3.6(rw,sync,no_root_squash)  *(ro)

客戶端:
mount -t nfs 192.168.10.27:/data/binlog_backup /data/binlog_backup
# 將此掛載命令寫入:/etc/rc.d/rc.local

備份腳本:參考博客http://blog.chinaunix.net/uid-20639775-id-3209044.html

#!/bin/bash
#Date:2017-05-09

USER=root
PASS=123456
HOST=localhost
MYSQL="/usr/local/mysql/bin/mysql"

# binlog
BINLOG=`grep "log-bin=" /etc/my.cnf | grep -v "^#" | awk -F"=" '{print $2}'`
BIN_LOG_DIR=`dirname $BINLOG`
BIN_LOG_FILE=`basename $BINLOG`

# binlog backup dir
BIN_LOG_BACKUP_DIR="/data/binlog_backup"
BACKUPFILE="$BIN_LOG_BACKUP_DIR/backup.file"
LOGFILE="$BIN_LOG_BACKUP_DIR/binlog_backup.log"
[ ! -d "$BIN_LOG_BACKUP_DIR" ] && mkdir -p $BIN_LOG_BACKUP_DIR
[ ! -f "$LOGFILE" ] && touch "$LOGFILE"
[ ! -f "$BACKUPFILE" ] && touch "$BACKUPFILE"

# flush logs
$MYSQL -u$USER -h$HOST -p$PASS -e "flush logs"

# backup file list 
FILE_LIST=`comm -23 $BINLOG.index $BACKUPFILE`  #沒有備份的二進制文件列表
FILE_COUNT=`comm -23 $BINLOG.index $BACKUPFILE|wc -l`   #執行此腳本時,FILE_COUNT一定是大于或者等于1
COUNT=0    

# running binlog backup
for file in $FILE_LIST;do
    BINLOG_FILE=`basename $file`
    let COUNT=$COUNT+1    
    if [ $COUNT -eq $FILE_COUNT ];then    #跳過mysql當前正在使用的二進制日志
        echo "skip the lastest binlog file" >> $LOGFILE
    else
    cp $BIN_LOG_DIR/$BINLOG_FILE $BIN_LOG_BACKUP_DIR/
    if [ $? -eq 0 ];then
        echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_FILE backup success" >> $LOGFILE
    else 
        echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_FILE backup faild,please check it out" >> $LOGFILE
            exit 5
    fi
    # gzip
    gzip $BIN_LOG_BACKUP_DIR/$BINLOG_FILE
    if [ $? -eq 0 ];then
        echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_FILE gzip success" >> $LOGFILE
    else
        echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_FILE gzip faild,please check it out" >> $LOGFILE
        exit 6
    fi
    echo $file >> $BACKUPFILE
    fi
done
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • MySQL的二進制日志(binary log)是一個二進制文件,主要用于記錄修改數據或有可能引起數據變更的MySQ...
    時待吾閱讀 2,051評論 0 1
  • 日志文件對于一個服務器來說是非常重要的,它記錄著服務器的運行信息,許多操作都會寫日到日志文件,通過日志文件可以監視...
    時待吾閱讀 1,036評論 0 5
  • 目錄: 1.查詢日志 2.慢查詢日志 3.錯誤日志 4.二進制日志 5.中斷日志 6.事物日志 一、查詢日志 ge...
    BossHuang閱讀 2,534評論 0 0
  • 今天在處理業務庫中二進制文件的時候,想更改二進制文件的過期天數,發現日期如果設置成2位以上的整數。都會出現如下的警...
    tonywu閱讀 1,238評論 0 1
  • 我們一直生活在幸福里,因為幸福過于完美,所以感覺不到,反倒覺得缺少點什么,直到這種完美被打破,失去了一些生命里寶貴...
    關中人閱讀 691評論 0 1