物理备份-XBK

发布时间 2023-10-23 14:35:05作者: 兰昌
备份原理:直接拷贝文件
innobackupex --version   #查看当前XBK的版本号
into outfile '路径/指定的文件'          #将sql语句执行的结果导出到指定的文件中
XBK备份核心理念
1、针对非InnoDB,进行锁表备份,copy所有的非innodb表文件。
2、针对InnoDB表,立即触发CKPT,copy所有InnoDB表相关的文件(ibdatal,ibd,frm),并且将备份过程中产生的新的数据变化的部分redo一起备份走
3、在恢复时,xbk会调用Innodb引擎的CSR过程,将数据和redo的LSN最平,然后进行一致性恢复。
 
备份产生的文件介绍
(1)xtrabackup_binlog_info     #记录备份时刻的二进制日志信息,可以作为binlog截取的起点
(2)xtrabackup_checkpoints
备份过程
1、定期全备
innobackupex --user=root --password=123 --no-timestamp /backup/full
2、增量备份(基于全备)
innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/full /backup/incl
说明:
--no-timestamp
--incremental           #开关
--incremental-basedir=/backup/full                #基于哪个备份进行增量
/backup/incl             #增量备份的位置
 

恢复思路?

1、停业务,挂维护页,避免数据的二次伤害。
2、查找可用备份:full+inc1+inc2
3、inc2 到 故障时间点的binlog
4、恢复全备+增量+binlog
5、验证数据,开启业务
处理结果:经过20分钟的处理,最终业务恢复正常。
 
恢复前的准备
(1)整理full
innobackupex --apply-log --redo-only /backup/full
--redo-only        #这个选项 在 整理全备和所有增量合并时 除了 最后一次增量 用
 
(2)合并 inc1 到 full ,并且整理
innobackupex --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full
 
cat /backup/full/xtrabackup_checkpoints
cat /backup/inc1/xtrabackup_checkpoints           #XBK备份的信息文件,可用对比
 
(3)合并 inc2 到 full ,并且整理
innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full
 
(4)最后一次整理full
innobackupex --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-gtid='e16db3fd-a6e8-11e9-aee9-000c294a1b3b:10-12' /data/binlog/mysql-bin.000031 >/backup/binlog.sql
 
恢复备份数据
cp -a /backup/full/* /data/mysql/data
chown -R mysql. /data/
/etc/init.d/mysqld start
mysql>set sql_log_bin=0
mysql>source /backup/binlog.sql
 
验证数据
mysql>select * from full.t1;
mysql>select * from inc1.t1;
mysql>select * from inc2.t1;
 
单表恢复案例
误删了一张10M的表。而备份有500G。如何快速恢复误删除表?
提示:
drop table city;
create table city like city_bck;
alter table city discard tablespace;
cp /backup/full/world/city.ibd /application/mysqldata/world/
chown -R mysql.mysql /application/mysql/data/world/city.ibd
alter table city import tablespace