码迷,mamicode.com
首页 > 其他好文 > 详细

xtrabackup使用方法简介

时间:2014-06-08 02:34:13      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:数据备份   xtrabackup   

关于xtrabackup的简介就不再赘述,百度一堆,使用方法也说明也很多。感觉还是只有自己试过之后才能有更深刻的认识,以下的使用说明基于官方文档及自己试验过程,记录下备查。

安装:

去percona-xtrabackup官网上下载,有rpm包、tar包,也有解压直接可用的二进制包。我试验采用的二进制包。

由于里面的innobackupx命令实际上是用perl语言封装了xtrabackupx而成,所以使用innobackupx命令要先检查perl包以及其依赖包的安装情况。

可以执行yum install prel perl-DBD perl-Time-HiRes 解决关于perl的报错。

备份有全库备份、部分备份、全量备份、增量备份以及压缩备份等方式。

全库备份指备份数据目录下的所有库;部分备份指备份指定的库/表;全量和增量不在赘述。

    备份权限问题:如果以root之外的用户执行备份,备份用户需要有一下权限:

RELOAD and LOCK TABLES (unless the --no-lock option is specified) in order to FLUSH TABLES WITH READ LOCK prior to start copying the files and
REPLICATION CLIENT in order to obtain the binary log position,
CREATE TABLESPACE in order to import tables (see Restoring Individual Tables) and
SUPER in order to start/stop the slave threads in a replication environment.

    my.cnf文件里面必须指定datadir=xxx,innobackupx会从这里获知数据目录的路径。

全库全量备份

innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR

并注意观察输出的最后一行,有“complete ok”才算成功。程序会在备份目录下创建一个以当前时间戳为名的目录存储备份的文件。

如果mysql配置文件不在默认目录(/etc,/datadir/)下,需要通过以下方式告知程序my.cnf的路径

innobackupex --defaults-file=/tmp/other-my.cnf --user=DBUSER --password=DBUSERPASS /path/to/BACKUP

并且--defaults-file必须作为第一个选项

恢复分为两个步骤:准备阶段----恢复阶段

innobackupx备份完之后的数据时不能直接恢复使用的,因为拷贝数据文件的同时,还会有事务提交或回滚,xtrabackup通过一个额外的线程记录拷贝过程中binlog日志中的变化,并在“准备”阶段通过将日志中的改变应用到备份文件中来保证备份文件的数据一致性。

  准备阶段:

执行

innobackupex --apply-log /path/to/BACKUP-DIR

另外可以通过使用--use-memory=xx 选项来加速此过程,例如

innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR

此过程执行完,看到最后提示“complete ok”说明已经将日志中记录的的改变应用到备份文件中。

  恢复阶段:

关闭mysql,清空datadir(注意:mysql的datadir在恢复过程中必须确保是空的,否则执行不成功),

innobackupex --copy-back /path/to/BACKUP-DIR

提示“complete ok”之后,就可以启动数据库了。注意:在启动数据库前要注意修改数据目录权限,以确保mysql对于数据的可读性。

特定库/表备份

对于特定库/表的备份,官方文档给出了三种方法

--include=‘正则表达式‘    例如 --include=‘^ljk‘只备份ljk库,在备份目录里还会有其他库的目录,但都是空的

--tables-file=文件   该文件中应该包含database.table形式的内容,每行一个表,注意:ljk.*是不生效的。

--databases=‘库名[.表名]‘  多个库中间以空格隔开,此选项还不完善,官方文档也说明了:此选项只对.frm文件和非innodb表有效,对于InnoDB表即使指定了数据库,仍然会备份所有的库。

恢复过程:执行

innobackupex --apply-log  /path/to/partial/backup

成功后关闭数据库,将制定库/表的备份文件cp至数据目录下即可,记得修改权限。

增量备份

思路:先做全量备份,之后按照下面命令执行增备

innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR

innobackupex --incremental /data/backups --incremental-basedir=BASEDIR

恢复过程:

思路:将各个增量备份的数据文件合并到最初的全量备份的目录下,最终是从全量备份这个目录下恢复数据。假如现在有一个全量三个增量的备份

innobackupex --apply-log --redo-only BASE-DIR   注意;此处增加了--redo-only

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1(第一个增量的目录)

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2(第二个增量的目录)

innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-3  (注:最后一个增量目录不需要加--redo-only选项)

注:“准备”程中,增量备份的路径需要些绝对路径,试验时写相对路径不成功

如果以上都执行成功,则可以继续下一步

innobackupex --apply-log BASE-DIR   将记录在日志里的改变应用的数据中,确保数据一致性。

然后可以向全量备份一样执行恢复了

innobackupex --copy-back BASE-DIR


附件为2.19版本的官方文档

xtrabackup使用方法简介,布布扣,bubuko.com

xtrabackup使用方法简介

标签:数据备份   xtrabackup   

原文地址:http://kaifly.blog.51cto.com/3209616/1423528

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!