暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL数据库XBK增量备份恢复

anyux 2020-03-17
1119

大家好,我是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/data
 chown -R mysql.mysql /data/mysql/data/
 systemctl restart mysqld

数据库操作

 set sql_log_bin=0;
 source /tmp/log-bin.sql;

验证数据

 select * from xbk03.tmp03
 union all
 select * from xbk02.tmp02
 union all
 select * from xbk01.tmp01
 union all
 select * from xbk.tmp;



欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍运维、数据库相关的技术,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章。



文章转载自anyux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论