xtrabackup备份恢复

xtrabackup全备恢复

xtrabackup全备

innobackupex --user=root --password=123456 --no-timestamp /data/full/      #备份

xtrabackup全备恢复

1.执行 --apply-log
2.清空损坏目录,cp复制回去。或者指向datadir备份目录。(或者使用innobackupex --copy-back)
3.datadir授权mysql用户

innobackupex --apply-log /data/full/ #模拟了CSR的全过程,在恢复之前,将数据的LSN号和redo LSN号追平
innobackupex --copy-back /data/full/ 
chown mysql.mysql -R /data/3306/
systemctl start mysqld

xtrabackup增量备份恢复

模拟数据:

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

全备:

innobackupex --user=root --password=123456 --no-timestamp /data/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=123456 --no-timestamp --incremental --incremental-basedir=/data/full /data/inc1

模拟周二数据变化

create database inc2 charset utf8mb4;
use inc2;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

进行周二的增量备份:

innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/inc1 /data/inc2

周三的数据变化

create database inc3 charset utf8mb4;
use inc3;
create table t1 (id int);
insert into t1 values(1),(2),(3);
commit;

模拟上午10点数据库崩溃
rm -rf /data/3306/
恢复思路

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

恢复前的准备
(1) 整理full
innobackupex --user=root --password=123456 --apply-log --redo-only /data/full/

(2) 合并inc1到full,并整理备份
innobackupex --user=root --password=123456 --apply-log --redo-only --incremental-dir=/data/inc1/ /data/full/

(3) 合并inc2到full,并整理备份
innobackupex --user=root --password=123456 --apply-log --incremental-dir=/data/inc2/ /data/full/

(4) 最后一次整理full

innobackupex --user=root --password=123456 --apply-log  /data/full
mv /data/full/ /data/3306
chown -R mysql.mysql 3306/

截取二进制日志

#起点:
[root@WANGXIANG data]# cat /data/inc2/xtrabackup_binlog_info 
mysql-bin.000009	1779	275d1a27-cfe9-11ea-9c4f-000c294f7b08:1-4,
5f40d9c9-d184-11ea-becd-000c294f7b08:1-9,
bb6b0c36-d16c-11ea-a900-000c294f7b08:1-9,
cb151102-cfe7-11ea-b567-000c294f7b08:1  #这里有很多行说明记录的是binlog没有记录数据的起始点,不是备份起始点

#起点:
[root@WANGXIANG ~]# mysqlbinlog /binlog/3306/mysql-bin.000009|grep 'SET @@'
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
SET @@SESSION.GTID_NEXT= '5f40d9c9-d184-11ea-becd-000c294f7b08:3'/*!*/; #起始点
......
SET @@SESSION.GTID_NEXT= '5f40d9c9-d184-11ea-becd-000c294f7b08:13'/*!*/; #终点
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

mysqlbinlog --skip-gtids --include-gtids='5f40d9c9-d184-11ea-becd-000c294f7b08:3-13' /binlog/3306/mysql-bin.000009 > /data/bin.sql

mysql> set sql_log_bin=0;
mysql> source /data/bin.sql;


#验证数据
mysql> select * from full.t1;
mysql> select * from inc1.t1;
mysql> select * from inc2.t1;
mysql> select * from inc3.t1;
posted @ 2020-07-29 18:40  国际一级退堂鼓鼓手  阅读(170)  评论(0编辑  收藏  举报