大家好,我是anyux。本文介绍MySQL数据库XBK增量备份恢复。
文末总结XBK增量备份恢复,并有导图

XBK增量备份
XBK的增量备份,每次都是基于上一天,第一次的备份是一个全备,以后所有的增量备份都只备份变化的数据
清空备份路径
rm -rf /tmp/db/*
模拟数据
create database xbk charset utf8mb4;use xbk;create table tmp (id int);insert into tmp values (1),(2),(3);commit;
全备
此处使用cat命令读取xtrabackup_checkpoints文件,查看备份类型,lsn号,判断全备是否完整
innobackupex --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp /tmp/db
第一次模拟数据变化
create database xbk01 charset utf8mb4;use xbk01;create table tmp01 (idx int);insert into tmp01 values (4),(5),(6);commit;
第一次增量备份
--incremental 增量备份的开关
--incremental-basedir=/tmp/db 基于哪个备份进行增量备份
/tmp/xbk01 增量备份到哪个位置
innobackupex --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp --incremental-basedir /tmp/db --incremental /tmp/xbk01
检查第一次备份状态
此处使用cat命令读取增量备份的xtrabackup_checkpoints文件,查看备份类型,lsn号,判断全备是否完整
cat /tmp/xbk01/xtrabackup_checkpoints
第二次模拟数据变化
create database xbk02 charset utf8mb4;use xbk02;create table tmp02 (idx int);insert into tmp02 values (7),(8),(9);commit;
第二次增量备份
innobackupex --user=root --password='root' -S /data/mysql/mysql.sock --no-timestamp --incremental-basedir /tmp/xbk01 --incremental /tmp/xbk02
检查第二次备份状态
此处使用cat命令读取增量备份的xtrabackup_checkpoints文件,查看备份类型,lsn号,判断全备是否完整
cat /tmp/xbk02/xtrabackup_checkpoints
第三次模拟数据变化
create database xbk03 charset utf8mb4;use xbk03;create table tmp03 (idx int);insert into tmp03 values (10),(11),(12);commit;
模拟数据库崩溃
rm -rf /data/mysql/data/*
恢复思路
停止业务,挂维护页面
查找可用备份,检查备份策略,备份文档,执行计划,定时任务等,full+xbk01+xbk02
补齐binlog:从第二次增量备份到故障时间节点中的binlog
恢复全备+增量+binlog
验证数据
重启业务,删除维护页面
恢复前的准备
整理全备xbk
--redo-only 在整理全备和增量合并时使用,最后一次增量不需要
innobackupex --apply-log --redo-only /tmp/db
合并xbk01到xbk,并整理备份
此处使用cat命令整理后两个的xbk01和xbk的xtrabackup_checkpoints文件,last_lsn号是否相同。相同表示整理成功
innobackupex --apply-log --redo-only --incremental-dir=/tmp/xbk01 /tmp/db
合并xbk02到xbk,并整理备份
此处使用cat命令整理后两个的xbk02和xbk的xtrabackup_checkpoints文件,last_lsn号是否相同.相同表示整理成功
innobackupex --apply-log --incremental-dir=/tmp/xbk02 /tmp/db
最后一次整理xbk
innobackupex --apply-log /tmp/db
截取二进制日志
找起点,在xbk02的备份文件中
cat /tmp/xbk02/xtrabackup_binlog_info
找终点
从上一个gtid号的157开始,直到最后一个值,就是终点
mysqlbinlog /data/mysql/log-bin.000004 | grep -i 'set'
从下图中截取gtid数据点,说明gtid的终点是159。如果有其他误操作gtid号,需要排除
多次验证gtid节点
mysqlbinlog --base64-output=decode-rows /data/mysql/log-bin.000004
截取日志
mysqlbinlog --skip-gtids --include-gtids='87031e16-4413-11ea-bb11-000c2922081d:157-159' /data/mysql/log-bin.000004 > /tmp/log-bin.sql
恢复数据备份
cp -a /tmp/db/* /data/mysql/datachown -R mysql.mysql /data/mysql/data/systemctl restart mysqld
数据库操作
set sql_log_bin=0;source /tmp/log-bin.sql;
验证数据
select * from xbk03.tmp03union allselect * from xbk02.tmp02union allselect * from xbk01.tmp01union allselect * from xbk.tmp;
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍运维、数据库相关的技术,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章。