使用 Xtrabackup实现MySQL定时增量备份

1、Xtrabackup简介html

Percona XtraBackup是一款免费、开源、彻底在线的Percona Server、MySQL或MariaDB备份解决方案。XtraBackup能够实现对事务系统进行无阻塞、强压缩、高安全的备份,而不影响在线运行的业务。其自带的工具innobackupex能够实现对MyISAM、InnoDB类型的表进行备份。mysql

还有如下特色:git

  • 备份快速和可靠github

  • 备份时不中段在线交易事务sql

  • 经过压缩节省存储空间和带宽(经过工具qpress)shell

  • 自动对备份进行校验数据库

  • 恢复还原快速安全

更多介绍,请参数官方网站oracle

2、安装app

系统环境 Linux CentOS 6.5 x86_64

数据库 MySQL 5.1.73

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install percona-xtrabackup-20
yum install qpress

我安装的是2.x的版本,没有安装最新版本,最新版本对某个MySQL 5.1系列不支持了。根据你本身的MySQL版本选择安装。

检查是否安装成功

xtrabackup -v
innobackupex -v
innobackupex-1.5.1 -v

查看安装的路径

#后面的版本号换成你本身安装的
rpm -ql percona-xtrabackup-20

 

3、基本备份流程介绍

XtraBacup主要使用两个命令进行备份:xtrabackup和innobackupex,因主xtrabackup命令不支持MyISAM的备份(不会备份.frm相关文件),而根据业务特色通常两类表存储类型MyISAM和InnoDB均可能有,全部这里只时候介绍使用innobackupex命令的使用。

完整的流程主要有3步:

一、备份(Create) 

二、执行准备操做(Prepare)。即对事务日志进行提交或回滚,准备进行下一步的恢复操做 

三、恢复(Restore)

上面3个步骤中,1和3好理解,第2步要当心些,由于关系你的数据可否正常进行彻底的恢复。MySQL对InnoDB存储类型的全部事务操做都存在数据目录的ibdata1文件里(各位能够查看下该文件每每很是大),若是开了主-从模式的,还有mysql-bin.000x相关日志传输的记录文件,这些记录都跟prepare步聚有关,都是对这些日志的合并的操做了。实践中,只要记住一点:只在要恢复数据库时才行prepare步骤!!看到--apply-log参数时表示都是在合并日志。‍

下面看一个基本的增量备份步骤,全量备份不介绍(实际上增量备份也要一个全量备份,并且全量备份在实践中比较少遇到,通常都是增量备份)。

#准备一个全库备份,备份目录会自动根据当前日期建立,如/path/to/backup/dir/2011-5-23_23-01-18,
#若是不想它建立子目录, 添加参数 --no-timestamp
innobackupex --user=USER --password=PASSWORD /path/to/backup/dir/

#1小时后,执行第1个增量备份,假设$FULLBACKUP=/path/to/backup/dir/2011-5-23_23-01-18,
#/path/to/inc/dir 是增量备份根目录,执行完后假设是/path/to/inc/dir/2011-12-25_00-01-00/
innobackupex --user=USER --password=PASSWORD --incremental /path/to/inc/dir --incremental-basedir=$FULLBACKUP

#好了,若是只是备份,到这里就结束了,下面是开始准备还原了,先执行合并日志的prepare步骤

#################如下为还原数据库的步骤########################################

#还原步骤一、全量备份的重作日志redo log 进行提交
innobackupex --apply-log --redo-only $FULLBACKUP --use-memory=1G --user=USER --password=PASSWORD

#还原步骤二、
#而后逐一对增量备份的事务日志进行合并到全量备份里,有多少个增量就按顺序逐一合并,
#若是增量都是基于全量的最后一个增量,则只对最后一个增量合并就行;
#若是你的增量备份方案是对增量进行增量备份的,则要按顺序逐一合并增量日志!!
innobackupex --apply-log --redo-only $FULLBACKUP --incremental-dir=$INCREMENTALBACKUP --use-memory=1G --user=USER --password=PASSWORD

#还原步骤三、
#prepare的最后一步,对已经合并重作日志redo log的全库 回滚未提交的事件
innobackupex-1.5.1 --apply-log $FULLBACKUP --use-memory=1G --user=$USERNAME --password=$PASSWORD

#还原步骤四、
#恢复。恢复的路径将从my.cnf获取。还原时注意写入目录要为空,通常是 /var/lib/mysql
#先解压缩ibdata1.qp文件
#cat ibdata1.qp |qpress -di . 此步骤不能直接运行,要使用 --apply-log 命令
innobackupex --copy-back /path/to/backup/dir/2011-5-23_23-01-18
chown -R mysql:mysql /var/lib/mysql

 

4、个人备份方案

根据目前业务的特色,我采用的备份方案是天天全量,每2小时增量的方案,同时按期对过时备份进行清理,主要经过一个脚本实现备份的执行。

下载备份shell脚本(注意:此脚本仅此学术研究使用,对于形成的任何风险和损失概不负责)。

crontab -e
0 4,10,12,14,16,18,20 * * * /xxx/scripts/mysql_backup.sh

#注意:上面的执行时间要有一个符合你全备做业的时间。

5、总结

对于任何业务系统,数据都很重要,有一款好的数据备份方案,就有了风险的基本防范措施。本文介绍的XtraBackup工具的使用,在业内仍是比较流行的一种,但愿对你们有所帮助。下一步,能够考虑实现异地容灾等方案,逐步实现数据安全的最大化!

参考文档

Xtrabackup增量备份

https://www.percona.com/doc/percona-xtrabackup/2.2/howtos/recipes_ibkx_inc.html

关于重作日志redo log

https://docs.oracle.com/cd/B28359_01/server.111/b28310/onlineredo001.htm

How InnoDB handles REDO logging

https://www.percona.com/blog/2011/02/03/how-innodb-handles-redo-logging/

<做者 朱淦 350050183@qq.com 2015.11.4>

相关文章
相关标签/搜索