您的位置:首页 > 数据库

Xtrabackup全备及增量备份数据库

2014-06-20 17:00 281 查看
Xtrabackup
XtraBackup 是开源的热备mysql的软件,可以备份InnoDB, XtraDB, and MyISAM类型的
表,它是由如下三个工具组成的
1.innobackupex:有perl脚本封装的,可以备份MyISAM, InnoDB, and XtraDB类型表,
推荐使用此工具
2.xtrabackup:由c语言编译的,只copy表InnoDB和XtraDB的数据
3.xbstream:允许从streaming and extracting文件压缩/抽取xbstream格式文件

innobackupex
innobackupex有更强的功能,它整合了xtrabackup和其他的一些功能,他不但可以全量
备份/恢复,还可以基于时间的增量备份与恢复。
innobackupex备份原理
innobackupex首先调用xtrabackup来备份innodb数据文件,当xtrabackup完成后,
innobackupex就查看文件xtrabackup_suspended ;然后执行“FLUSH TABLES WITH READ
LOCK”来备份其他的文件
innobackupex恢复原理
innobackupex首先读取my.cnf,查看变量
(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir
)对应的目录是存在,确定相关目录存在后,然后先copy myisam表和索引,然后在copy
innodb的表、索引和日志
二进制版本
Xtrabackup下载地址:
http://www.percona.com/downloads/XtraBackup/LATEST/binary/
[root@clent soft]# cd xtrabackup/
[root@clent xtrabackup]# ls
bin percona-xtrabackup-2.2-test
[root@clent xtrabackup]# cd bin/
[root@clent bin]# ls
innobackupex xbcrypt xbstream xtrabackup
[root@clent bin]# cp * /usr/bin/
报错1:
[root@clent bin]# innobackupex
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.
解决方法: yum -y install perl-Time-HiRes
报错2:
[root@dbtest bin]# innobackupex --user=root --password=root --defaults-
file=/etc/my.cnf --socket=/tmp/mysql.sock /home/backup_xtra
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Ireland Ltd 2009-2012. All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
130608 10:22:29 innobackupex: Connecting to MySQL server with DSN
'dbi:mysql:;mysql_read_default_file=/etc/my.cnf;mysql_read_default_group=xtra
backup;mysql_socket=/tmp/mysql.sock' as 'root' (using password: YES).
ERROR: Failed to connect to MySQL server as DBD::mysql module is not
installed at /usr/bin/innobackupex line 1397.
解决方法:yum -y install perl-DBD-MySQL.x86_64
全备:
[root@clent data]# innobackupex --defaults-file=/data/mysql/my.cnf --user=root --password=xxxx /tmp/test
执行完之后在最后输出可以看到
innobackupex: Backup created in directory '/tmp/test/2014-06-20_16-15-52'
innobackupex: MySQL binlog position: filename 'mysql-bin.000004', position
664
140620 16:15:55 innobackupex: Connection to database server closed
140620 16:15:55 innobackupex: completed OK!
全备还原:
关闭数据库服务
[root@clent data]#innobackupex --apply-log /tmp/mysql/2014-06-20_16-15-52
在创建全量备份后,备份文件是不能restore的,因为这个初始创建的备份只是简单的
copy过程,而innodb是事务引擎,所以还需要通过log文件replay committed的事务和回
滚uncommitted事务,这样数据库就达到一致的状态,可以restore了
[root@clent data]#innobackupex --defaults-file=/data/mysql/my.cnf --copy-
back /tmp/mysql/2014-06-20_16-15-52/
(全备恢复数据的时候数据库原本的data目录要清空,若是怕数据丢失可以拷贝data文
件夹作为备份)
恢复数据之后修改data文件夹下数据库的文件所有者chown -R mysql:mysql *
若是有mysql-bin.index文件删除否则会造成mysql服务启动不起来
增量备份:
[root@clent data]#innobackupex --defaults-
file=/data1/app/services/mysql55/my.cnf --user=root --password=1q2w3e4r --incremental-basedir=/tmp/mysql/2014-06-20_16-15-52/ --incremental /tmp/mysql
[root@clent data]#innobackupex --defaults-file=/data/mysql/my.cnf --user=root --password=1q2w3e4r --incremental-basedir=/tmp/mysql/2014-06-20_16-15-52/ --incremental /tmp/mysql
其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。
上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录(本例
中为:/tmp/mysql/2014-06-20_16-22-37),在该目录下存放着增量备份的所
有文件。
在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,全备的信息如下

backup_type = incremental
from_lsn = 1602592
to_lsn = 1603468
last_lsn = 1603468
compact = 0
只要把--incremental-basedir执行上一次增量备份的目录,就可以在增量备份的基础上
再做增量备份
增量备份恢复:
增量备份的恢复比全备要复杂很多,第一步是在所有备份目录下重做已提交的日志:
[root@clent data]#innobackupex --apply-log --redo-only /tmp/mysql/2014-06-20_16-15-52/
[root@clent data]#innobackupex --apply-log --redo-only /tmp/mysql/2014-06-20_16-15-52 --incremental-dir=/tmp/mysql/2014-06-20_16-22-37
[root@clent data]#innobackupex --apply-log /tmp/mysql/2014-06-20_16-15-52 --incremental-dir=/tmp/mysql/2014-06-20_16-25-37
例子:
[root@clent data]#innobackupex --apply-log --redo-only BASE-DIR
[root@clent data]#innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
[root@clent data]#innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,
INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。
这里要注意的是:最后一步的增量备份并没有--redo-only选项!还有,可以使用--
use_memory提高性能。
以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。
第二步,回滚未完成的日志:
[root@clent data]#innobackupex --apply-log /tmp/mysql/2014-06-20_16-15-52/
[root@clent data]#innobackupex --defaults-/data/mysql/my.cnf --copy-back/tmp/mysql/2014-06-20_16-15-52/
innodbackupex --help (里面还是有很多可以使用的参数,有兴趣可以看一下)
--databases=LIST (选择数据库列表)
2.2版本官网document:http://www.percona.com/doc/percona-
xtrabackup/2.2/innobackupex/innobackupex_script.html
2.2版本官网installation:http://www.percona.com/doc/percona-
xtrabackup/2.2/installation/compiling_xtrabackup.html

本文出自 “本少爷很闲” 博客,请务必保留此出处http://yingzi234.blog.51cto.com/3374280/1429007
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: