MYSQL二進制日志管理腳本

MYSQL二進制日志管理腳本

 

腳本原理是每小時對數據庫進行flush生成新的二進制日志,將二進制日志備份至NFS,並壓縮存放:

 

#!/bin/bash

#Purpose:管理mysql二進制日志,每小時刷新二進制日志,並將日志復制到nfs服務器上,方便以後恢復和問題分析!

#Author:carl_zhang

#Date:

  www.aiwalls.com  

#some variables 一些參數

#定義數據庫的相關信息

USERNAME=root

PASSWORD=zhang@123

HOSTIP=localhost

MYSQL=/usr/local/mysql/bin/mysql

 

#設置二進制日志的路徑

BIN_LOG_DIR=/data/dbdata

#設置二進制日志備份的路徑

BIN_LOG_BACKUP_DIR=/data/binlog_backup

#定義一個常量來跳過最後一個日志文件

COUNT=0

#定義一個日志文件

LOGFILE=/data/binlog_backup/binlog_backup.log

#找出二進制日志的名稱前綴

BINLOG_PREFIX=`grep "log-bin=" /etc/my.cnf | awk -F'=' '{print $2}'`

#比較二進制日志文件列表和已備份的二進制文件列表

if [ ! -f "$BIN_LOG_BACKUP_DIR/backup.file" ];then

touch $BIN_LOG_BACKUP_DIR/backup.file

fi

#運行文件比較之前先執行一下flush logs

$MYSQL -u$USERNAME -p$PASSWORD -h$HOSTIP -e "flush logs"

FILE_LIST=`comm -23 $BIN_LOG_DIR/$BINLOG_PREFIX.index $BIN_LOG_BACKUP_DIR/backup.file`

#統計日志文件的個數

FILE_COUNT=`comm -23 $BIN_LOG_DIR/$BINLOG_PREFIX.index $BIN_LOG_BACKUP_DIR/backup.file|wc -l`

 

#程序正文

#開始備份二進制日志文件

for file in $FILE_LIST

do

BINLOG_NAME=`basename $file`

let COUNT=$COUNT+1

if [ $COUNT -eq $FILE_COUNT ];then

#跳過最新的那個二進制日志文件

echo "skip the lastest binlog file" >> $LOGFILE

else

cp $BIN_LOG_DIR/$BINLOG_NAME $BIN_LOG_BACKUP_DIR/

if [ $? -eq 0 ];then

echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_NAME backup success" >> $LOGFILE

else

echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_NAME backup faild, Please check it out" >> $LOGFILE  www.aiwalls.com  

exit 5

fi

#對二進制日志進行壓縮存放

gzip $BIN_LOG_BACKUP_DIR/$BINLOG_NAME

if [ $? -eq 0 ];then

echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_NAME gzip success" >> $LOGFILE

else

echo "`date -d "today" +%Y-%m-%d-%H-%M-%S` $BINLOG_NAME gzip faild, Please check it out" >> $LOGFILE

exit 5

fi

echo ./$BINLOG_NAME >> $BIN_LOG_BACKUP_DIR/backup.file

fi

done

 

 

 

作者 飛鴻無痕

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *