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
完成。