yum  install libaio perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL



yum install percona-xtrabackup


rpm -ql percona-xtrabackup |grep bin


/usr/bin/innobackupex #将xtrabackup进行封装的perl脚本,提供了备份MyISAM表的能力

/usr/bin/xbcrypt

/usr/bin/xbstream #流式备份

/usr/bin/xtrabackup     #热备innodb、xtradb表中数据的工具,不能备份其它类型的表,也不能备份数据表结构


1,对mysql用户赋予本地执行权限


grant all privileges on *.* to 'dbconner'@'localhost' identified by "redhat" with grant option;

FLUSH PRIVILEGES;


2,执行完全备份


innobackupex --user=dbconner --password=redhat --defaults-file=/opt/mysql-5.5.34/etc/my.cnf \

-socket=/opt/mysql-5.5.34/var/mysqld.sock /xtrabackup


--user=root #备份操作用户名,一般都是root用户  

--password=root123                      #密码

--host=192.168.0.215                    #主机ip,本地可以不加

--parallel=4 --throttle=400             #并行个数,根据主机配置选择合适的,默认是1个,多个可以加快备份速度。

--stream=tar                            #备份输出tar格式,可以加,可不加。加上文件就小一点,在备份的时候就已经打包好了。

/xtrabackup #备份目录

--apply-log #用于回滚日志,以及对xtrabackup的--prepare参数的封装

--copy-back #恢复时将备份数据文件拷贝到MySQL服务器指定数据目录;

--remote-host=HOSTNAME #通过ssh将备份数据存储到进程服务器上;

--redo-only --apply-log组 #回滚合并,强制备份日志时只redo ,跳过rollback。这在做增量备份时非常必要。

--slave-info #备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info文件,

#这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

--socket=SOCKET #指定mysql.sock所在位置,以便备份进程登录mysql. 

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

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



##在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。

#因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。


3,在主库或新mysql服务器对完全备份进行校验、检查


innobackupex --apply-log /xtrabackup/2015-04-17_10-49-59


4,模拟数据丢失,删除data文件夹


恢复第一步:应用日志。

innobackupex --defaults-file=/opt/mysql-5.5.34/etc/my.cnf --apply-log /xtrabackup/2015-04-17_10-49-59

恢复第二步:拷贝文件。

innobackupex --defaults-file=/opt/mysql-5.5.34/etc/my.cnf --copy-back /xtrabackup/2015-04-17_10-49-59


--defaults-file     #恢复会使用my.cnf文件把需要恢复的文件,恢复到my.cnf指定的位置。

--apply-log         #这是备份时产生的日志,

--copy-back         #这是备份源,解压后的备份文件


#-----------------------------------------------------------

增量备份


--incremental #增量备份的文件夹

--incremental-dir #针对哪个做增量备份


#进行一次全备后,执行如下第一次增量,再次基于第一次的增量备份第二次增量以此类推

全备略.


#第一次基于全备的增量备份,建立增量备份目录为0


innobackupex --user=dbconner --password=Cap#dbs0 --defaults-file=/usr/local/mysql/etc/my.cnf \

--incremental /xtrabackup/0 \

--incremental-basedir /xtrabackup/2015-04-17_17-30-06/


#基于第一次增量后的备份做第二次增量备份,建立第二次备份目录为1


innobackupex --user=dbconner --password=Cap#dbs0 --defaults-file=/usr/local/mysql/etc/my.cnf \

--incremental /xtrabackup/1 \

--incremental-basedir /xtrabackup/0/2015-04-17_17-32-08


依次循环


#-------------

恢复


innobackupex --apply-log --redo-only BASE-DIR


#将第一次做的增量备份数据进行合并到全备份中去


#语法:innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1


innobackupex --apply-log --redo-only /xtrabackup/2015-04-17_15-43-22 --incremental-dir=/xtrabackup/0/2015-04-17_16-05-30


#对第二次做的增量备份数据进行合并到全备份中去


##语法:innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2


innobackupex --apply-log /xtrabackup/2015-04-17_15-43-22 --incremental-dir=/xtrabackup/1/2015-04-17_16-09-36


#注意:最后一步的增量备份并没有--redo-only选项!还有,可以使用--use_memory提高性能,以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。

#当合并完所有的增量备份后,开始回滚所有未提交的事务

应用日志。

innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --apply-log /xtrabackup/2015-04-17_15-43-22

拷贝文件。

innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --copy-back /xtrabackup/2015-04-17_15-43-22