接上一篇文章使用Xtrabackup备份MySQL数据库,下面介绍使用Xtrabackup实现MySQL数据库的增量备份
先在users表中插入10条记录,全库做一次全量备份
[root@localhost ~]# mkdir /backup[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock /backup
接下面我们再在表中插入几条新数据
要实现第一次增量备份,可以使用下面的命令进行:# innobackupex --incremental /backup --incremental-basedir=BASEDIR其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。--incremental-basedir应该指向上一次的增量备份所在的目录。--incremental /backup/ 指定增量备份文件备份的目录innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock --incremental /backup --incremental-basedir=/backup/2019-09-15_14-12-17/
下面我们删除几条数据,然后通过之前的增量备份进行还原
“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。(2)基于所有的备份将未提交的事务进行“回滚”。于是,操作就变成了:# innobackupex --apply-log --redo-only BASE-DIR接着执行:# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1而后是第二个增量:# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作下面模拟只有一次增量备份的增量备份还原过程
先确认两个备份目录哪一个是全量备份,哪一个是增量备份
然后进行prepare操作innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock --apply-log --redo-only /backup/2019-09-15_14-12-17/innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock --apply-log --redo-only /backup/2019-09-15_14-12-17/ --incremental-dir=/backup/2019-09-15_14-22-35/ 接下来停掉数据库服务,移除当前的数据库数据目录
service mysqld stopmv /usr/local/mysql/data/ /backup/mysql_data_backup进行备份还原innobackupex --copy-back /backup/2019-09-15_14-12-17/然后chown -R mysql:mysql /usr/local/mysql/data/service mysqld start登录数据库验证是否恢复成功
可以看出增量备份恢复成功
当然有时也可以通过mysqlbinlog来查看某个时间段的二进制日志进行恢复mysqlbinlog --start-datetime="2019-09-15 09:12:51" --stop-datetime="2019-09-15 09:14:00" mysqlbin.000001 > /root/bak.sql--start-datetime : 指定起始的时间点。--stop-datetime: 指定结束的时间点。--start-position: 指定二进制日志开始日志点。--stop-position : 指定二进制日志结束的日志点。上面四个参数可以配合使用然后把上面导出sql文件导入到MySQL服务中。mysql> set sql_log_bin=0; #导入时,若文件较大会产生很多二进制日志文件,可以先把二进制日志文件关闭,mysql> source bak.sql; #导入文件,可以使用mysql直接导入mysql> set sql_log_bin=1; #导入完成之后,开启二进制日志文件具体的操作就不演示了。