mysql全量备份、增量备份实现方法
mysql全量备份、增量备份。开启mysql的logbin日志功能。在/etc/my.cnf文件中加入以下代码:
[mysqld] log-bin="/home/mysql/logbin.log" binlog-format=ROW log-bin-index="/home/mysql/logindex" binlog_cache_size=32m max_binlog_cache_size=512m max_binlog_size=512m
重启mysql即可。其中路径/home/mysql的用户和组要改成mysql。
2、增量备份
在/home/mysql/目录下建立以下目录:
mkdir-p/home/mysql/backup/daily
增量备份脚本
cd/home/mysql
vibinlogbak.sh
#!/bin/bash
exportLANG=en_US.UTF-8
BakDir=/home/mysql/backup/daily
BinDir=/home/mysql
LogFile=/home/mysql/backup/binlog.log
BinFile=/home/mysql/logindex.index
mysqladmin-uroot-proot123flush-logs
#这个是用于产生新的mysql-bin.00000*文件
Counter=`wc-l$BinFile|awk'{print$1}'`
NextNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。
forfilein`cat$BinFile`
do
base=`basename$file`
#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
NextNum=`expr$NextNum+1`
if[$NextNum-eq$Counter]
then
echo$baseskip!>>$LogFile
else
dest=$BakDir/$base
if(test-e$dest)
#test-e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
then
echo$baseexist!>>$LogFile
else
cp$BinDir/$base$BakDir
echo$basecopying>>$LogFile
fi
fi
done
echo`date+"%Y年%m月%d日%H:%M:%S"`Bakupsucc!>>$LogFile
赋予binlogbak.sh执行权限
chmoda+x/home/mysql/binlogbak.sh
3、全量备份
vidatabak.sh
#!/bin/bash
exportLANG=en_US.UTF-8
BakDir=/home/mysql/backup
LogFile=/home/mysql/backup/bak.log
Date=`date+%Y%m%d`
Begin=`date+"%Y年%m月%d日%H:%M:%S"`
cd$BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
mysqldump-uroot-proot123--all-databases--flush-logs--delete-master-logs--single-transaction>$DumpFile
tar-czvf$GZDumpFile$DumpFile
rm$DumpFile
count=$(ls-l*.tgz|wc-l)
if[$count-ge5]
then
file=$(ls-l*.tgz|awk'{print$9}'|awk'NR==1')
rm-f$file
fi
#只保留过去四周的数据库内容
Last=`date+"%Y年%m月%d日%H:%M:%S"`
echo开始:$Begin结束:$Last$GZDumpFilesucc>>$LogFile
cd$BakDir/daily
rm-f*
赋予databak.sh执行权限
chmoda+x/home/mysql/databak.sh
4、开启定时任务
vi/etc/crontab #每个星期日凌晨3:00执行完全备份脚本 03**0/home/mysql/databak.sh>/dev/null2>&1 #周一到周六凌晨3:00做增量备份 03**1-6/home/mysql/binlogbak.sh>/dev/null2>&1
使上述定时任务生效
crontab/etc/crontab
查看定时任务
crontab-l
完成。