mysqldump备份及binlog日志恢复
详情: http://blog.51cto.com/hongge/1862214
1.首先确保已开启binlog日志功能。在my.cnf中包含下面的配置以启用二进制日志:
[mysqld]
log-bin=mysql-bin
2.创建两份脚本文件,一份为增量备份的脚本文件,另一份为全量备份的脚本文件。
//脚本文件放这里
//全量备份脚本start
#!/bin/bash
# Program
# use mysqldump to Fully backup mysql data per week!# History
# Path
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/usr/bin/mysqldump -uroot -proot --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction >$DumpFile
#↑这边放置你的 mysqldump所在地址并加上你连接数据库的账号密码/bin/tar -zvcf $GZDumpFile $DumpFile/bin/rm$DumpFile
Last=`date +"%Y年%m月%d日 %H:%M:%S"`echo 开始:$Begin 结束:$Last $GZDumpFile succ >>$LogFile
cd $BakDir/daily/bin/rm -f *
//全量备份脚本end
//增量备份脚本start
#!/bin/bash
# Program
# usecp to backup mysql data everyday!# History
# Path
#//增量备份时复制mysql-bin.00000*的目标目录,提前手动创建这个目录
BakDir=/home/mysql/backup/daily #备份地址
BinDir=/var/lib/mysql
LogFile=/home/mysql/backup/bak.log #日志地址
BinFile=/var/lib/mysql/mysql-bin.index 获取mysql里的 mysql-bin.index/usr/bin/mysqladmin -uroot -proot flush-logs
#↑获取mysql里的mysqladmin,并填写数据库账户名和密码。(mysqladmin跟全量备份的mysqldump位置一样)
#这个是用于产生新的mysql-bin.00000*文件
Counter=`wc -l $BinFile |awk '{print $1}'`
NextNum=0#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的for file in `cat$BinFile`dobase=`basename $file`
#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [ $NextNum -eq $Counter ]then
echo $base skip! >>$LogFileelsedest=$BakDir/$baseif(test -e $dest)
#test-e用于检测目标文件是否存在,存在就写exist!到$LogFile去then
echo $base exist! >>$LogFileelse
cp $BinDir/$base $BakDirecho $base copying >>$LogFilefi
fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $LogFile
//增量备份脚本end
3.将脚本保存到任意位置,比如root文件中
4.设置crontab任务,执行备份脚本。先执行的是增量备份脚本,然后执行的是全量备份脚本:
[root@test-huanqiu ~]# crontab -e
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /bin/bash -x /root/Mysql-FullyBak.sh >/dev/null 2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /bin/bash -x /root/Mysql-DailyBak.sh >/dev/null 2>&1
#↑脚本路径必须填对
5.测试增量备份与全量备份脚本
先执行增量备份脚本
[root@test-huanqiu backup]# sh /root/Mysql-DailyBak.sh
[root@test-huanqiu backup]# ll
total 8
-rw-r--r--. 1 root root 121 Nov 29 11:29 bak.log
drwxr-xr-x. 2 root root 4096 Nov 29 11:29 daily
[root@test-huanqiu backup]# ll daily/
total 8
-rw-r-----. 1 root root 152 Nov 29 11:29 mysql-binlog.000030
-rw-r-----. 1 root root 152 Nov 29 11:29 mysql-binlog.000031
[root@test-huanqiu backup]# cat bak.log
mysql-binlog.000030 copying
mysql-binlog.000031 copying
mysql-binlog.000032 skip!
2016年11月29日 11:29:32 Bakup succ!
然后执行全量备份脚本
[root@test-huanqiu backup]# sh /root/Mysql-FullyBak.sh
20161129.sql
[root@test-huanqiu backup]# ll
total 152
-rw-r--r--. 1 root root 145742 Nov 29 11:30 20161129.sql.tgz
-rw-r--r--. 1 root root 211 Nov 29 11:30 bak.log
drwxr-xr-x. 2 root root 4096 Nov 29 11:30 daily
[root@test-huanqiu backup]# ll daily/
total 0
[root@test-huanqiu backup]# cat bak.log
mysql-binlog.000030 copying
mysql-binlog.000031 copying
mysql-binlog.000032 skip!
2016年11月29日 11:29:32 Bakup succ!
开始:2016年11月29日 11:30:38 结束:2016年11月29日 11:30:38 20161129.sql.tgz succ
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据。
转自: https://blog.csdn.net/u011746446/article/details/79468977