Xtrabackup是一个对InnoDB作数据备份的工具,支持在线热备份(备份时mysql
不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,因此能同时备份处理innodb和myisam,但在处理myisam时须要加一个读锁sql
官网:https://www.percona.com/数据库
Xtrabackup的特性:微信
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上唯一一款开源的可以对innodb和xtradb数据库进行热备的工具。特色:app
(1)备份过程快速、可靠;socket
(2)备份过程不会打断正在执行的事务;工具
(3)可以基于压缩等功能节约磁盘空间和流量;spa
(4)自动实现备份检验;debug
(5)还原速度快;rest
[root@xiaoya ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
[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 ……
[root@xiaoya ~]# yum install percona-xtrabackup-22
[root@xiaoya ~]# rpm -qa percona-xtrabackup-22 percona-xtrabackup-22-2.2.13-1.el6.x86_64
官方原理:
在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)备份等,经过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各类复合备份方式。
[root@xiaoya backup]# innobackupex --defaults-file=/data/3306/my.cnf --user=root --password=123456 --socket=/data/3306/mysql.sock /backup/full --no-timestamp
增量备份数据
####增量备份是基于第一个全备的
[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
增量备份是基于第一次增量备份的
[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
增量备份恢复大致分为三个步郰:
1)、恢复基础备份(全备)
2)、恢复增量备份到基础备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数)
3)、对总体基础备份进行恢复,回滚哪些未提交的数据
全量恢复
[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/
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。喜欢技术的一块儿来交流吧