XtraBackup联机备份:
- 专注于InnoDB、XtraBackup的热备工具,是C语言开发的程序,专用于备份InnoDB及XtraDB引擎对象
- 备份集高效、完整、可用
- 备份任务执行过程中不会阻塞事务
- 节省磁盘空间,降低网络带宽占用
- 备份集自动验证机制
- 恢复更快
[root@mysql1 /]# rpm -ivh percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm[mysql@mysql1 ~]$ echo "export PATH=/usr/bin:$PATH" >> /home/mysql/.bash_profile(system@localhost) [(none)]> create user xtrabk@"localhost" identified by "onlybackup";(system@localhost) [(none)]> grant reload,lock tables,Replication client,super on *.* to xtrabk@"localhost";[mysql@mysql1 ~]$ xtrabackup -help使用xtrabackup命令进行备份xtrabackup命令有两种模式,--backup(备份模式)和--prepara(恢复准备模式)--backup指定当前的操作模式,backup就是说要创建备份集--target-dir指定备份集的存储路径--defaults-file从MySQL的选项文件中读取参数[mysql@mysql1 ~]$ xtrabackup --defaults-file=/data/mysqldata/3306/my.cnf --backup --target-dir=/data/mysqldata/backup/full_bak 使用innobackupex命令进行备份,还能备份非InnoDB对象,innobackupex内部调用xtrabackup进行备份[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" /data/mysqldata/backup/创建增量备份:在上一步全量备份完成后,修改InnoDB表的数据,进行第一次增量备份[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" --incremental --incremental-basedir=/data/mysqldata/backup/2014-07-10_09-29-32 /data/mysqldata/backup_inc1)在做完第一次增量备份后,继续修改InnoDB表的数据,进行第二次增量备份[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" --incremental --incremental-basedir=/data/mysqldata/backup/2014-07-10_09-29-32 /data/mysqldata/backup_inc此种方式对应Oracle的累积增量备份2)在做完第一次增量备份后,继续修改InnoDB表的数据,进行第二次增量备份[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" --incremental --incremental-basedir=/data/mysqldata/backup_inc/2014-07-10_09-31-36 /data/mysqldata/backup_inc此种方式对应Oracle的差异增量备份--incremental:告诉xtrabackup这次是要创建增量备份--incremental-basedir:指定一个全量备份的路径,作为增量备份的基础--incremental-lsn:指定备份开始时的LSN InnoDB的Log Sequence Number日志序列号LSN。InnoDB的每个页(Page)都保存有LSN,这个序号能够标识该页最后修改时间,增量备份正是根据这个LSN来的,因为每次备份(含xtrabackup和innobackupex),XtraBackup都会在备份集中创建一个xtrabackup_checkpoints文件,这个文件中的内容就记录了最后修改的LSN序号。创建增量备份集时,只需要从上次的备份集中找到xtrabackup_checkpoints文件,读取最新的LSN,而后在创建增量是,选择LSN大于这个序号的页,以及这期间产生的二进制日志就可以了,甚至不需要对比全量备份集和当前数据库的数据文件 XtraBackup备份工作机制:XtraBackup本质是基于InnoDB的故障恢复(crash-recovery)机制,先复制InnoDB的数据文件,复制的时候数据仍有可能正在读写,复制出的文件可能是不一致的状态,所以在备份过程中,需要定时扫描日志并作记录,而后通过备份的日志文件执行故障恢复,使文件恢复到一个一致的状态,使数据库达到可用状态。核心就是InnoDB维护的重做日志(redo log)。XtraBackup会在启动时先记录下当前的日志序列号(LSN),然后开始复制数据文件,同时XtraBackup运行一个后台进程,监控着事务日志,并复制新发生的修改。这项操作会在XtraBackup备份执行过程中一直执行,就是log scanned up to信息,以确保记录下所有备份期间数据库发生的修改。接下来是准备进程(prepare process),在这一步中,XtraBackup对复制的数据文件执行故障恢复,将数据库恢复到可用状态 执行恢复:全量恢复和增量恢复:准备恢复(prepare):就是为恢复做准备。备份集没有办法直接拿来用,所有需要一个对备份集做准备的过程对于xtrabackup对应的参数是--prepare,对于innobackupex对应的参数是--apply-log执行恢复(copy-back):备份集准备好以后,可以执行恢复了对于xtrabackup没有特殊说明,简单cp/mv过程,对于innobackupex对应的参数是--copy-back,它的功能是将制定的备份集,恢复到指定的路径下 首先对全量备份做恢复的准备工作[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2014-07-10_09-29-32/--apply-log从指定的选项文件中读取配置信息并应用日志等,表示要做的是对备份集做恢复的准备工作--redo-only如果进行准备工作的备份集操作完成后,还有其他增量备份集待处理,那么就必须指定本参数 继续执行innobackupex命令,应用增量备份,这次要操作的备份集不是最后一份,需要再指定--redo-only参数[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2014-07-10_09-29-32/ --incremental-dir=/data/mysqldata/backup_inc/2014-07-10_09-31-36 / 继续执行innobackupex命令,应用增量备份,这次要操作的备份集就是最后一份,不需要再指定--redo-only参数[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2014-07-10_09-29-32/ --incremental-dir=/data/mysqldata/backup_inc/2014-07-10_09-35-13/注意在备份集进行恢复的准备过程中,不要随意中断该任务,否则有可能导致备份集处于不一致状态。由于XtraBackup是直接在备份集中进行准备,一旦有异常,搞不好想恢复都没办法。建议操作之前,将备份集备份一次。建议再执行一遍innobackupex --apply-log[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2014-07-10_09-29-32/执行文件的恢复[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --copy-back /data/mysqldata/backup/2014-07-10_09-29-32/ 恢复操作可以在任意机器上执行,只要您拥有完整备份集,可以把XtraBackup当做数据库迁移工具 打包和压缩备份集XtraBackup支持流(stream)模式,能够直接将备份输出到指定的格式进行处理,比如tar或xbstream [mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password=onlybackup --stream=tar /tmp | gzip -> /data/mysqldata/backup/xtra_fullbackup.tar.gz全备innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" /data/mysqldata/backup/ 修改数据(system@localhost) [mysql]> create table mytable(a int);Query OK, 0 rows affected (0.06 sec)(system@localhost) [mysql]> insert into mytable values (1);Query OK, 1 row affected (0.04 sec)(system@localhost) [mysql]> insert into mytable values (2);Query OK, 1 row affected (0.01 sec)(system@localhost) [mysql]> insert into mytable values (3);Query OK, 1 row affected (0.00 sec)(system@localhost) [mysql]> insert into mytable values (4);Query OK, 1 row affected (0.00 sec)(system@localhost) [mysql]> insert into mytable values (5);Query OK, 1 row affected (0.01 sec) 进行第一增量备份innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" --incremental --incremental-basedir=/data/mysqldata/backup/2015-02-14_19-08-11 /data/mysqldata/backup_inc 修改数据(system@localhost) [mysql]> insert into mytable values (6);Query OK, 1 row affected (0.01 sec)(system@localhost) [mysql]> insert into mytable values (7);Query OK, 1 row affected (0.01 sec)(system@localhost) [mysql]> insert into mytable values (8);Query OK, 1 row affected (0.00 sec)(system@localhost) [mysql]> insert into mytable values (9);Query OK, 1 row affected (0.00 sec)(system@localhost) [mysql]> insert into mytable values (10);Query OK, 1 row affected (0.00 sec) (system@localhost) [mysql]> select * from mytable;+------+| a |+------+| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 |+------+10 rows in set (0.00 sec) 进行第二次增量备份innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password="onlybackup" --incremental --incremental-basedir=/data/mysqldata/backup_inc/2015-02-14_19-10-14 /data/mysqldata/backup_inc 进行恢复对全量恢复做处理innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2015-02-14_19-08-11/ 进行第一次增量备份恢复innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2015-02-14_19-08-11/ --incremental-dir=/data/mysqldata/backup_inc/2015-02-14_19-10-14/ 进行第二次增量备份恢复innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2015-02-14_19-08-11/ --incremental-dir=/data/mysqldata/backup_inc/2015-02-14_19-12-21/ 建议再执行一遍innobackupex --apply-loginnobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2015-02-14_19-08-11/执行copy操作innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --copy-back /data/mysqldata/backup/2015-02-14_19-08-11/进行数据验证MySQL管理之使用XtraBackup进行热备 http://www.linuxidc.com/Linux/2014-04/99671.htmMySQL开源备份工具Xtrabackup备份部署 http://www.linuxidc.com/Linux/2013-06/85627.htmMySQL Xtrabackup备份和恢复 http://www.linuxidc.com/Linux/2011-12/50275.htm用XtraBackup实现MySQL的主从复制快速部署【主不锁表】 http://www.linuxidc.com/Linux/2012-10/71919p2.htm安装和使用 Percona 推出的 Xtrabackup 备份 MySQL http://www.linuxidc.com/Linux/2011-10/44451.htm
XtraBackup 的详细介绍:请点这里
XtraBackup 的下载地址:请点这里
本文永久更新链接地址