xtrabackup备份工具
下载地址 https://www.percona.com/downloads/XtraBackup/LATEST/
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
1、xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 ,不能备份表结构
2、innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
xtrabackup
备份时常规参数
--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
备份文件的c目录路径
--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 文件和日志文件的存放路径
--databases=name
--tables=name
在备份file-per-table类型的数据文件时使用,使用正则表达式指定需要备份的innodb表
--datadir=name
MySQL数据库的数据文件目录。
--stream
生成压缩文件,速度比较慢
全备的备份还原:
xtrabackup --defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf --backup --target-dir=/data/bak_test/1
给备份做恢复前准备。
xtrabackup --defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf --prepare --target-dir=/data/bak_test/1
增量备份:
给增量备份做恢复前准备
xtrabackup --defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf --prepare --target-dir=/data/bak_test/2
拷贝备份到数据库目录下
修改权限并重启数据
重启
innobackupex
常规参数
--defaults-file
同xtrabackup的--defaults-file参数
--apply-log
对xtrabackup的--prepare参数的封装
--copy-back
做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir ;
--remote-host=HOSTNAME
通过ssh将备份数据存储到进程服务器上;
--stream=[tar]
备份文件输出格式, tar时使用tar4ibd , 该文件可在XtarBackup binary文件中获得.如果备份时有指定--stream=tar, 则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩, 在XtraBackup的binary包中可获得该文件)。
在使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。
--tmpdir=DIRECTORY
当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir
--redo-only --apply-log组,
强制备份日志时只redo ,跳过rollback。这在做增量备份时非常必要。
--use-memory=#
该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量
--throttle=IOS
同xtrabackup的--throttle参数
--sleep=是给ibbackup使用的,指定每备份1M数据,过程停止拷贝多少毫秒,也是为了在备份时尽量减小对正常业务的影响,具体可以查看ibbackup的手册 ;
--compress[=LEVEL]
对备份数据迚行压缩,仅支持ibbackup,xtrabackup还没有实现;
--include=REGEXP
对xtrabackup参数--tables的封装,也支持ibbackup。备份包含的库表,例如:--include="test.*",意思是要备份test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:test1和test2,则写成:--include="test.test1|test.test2"。也可以使用通配符,如:--include="test.test*"。
--databases=LIST
列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份;
--uncompress
解压备份的数据文件,支持ibbackup,xtrabackup还没有实现该功能;
--slave-info,
备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0
--socket=SOCKET
指定mysql.sock所在位置,以便备份进程登录mysql.
--databases=name
指定要备份的库
--tables=name
在备份file-per-table类型的数据文件时使用,使用正则表达式指定需要备份的innodb表
--incremental-basedir= 上一个备份目录
--incremental 增量备份
全备 innobackupex --user=root --password=xxxxx--defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf /data/bak_test/3
恢复前的准备 xtrabackup --defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf --prepare --target-dir=/data/bak_test/3/2015-05-28_09-59-28
apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/backup/mysql/data/2013-10-29_09-05-25下的备份文件已经准备就绪
拷贝数据到数据库数据目录下对文件进行权限修改启动数据。
增量备份:
增量备份需要基于全备,先假设我们已经有了一个全备(x )或基于上一个增量备份之上,在该全表的基础上做增量备份。
--defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf --user=root --password=xxxx --incremental-basedir=/data/bak_test/3/2015-05-28_10-23-35 --incremental /data/bak_test/
曾备的还原
模式
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。
第一步是在所有备份目录下重做已提交的日志
innobackupex --apply-log --redo-only /data/bak_test/3/2015-05-28_10-23-35
innobackupex --apply-log --redo-only /data/bak_test/3/2015-05-28_10-23-35 --incremental-dir=/data/bak_test/2015-05-28_10-34-11
回滚未完成的日志:
innobackupex --apply-log /data/bak_test/3/2015-05-28_10-23-35
准备数据 prepare ,恢复前的准备 xtrabackup --defaults-file=/data/work/mysql-5.5.38/data/mysql3306/my3306.cnf --prepare --target-dir=/data/bak_test/3/2015-05-28_10-23-35
拷贝数据到数据库目录下并修改权限启动数据即可。