使用xtrabackup进行完全和增量备份

innobackupex是一个Perl脚本,封装了xtrabackup C程序,对innodb、xtradb存储引擎进行备份不会锁表,利用记录LSN的机制实现备份。
 
一、安装
系统:CentOS release 6.4 (Final)
 
1、安装依赖包
    
    
    
    
  1. yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel
 
2、安装xtrabackup
    
    
    
    
  1. tar xvf percona-xtrabackup-2.0.8.tar.gz
  2. cd percona-xtrabackup-2.0.8
  3. AUTO_DOWNLOAD="yes" ./utils/build.sh innodb51  #针对不同版本的mysql自动下载相应的源码包
 
错误:
Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/innobackupex line 23.
BEGIN failed--compilation aborted at /usr/bin/innobackupex line 23.
 
解决:
    
    
    
    
  1. yum -y install perl-Time-HiRes.x86_64
 
3、或直接使用rpm包安装
    
    
    
    
  1. yum -y localinstall percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm
 
下载地址:
http://www.percona.com/downloads/XtraBackup/
 
二、备份需求权限
1、连接和文件权限
系统用户以及数据库用户,备份数据目录的读写权限。
--user、--password指定用户名和密码;
--port、--socket、--host:分别指定mysql实例的端口、socket、主机等
 
2、数据库用户权限
RELOAD 和LOCK TABLES:执行FLUSH TABLES WITH READ LOCK;
REPLICATION CLIENT:获得Bin Log的位置;
CREATE TABLESPACE:import表;
SUPER:在复制环境开启和停止slave线程。
 
如创建完全备份的权限:
    
    
    
    
  1. mysql> CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup@123';
  2. mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
  3. mysql> FLUSH PRIVILEGES;
 
三、创建完全备份
innobackupex是结合xtrabackup和tar4ibd的工具,提供统一的接口用来备份数据库的所有数据。
备份目录规划:
# tree /data/backup/physical/
/data/backup/physical/
├── full #存放完全备份文件
└── inc  #存放增量备份文件
 
1、创建一个完全备份,默认只要指定一个备份数据存放目录
    
    
    
    
  1. innobackupex --defaults-file=/opt/mysql/my.cnf --user=backup --password=backup@123 --host=localhost --port=3306 /data/backup/physical/full
 
注意:建议指定数据库配置文件,会去读取配置文件的datadir等选项,如没有指定,默认是备份/var/lib/mysql目录
 
使用xtrabackup备份所有innodb表,拷贝所有表定义文件,数据文件表(myisam、merge、csv、archive),以及触发器和数据库配置信息。
 
--no-timestamp:将不创建时间戳的目录,创建给定的目录
--defaults-file:指定配置文件,只能放在第一个参数
 
2、使用--apply-log合并日志,将提交的事务进行重做,将没有提交的事务进行回滚,确保数据文件的一致性
    
    
    
    
  1. innobackupex --apply-log --use-memory=4G /data/backup/physical/full/2012-08-06_15-23-25/
 
--use-memory:默认100MB,决定于系统的可用和剩余内存,内存越大,将越快。
 
3、使用innobackupex从完全备份还原
--copy-back:执行还原到datadir,datadir必须为空,mysqld服务关闭,同时在恢复后需要修改目录权限。
    
    
    
    
  1. innobackupex --copy-back /path/to/BACKUP-DIR
  2. chown -R mysql:mysql /var/lib/mysql
 
--force-non-empty-directories:强制覆盖
 
四、使用innobackupex进行增量备份
一般情况下使用增量备份可以减少备份需求磁盘空间,减少备份时间。基于LSN,每次数据修改LSN将增加,拷贝所有LSN发生改变的页。
1、首先创建完全备份:
    
    
    
    
  1. innobackupex --defaults-file=/opt/mysql/my.cnf --user=backup --password=backup@123 --host=localhost --port=3306 /data/backup/physical/full
 
2、创建第一个增量备份(基于完全备份),需指定BASEDIR(完全备份的目录):
    
    
    
    
  1. innobackupex --defaults-file=/opt/mysql/my.cnf --incremental --user=backup --password=backup@123 --host=localhost --port=3306 /data/backup/physical/inc --incremental-basedir=/data/backup/physical/full/2012-08-06_15-23-25/
 
3、创建下一个增量备份(基于上一个增量备份),指定BASEDIR为上一个增量备份:
    
    
    
    
  1. innobackupex --defaults-file=/opt/mysql/my.cnf --incremental --user=backup --password=backup@123 --host=localhost --port=3306 /data/backup/physical/inc --incremental-basedir=/data/backup/physical/inc/2012-08-06_15-29-03/
 
或者使用LSN(日志序列号),只拷贝大于指定序列号的:
innobackupex --incremental /data/backups --incremental-lsn=1291135
innobackupex --incremental /data/backups --incremental-lsn=1358967
 
这种方式只对XtraDB或InnoDB表,其他存储引擎的表将拷贝完整的文件;lsn可以在备份目录的xtrabackup-checkpoints查看to_lsn的值
 
4、合并增量备份
仅仅提交的事务必须在每个备份中重做,将合并完全备份和每个增量备份,必须最后回滚所有未提交的事务。
4.1    合并完全备份:务必使用--redo-only选项,强制xtrabackup跳过"rollback"
    
    
    
    
  1. innobackupex --apply-log --redo-only /data/backup/physical/full/2012-08-06_15-23-25/
 
/data/backup/physical/full/2012-08-06_15-23-25/:为完全备份的目录BASEDIR
 
4.2    合并第一个增量备份到完全备份:
    
    
    
    
  1. innobackupex --apply-log --redo-only /data/backup/physical/full/2012-08-06_15-23-25/ --incremental-dir=/data/backup/physical/inc/2012-08-06_15-29-03/
 
/data/backup/physical/full/2012-08-06_15-23-25/:为完全备份的目录BASEDIR
/data/backup/physical/inc/2012-08-06_15-29-03/:为第一个增量备份目录INCREMENTAL-DIR-1
这些路径一定要指定绝对路径,不然报错,找不到xtrabackup_logfile文件。
 
4.3    合并最后一个增量备份到完全备份:最后一个增量备份不需要加--redo-only
    
    
    
    
  1. innobackupex --apply-log /data/backup/physical/full/2012-08-06_15-23-25/ --incremental-dir=/data/backup/physical/inc/2012-08-06_20-29-13/
 
/data/backup/physical/full/2012-08-06_15-23-25/:为完全备份的目录BASEDIR
/data/backup/physical/inc/2012-08-06_20-29-13/:为第二个增量备份目录INCREMENTAL-DIR-2
 
--redo-only只有除最后一个增量备份不使用。 如果最后一个也使用redo-only,将数据不是一致,因没有执行回滚。
 
4.4    一旦合并了完全备份和所有增量备份,就可以回滚没有提交的事务
该步骤是可选的,如果没有做,在数据库开启时会自动进行回滚没有提交的事务,同crash后恢复,但是做了准备,可以减少服务启动时间。innobackupex工具不会创建ib_log*文件,如要创建事务日志文件,需使用xtrabackup --prepare,否则在服务启动时进行创建。
    
    
    
    
  1. innobackupex --apply-log /data/backup/physical/full/2012-08-06_15-23-25/
 
/data/backup/physical/full/2012-08-06_15-23-25/:为完全备份的目录BASEDIR
 
5、使用增量备份还原
准备好了增量备份,基本目录将包含完整的数据。
    
    
    
    
  1. innobackupex --copy-back /data/backup/physical/full/2012-08-06_15-23-25/
 
然后修改文件权限
    
    
    
    
  1. chown mysql.mysql -R *

参考:
http://www.percona.com/doc/percona-xtrabackup/2.2/manual.html



来自为知笔记(Wiz)


你可能感兴趣的:(使用xtrabackup进行完全和增量备份)