mysql_binlog备份与恢复
备份:
首先得在my.cnf文件里加上:
log-bin=/mysql/binlog/binlog
expire_logs_days=7
重启mysql服务
service mysqld restart;
binlog备份脚本如下:
!/bin/bash
binlogdir="/mysql/binlog";
bakbinlogdir="/mysql/binlogbak";
dateDIR=$(date -d "yesterday" +"%y-%m-%d")
mkdir -p ${bakbinlogdir}/${dateDIR}
刷新缓存中的日志
mysqladmin -ubackup -ptest flush-logs
7天前的时间
TIME=$(date "-d 7 day ago" +"%Y-%m-%d %H:%M:%S")
1小时前的时间
StartTime=$(date "-d -1 hours" +"%Y-%m-%d %H:%M:%S")
删除7天前的二进制文件
mysql -ubackup -ptest -e "purge master logs before '${TIME}';"
cd ${bakbinlogdir}
针对每个数据库
for db in $(mysql -ubackup -ptest -e "show databases" | grep -ve "Database" -ve "mysql" -ve "test" -ve "information_schema")
do
针对所有的日志文件
for log in $(cat ${binlogdir}/binlog.index)
do
备份每个数据库1小时之前到现在时间的所有日志,写入到相应文件中
mysqlbinlog -ubackup -ptest -d $db --start-datetime="$StartTime" ${log}>>${bakbinlogdir}/$dateDIR/${db}${dateDIR}
done
tar jcvf ${bakbinlogdir}/$dateDIR/${db}${dateDIR}.tar.bz2 ${bakbinlogdir}/$dateDIR/${db}${dateDIR} 2&>/dev/null
rm -rf ${bakbinlogdir}/$dateDIR/${db}${dateDIR}
done
删除15天以前的增量备份文件和目录
find ${bakbinlogdir}/* -mtime +14 -type d -exec rm -rf {} \;
crontab config : 1 sh /root/databackup/script/mysql_binlog_bak.sh >>binlogbak.log 2>&1
还原:
cd /mysql/binlogbak/15-03-03 //去备份的目录
tar -xvf qc_project_15-03-03.tar.bz2
还原:
mysql -ubackup -ptest <qc_project_15-03-03
注意:如果是备份的binlog日志有删除语句,还原时,也会删除数据。