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 拷贝生成目录 修改权限即可