5、Xtrabackup全备增备

Xtrabackup的安装

环境: centos7

XtraBackup官网:https://www.percona.com/downloads/

yum -y install \
https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

备份策略: 周六 晚上0点全备, 周一至周五、周日 是增量,基于上一天增量

0 0 * * 6 zjs_full.sh 0 1 * * 0-5 zjs_inc.sh

mkdir /backup/xbackup/full  /backup/xbackup/inc1 /backup/xbackup/inc2

# 周日全备 
innobackupex --user=root --password=123 --no-timestamp /backup/xbackup/full/

# 周一增量备份
innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/xbackup/full/ /backup/xbackup/inc1

# 周二增量备份
innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/xbackup/inc1 /backup/xbackup/inc2

周三误操作事故

drop table test;

恢复流程

 a)    准备上周六全备。
 b)    合并周日、周一 、周二增量。
 c)    在测试库恢复以上数据,数据的目前状态应该周三凌晨1:00
 d)    需要恢复的数据状态是,下午2点钟左右
 e)    从1点开始的binlog恢复到删除之前转台
 f)    导出删除的表zjs_base,恢复到生产库,验证数据可用性、完整性。
 g)    启动应用连接数据库

准备恢复数据

# 1. 准备xtrabackup备份,合并备份
innobackupex --apply-log --redo-only /backup/xbackup/full
innobackupex --apply-log --redo-only --incremental-dir=/backup/xbackup/inc1 /backup/xbackup/full
innobackupex --apply-log  --incremental-dir=/backup/xbackup/inc2 /backup/xbackup/full
innobackupex --apply-log /backup/xbackup/full


# 2. 确认备份数据 binlog起点,准备截取binlog。
cd /backup/xbackup/inc2/
cat xtrabackup_binlog_info 
mysql-bin.000001    1121


# 3. 截取到 drop 操作之前的binlog
mysqlbinlog  --start-position=1121 /tmp/mysql-bin.000003 
找到drop之前的event和postion号做日志截取,假如 1437
mysqlbinlog  --start-position=1121 --stop-position=1437    /tmp/mysql-bin.000003 >/tmp/incbinlog.sql


# 4.关闭数据库、备份二进制日志
/etc/init.d/mysqld stop
cd /application/mysql/data/
cp mysql-bin.000001 /tmp


# 5. 删除MySQL所有数据,可先到其他地方
cd /application/mysql/data/
rm -rf *

恢复数据

# 将全量备份的数据恢复到数据目录下
innobackupex --copy-back /backup/xbackup/full/
chown -R mysql.mysql /application/mysql/data/
/etc/init.d/mysqld start

# 恢复binlog记录
set sql_log_bin=0
source /tmp/incbinlog.sql

全备打包(适合全备)

# tar 包
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** /backup/ --stream=tar > /backup/`date +"%Y%m%d_%H%M%S"`.tar

# tar.gz 包
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** /backup/ --stream=tar  | gzip > /backup/`date +"%Y%m%d_%H%M%S"`.tar.gz

备份策略

xfull       --apply-log --redo-only   保证last-lsn=周一增量开始lsn
xinc1        合并周一的增量到全备,并apply-log --redo-only  保证last-lsn=周二增量开始lsn
xinc2        合并周二的增量到全备,并apply-log --redo-only  保证last-lsn=周三增量开始lsn
xinc3       合并周三的增量到全备,并apply-log --redo-only  保证last-lsn=周四增量开始lsn
xinc4       合并周四的增量到全备,并apply-log --redo-only  保证last-lsn=周五增量开始lsn
xinc5       合并周五的增量到全备,并apply-log --redo-only  保证last-lsn=周六增量开始lsn
xinc6        合并周六的增量到全备,--apply-log  准备恢复即可

innobackupex参数说明

--user               该选项表示备份账号。
--password           该选项表示备份的密码。
--port               该选项表示备份数据库的端口。
--host               该选项表示备份数据库的地址。
--databases          用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″
--socket             该选项表示mysql.sock所在位置,以便备份进程登录mysql。
--defaults-file 数据库的配置文件路径
--apply-log     准备在一个备份上启动mysql服务
--copy-back     从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置
--stream        该选项表示流式备份的格式,backup完成之后以指定格式到STDOUT,目前只支持tar和xbstream。
--no-timestamp  创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base
--incremental   在全备份的基础上进行增量备份,后跟增量备份存贮目录路径
--incremental-basedir=DIRECTORY   增量备份所需要的全备份路径目录或上次做增量备份的目录路径
--incremental-dir=DIRECTORY       增量备份存贮的目录路径
--redo-only     用于准备增量备份内容把数据合并到全备份目录,配合–incremental-dir 增量备份目录使用。
--force-non-empty-directories     如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。

Last updated