模拟Xtrabackup + Binlog恢复

模拟数据
create database full charset utf8mb4;
use full;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

进行周日的全备
[root@db01 backup]# innobackupex --user=root --password=123 --no-timestamp  --parallel=5  /backup/full

模拟周一的数据变化
create database inc1 charset utf8mb4;
use inc1;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

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

说明:
--incremental    开关 
--incremental-basedir=/backup/full 基于哪个备份进行增量
/backup/inc1     增量备份的位置点

检查备份的LSN
[root@db01 backup]# cat /backup/full/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 217478672
last_lsn = 217478681
compact = 0
recover_binlog_info = 0
[root@db01 backup]# cat /backup/inc1/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 217478672
to_lsn = 217484653
last_lsn = 217484662
compact = 0
recover_binlog_info = 0

模拟周二数据变化
create database inc2 charset utf8mb4;
use inc2;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

周二的增量
innobackupex   --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/inc1 /backup/inc2 

周三的数据变化
create database inc3 charset utf8mb4;
use inc3;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

模拟上午10点数据库崩溃
pkill mysqld 
\rm -rf /data/mysql/data/*


恢复思路
1. 停业务,挂维护页
2. 查找可用备份并处理备份:full+inc1+inc2 
3. binlog: inc2 到 故障时间点的binlog
4. 恢复全备+增量+binlog
5. 验证数据
6. 起业务,撤维护页

恢复前的准备
(1) 整理full
innobackupex --apply-log --use-memory=3G --redo-only  /backup/full

(2) 合并inc1到full,并整理备份
innobackupex --apply-log --use-memory=3G --redo-only  --incremental-dir=/backup/inc1 /backup/full 

合并后对比LSN号

模拟Xtrabackup + Binlog恢复_第1张图片

(3) 合并inc2到full,并整理备份 (合并最后一个增量备份时不要加--redo-only)
innobackupex --apply-log --use-memory=3G --incremental-dir=/backup/inc2 /backup/full 

模拟Xtrabackup + Binlog恢复_第2张图片

(4) 最后一次整理full
innobackupex --use-memory=3G --apply-log  /backup/full


截取二进制日志
起点:
cat /backup/inc2/xtrabackup_binlog_info

mysql-bin.000031    1997    aa648280-a6a6-11e9-949f-000c294a1b3b:1-17,
e16db3fd-a6e8-11e9-aee9-000c294a1b3b:1-9

终点:
mysqlbinlog /data/binlog/mysql-bin.000031 |grep 'SET'

SET @@SESSION.GTID_NEXT= 'e16db3fd-a6e8-11e9-aee9-000c294a1b3b:12'/*!*/;

mysqlbinlog --skip-gtids --include-gtids='e16db3fd-a6e8-11e9-aee9-000c294a1b3b:10-12' /data/binlog/mysql-bin.000031>/backup/binlog.sql

5.14 恢复备份数据
[root@db01 /]# cp -a  /backup/full/* /data/mysql/data/
[root@db01 /]# chown -R mysql. /data/
[root@db01 /]# /etc/init.d/mysqld start
mysql> set sql_log_bin=0;
mysql> source /backup/binlog.sql


5.15 验证数据
mysql> select * from full.t1;
mysql> select * from inc1.t1;
mysql> select * from inc2.t1;
mysql> select * from inc3.t1;

你可能感兴趣的:(MySQL)