mysql增量备份backupex_Xtrabackup全备及增量备份数据库

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 (选择数据库列表)

xtrabackup/2.2/innobackupex/innobackupex_script.html

2.2版本官网installation:http://www.percona.com/doc/percona-

xtrabackup/2.2/installation/compiling_xtrabackup.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值