MySQL备份工具之xtrabackup

原创
2016/12/20 10:52
阅读数 2.2K

1、xtrabackup简介

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时

不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
  Xtrabackup有两个主要的工具:xtrabackup、innobackupex
  (1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
  (2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁

官网:https://www.percona.com/

 

Xtrabackup的特性:

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

2、xtrabackup的安装

2.1 Install the Percona repository

[root@xiaoya ~]# yum install

http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

2.2 Testing the repository

[root@xiaoya ~]# yum list | grep percona

……

percona-xtrabackup-22.x86_64                2.2.13-1.el6                percona-xtrabackup.x86_64                   2.3.3-1.el6                 percona-xtrabackup-20.x86_64                2.0.8-587.rhel6             percona-xtrabackup-20-debuginfo.x86_64      2.0.8-587.rhel6             percona-xtrabackup-20-test.x86_64           2.0.8-587.rhel6             percona-xtrabackup-21.x86_64                2.1.9-746.rhel6             percona-xtrabackup-21-debuginfo.x86_64                                2.1.9-746.rhel6            

percona-xtrabackup-22-debuginfo.x86_64                                   2.2.13-1.el6               

percona-xtrabackup-debuginfo.x86_64        2.3.3-1.el6                 percona-xtrabackup-test.x86_64                                            2.3.3-1.el6                

percona-xtrabackup-test-21.x86_64           2.1.9-746.rhel6             percona-xtrabackup-test-22.x86_64                                        2.2.13-1.el6               

……

2.3 Install the packages

[root@xiaoya ~]# yum install percona-xtrabackup-22

2. 4 check tish packages

[root@xiaoya ~]# rpm -qa percona-xtrabackup-22

percona-xtrabackup-22-2.2.13-1.el6.x86_64

3、xtrabackup备份的原理

官方原理:

在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。

上面就是xtrabackup的备份过程。接下来是准备(prepare)过程。在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像MySQL刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了。

以上的过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。

备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以MyISAM表数据与InnoDB表数据是同步的。类似Oracle的,InnoDB的prepare过程可以称为recover(恢复),MyISAM的数据复制过程可以称为restore(还原)。

xtrabackup和innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。

 

 

4、数据库增量备份案例分析

4.1 增量备份之前的全量备份

[root@xiaoya backup]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --socket=/data/3306/mysql.sock /backup/full --no-timestamp

4.2 第一次增量备份

增量备份数据

####增量备份是基于第一个全备的

[root@xiaoya inc_1]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456  --socket=/data/3306/mysql.sock --incremental-basedir=/backup/full --incremental /backup/inc_1 --no-timestamp --parallel=2

4.3 第二次增量备份

增量备份是基于第一次增量备份的

[root@xiaoya backup]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --socket=/data/3306/mysql.sock --incremental-basedir=/backup/inc_1 --incremental /backup/inc_2 --no-timestamp --parallel=2

5、通过备份恢复数据

增量备份恢复大体分为三个步郰:

1)、恢复基础备份(全备)

2)、恢复增量备份到基础备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数)

3)、对整体基础备份进行恢复,回滚哪些未提交的数据

5.1 数据恢复

全量恢复

[root@xiaoya inc_2]# innobackupex --apply-log --redo-only --use-memory=500m /backup/full

将增量备份inc_1应用到基础备份2015-12-29_14-35-13:(使用redo-only参数,只应用哪些已经提交的事务,而不回滚那些未提交的事务)

[root@xiaoya ~]# innobackupex --user=root --password=123456 --apply-log --use-memory=500m /backup/full/ --redo-only --incremental-dir=/backup/inc_1/

将增量备份inc_2应用到全备full(不使用redo-only,回滚哪些未提交的事务)

[root@xiaoya ~]# innobackupex --user=root --password=123456 --apply-log --use-memory=500m /backup/full/ --incremental-dir=/backup/inc_2

把所有那些合在一起的备份进行应用,并回滚未提交的事务

[root@xiaoya ~]# innobackupex --user=root --password=123456 --apply-log --use-memory=500m /backup/full/

5.2 把恢复完的备份数据拷贝到数据库数据存储的目录下:

1)、关闭数据库

[root@xiaoya ~]# /data/3306/mysql stop

Stoping MySQL...

[root@xiaoya ~]# lsof -i:3306

建立新的数据库存储目录

[root@xiaoya 3306]# mv data data.rep1

[root@xiaoya 3306]# mkdir data

查看最近一次的备份

[root@xiaoya full]# ls -lt

[root@xiaoya full]# ls -lt

总用量 231468

-rw-r----- 1 root root 134217728 12月 29 22:20 ibdata1

-rw-r--r-- 1 root root  50331648 12月 29 22:20 ib_logfile0

-rw-r----- 1 root root       113 12月 29 22:20 xtrabackup_checkpoints

-rw-r--r-- 1 root root        32 12月 29 22:20 xtrabackup_binlog_pos_innodb

-rw-r--r-- 1 root root  50331648 12月 29 22:20 ib_logfile1

-rw-r----- 1 root root       618 12月 29 22:19 xtrabackup_info

-rw-r----- 1 root root        21 12月 29 22:19 xtrabackup_binlog_info

drwx------ 2 root root      4096 12月 29 22:19 mysql

drwx------ 2 root root      4096 12月 29 22:19 performance_schema

drwx------ 2 root root      4096 12月 29 22:19 test

drwx------ 2 root root      4096 12月 29 22:19 2015-12-29_15-39-37

drwx------ 2 root root      4096 12月 29 22:19 2015-12-29_15-39-52

drwx------ 2 root root      4096 12月 29 22:19 2015-12-29_15-36-19

-rw-r----- 1 root root   2097152 12月 29 22:18 xtrabackup_logfile

-rw-r----- 1 root root       386 12月 29 22:11 backup-my.cnf

 

选择最后合成的备份目录:2015-12-29_15-39-37

拷贝备份数据到数据库存储目录

[root@xiaoya 3306]# innobackupex --defaults-file=/data/3306/my.cnf --copy-back /backup/full/

 

PS:这是很久以前整理的,没有保存参考资料,如有雷同,请作者见谅。

 

为了方便大家交流,本人开通了微信公众号,和QQ群291519319。喜欢技术的一起来交流吧

展开阅读全文
打赏
2
95 收藏
分享
加载中
更多评论
打赏
0 评论
95 收藏
2
分享
返回顶部
顶部