XtraBackup工具的主要特点有:

  • 支持在线(无需加锁)备份InnoDB/XtraDB引擎;对于MyISAM引擎,则需要加一个只读锁,当然了,也可以不加
  • 支持数据流压缩备份,支持磁带、异地备份
  • 支持增备

XtraBackup软件主要有2个工具:

  • xtrabackup – 二进制文件,用于拷贝InnoDB/XtraDB表空间文件
  • innobackupex – 封装后的脚本,基于innobackup Perl 脚本,由Oracle/InnoDB基于GPL协议分发。该脚本用于接收各种参数,然后调用xtrabackup进行实际工作。该脚本提供了各种函数,用于备份MySQL下的InnoDB、XtraDB、MyISAM等多种引擎。

现在已经更新1.6    下载的话往死点我

配置:

--defaults-file=#
默认配置文件的路径,如果不该参数,xtrabackup将从依次从以下位置查找配置文件/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf,并读取配置文件中的[mysqld]和[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size6个参数即可让xtrabackup正常工作

常用参数:

–defaults-extra-file=#
如果使用了该参数,在读取了全局配置文件之后,会再读取这里指定的配置文件

–target-dir=name
备份文件的存放目录路径

–backup实施备份到 target-dir

–prepare
实施对备份文件迚行恢复前的准备(生成 InnoDB log file)

–print-param
打印备份或恢复时需要的参数

–use-memory=#
该参数在 prepare 的时候使用,控制 prepare 时 innodb 实例使用的内存量

–suspend-at-end
在 target-dir 目录下产生一个 xtrabackup_suspended 文件,将 xtrabackup 进程挂起,不停地将数据文件的变化同步到备份文件,直到用户手工删除 xtrabackup_suspended 文件

–throttle=#
每秒IO次数,限制 backup 时使用的 I/O 操作量,使备份对数据库正常业务的影响最小化

–log-stream
该参数在 backup 的时候使用,将 xtrabackup_logfile 的内容输出到标准输出,使用该参数时会自动使用–suspend-at-end 参数,innobackupex 脚本的–stream 模式会使用该参数。

–incremental-lsn=name
增量备份时只拷贝 LSN比该参数指定值新的 ibd pages,前次备份到了哪个 LSN可以看前次备份集的xtrabackup_checkpoints 文件

–incremental-basedir=name
该参数在 backup 的时候使用,备份比该参数指定位置的备份集新的 idb pages

–incremental-dir=name
该参数在 prepare 的时候使用,指定 prepare 时产生的.delta 文件和日志文件的存放路径

–tables=name
在备份 file-per-table 类型的数据文件时使用,使用正则表达式指定需要备份的 innodb 表

–datadir=name
MySQL 数据库的数据文件目录。

配置:

执行 :xtrabackup --datadir=/home/mysql/ --print-param

datadir = "/home/mysql/"
tmpdir = "/tmp"
innodb_data_home_dir = "/home/mysql"
innodb_data_file_path = "ibdata1:50M;ibdata2:50M:autoextend"
innodb_log_group_home_dir = "/home/mysql"
innodb_log_files_in_group = 2
innodb_log_file_size = 5242880
innodb_flush_method = "O_DIRECT

把这些参数写到my.cnf 的[xtrabackup]标签里

备份恢复:

1 xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/home/hot/

备份后hot目录多出来 gg  ibdata1  ibdata2  xtrabackup_checkpoints  xtrabackup_logfile

2  cp db.opt  ggtable.frm  /home/hot/gg/

xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)

3  mysqladmin shutdown ; rm -rf  /home/mysql/ib*  /home/mysql/gg

停库,模拟丢失文件

4  xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/  恢复

查看hot目录

gg  ibdata1  ibdata2  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints  xtrabackup_logfile

多了一个xtrabackup_binlog_pos_innodb

注意这一次 prepare 将 xtrabackup_logfile 文件中记录的日志数据写入数据文件

再次执行 xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/

查看hot目录

gg  ibdata1  ibdata2  ib_logfile0  ib_logfile1  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints  xtrabackup_logfile

这次多了ib_logfile0  ib_logfile1 日志文件

注意第二次 prepare 产生 ib_logfile*

5 cp -r ib* gg/ /home/mysql ; chown mysql:mysql /home/mysql/ -R    把生成的恢复文件还原到原来的位置,有点像oracle的restore

6 service mysql start  查看表的状态

 

mysql> select * from ggtable;
+---------+
| id           |
+---------+
|1222222|
|1222222|
|1222222|
|1222222|
+---------+

OK 还原成功

 

增量备份优点:

1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。

2、支持热备份。备份过程不锁表,不受时间限制,不影响用户使用。

3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。

4、备份恢复基于文件操作,降低直接对数据库操作风险。

5、备份效率更高,恢复效率更高。

备份恢复

1  xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/home/hot/

先做一次全量备份,因为后面的增量备份要以此为基础

2 xtrabackup --defaults=/etc/my.cnf  --backup --target-dir=/home/hot/zb/ --incremental-basedir=/home/hot/

以此全量备份为基础进行增量备份

zb目录下 gg  ibdata1.delta  ibdata1.meta  ibdata2.delta  ibdata2.meta  xtrabackup_checkpoints  xtrabackup_logfile

在增量备份的目录下,数据文件都是以.delta结尾的。增量备份只备份上一次全量备份后被修改过的page,所以增量备份只暂用较少的空间

增量备份可以在增量备份的基础上增量  注:/home/hot/zb/是每次都需修改的。比如第二次增量就改成/home/hot/zb2/,当然可以写个脚

本进行自动备份

3  拷贝备份frm 停库,模拟删除文件

4  依次执行恢复

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/ --incremental-dir=/home/hot/zb/

注意这里的目录,跟备份的时候是相反的

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/home/hot/

5  cp -r ib* gg/ /home/mysql ; chown mysql:mysql /home/mysql/ -R

6 启动数据库 查看表状态

 

mysql> select * from ggtable;
+---------+
| id            |
+---------+
|1222222|
|1222222|
|1222222|
|1222222|
|1333333|
|1444444|
+---------+

OK 恢复正常

innobackupex  备份恢复

1  innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock /home/hot/ --stream=tar --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup 2> /tmp/innobackup.log 1> /home/backup.tar

打包备份

innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock /home/hot/ --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup

不打包备份

2 模拟删除数据库 shutdown

drop database gg ;    rm -rf ib*    mysqladmin shutdown

3 恢复

解压缩过程,需要使用tar ixvf 解压对应的文件后,注意参数 –i必须加入

tar ixvf backup.tar

进入该目录 执行

innobackupex --defaults-file=/etc/my.cnf  --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log .

查看hot 目录

backup-my.cnf  gg  ibdata1  ibdata2  ib_logfile0  ib_logfile1  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints  xtrabackup_logfile

innobackupex --defaults-file=/etc/my.cnf  --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log .

恢复    产生日志文件

把文件拷贝到目录里  修改权限就可以恢复了

innobackupex 增备:

1 innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock /home/hot/ --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup

生成全备

2  产生增备

innobackupex --defaults-file=/etc/my.cnf --user=root --socket=/home/mysql/mysql.sock --databases='gg' --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --incremental /home/hot/zb/ --incremental-basedir=/home/hot/2011-08-22_23-27-02

3  在全备份目录执行

innobackupex --defaults-file=/etc/my.cnf  --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log .

再在增备目录执行

innobackupex --defaults-file=/etc/my.cnf --no-lock --ibbackup=/root/xtrabackup-1.6.4/bin/xtrabackup --apply-log /home/hot/ --incremental-dir=/home/hot/zb/2011-08-22_23-30-34/

4  拷贝生成目录  修改权限即可