第88讲:XtraBackup实现增量数据备份以及故障恢复的应用实践

文章目录

    • 1.XtraBackup增量备份恢复的概念
    • 2.XBK增量备份语法
    • 3.使用XBK实现数据库的增量备份
      • 3.1.周日全量备份数据库
      • 3.2.周一产生增量数据并进行增量备份
      • 3.3.周二产生增量数据并进行增量备份
      • 3.4.查看两次增量以及全量的备份文件
      • 3.5.核对全量和增量备份的准确性
    • 4.使用XBK通过增量备份还原数据库数据
      • 4.1.使用XBK增量备份还原数据库的过程
      • 4.2.XBK增量备份与全量备份合并时的重要参数
      • 4.3.损坏数据库数据
      • 4.4.整理全量备份数据
      • 4.5.整理周一的增量备份并合并到全量备份中
      • 4.6.整理周二的增量备份并合并到全量备份中
      • 4.7.再次整理全量备份数据
      • 4.8.通过全量备份还原被破坏的数据

1.XtraBackup增量备份恢复的概念

1)增量备份

XBK增量备份的概念图如下,周日的时候进行全量备份,周一到周六进行增量备份,增量备份时并不是从全库备份处开始进行增量备份的,而是从前一天增量结束位置处,备份一天内的增量数据,相当于是基于上次的备份开始的增量备份。

2)增量恢复

XBK的使用增量恢复数据和其他的备份工具不用,但是比较有意思,XBK的增量备份不能单独恢复,需要将每日的增量数据与全量备份合并成一份完整的备份数据,然后进行还原。

image-20220703115649934

2.XBK增量备份语法

XBK增量备份还是使用的innobackupex命令,其中有关于增量备份的参数:

--incremental:开启增量备份。

--incremental-basedir=xxx:指定上次备份的备份文件路径。

XBK增量备份案例:

innobackupex --user=root --password=123456 --no-timesteamp --incremental --incremental-basedir={上次备份的备份文件路径} {增量备份的备份文件路径}

3.使用XBK实现数据库的增量备份

首先对数据库进行一个全量备份(增量备份依赖于全量备份),然后模拟每天产生的增量数据,最后进行每天的增量数据备份。

创建全量备份和增量备份的备份路径

[root@mysql ~]# mkdir /data/dbbackup/all_db_bak
[root@mysql ~]# mkdir /data/dbbackup/inc_db_bak

3.1.周日全量备份数据库

[root@mysql ~]# innobackupex --user=root --password=123456 --no-timestamp /data/dbbackup/all_db_bak/all_bak_`date +%F`

3.2.周一产生增量数据并进行增量备份

1)模拟周一产生的增量数据

mysql> create table monday (id int,content varchar(10));mysql> insert into monday values (1,'haha'),(2,'heihei'),(3,'xixi');mysql> select * from monday;
+------+---------+
| id   | content |
+------+---------+
|    1 | haha    |
|    2 | heihei  |
|    3 | xixi    |
+------+---------+

2)对周一的增量数据进行增量备份

[root@mysql ~]# innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/dbbackup/all_db_bak/all_bak_2022-07-03 /data/dbbackup/inc_db_bak/monday_inc_bak

3.3.周二产生增量数据并进行增量备份

1)模拟周二产生的增量数据

mysql> create table tuesday (id int,content varchar(10));mysql> insert into tuesday values (4,'k8s'),(5,'docker'),(6,'python');mysql> select * from tuesday;
+------+---------+
| id   | content |
+------+---------+
|    4 | k8s     |
|    5 | docker  |
|    6 | python  |
+------+---------+

2)对周二的增量数据进行增量备份

[root@mysql ~]# innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/data/dbbackup/inc_db_bak/monday_inc_bak /data/dbbackup/inc_db_bak/tuesday_inc_bak

在企业生产环境中,增量备份和全量备份都会通过编写脚本的方式来时间,对于没有备份的文件都有时间戳,执行上一次备份文件也是通过变量来实现的,我这里没有按天备份,因此就使用固定的名称。

3.4.查看两次增量以及全量的备份文件

[root@mysql ~]# ll /data/dbbackup/
总用量 0
drwxr-xr-x 3 root root 32 73 12:20 all_db_bak
drwxr-xr-x 4 root root 51 73 12:24 inc_db_bak
[root@mysql ~]# ll /data/dbbackup/all_db_bak/
总用量 0
drwxr-x--- 8 root root 259 73 12:20 all_bak_2022-07-03
[root@mysql ~]# ll /data/dbbackup/inc_db_bak/
总用量 0
drwxr-x--- 8 root root 285 73 12:22 monday_inc_bak
drwxr-x--- 8 root root 285 73 12:24 tuesday_inc_bak

image-20220703122649490

3.5.核对全量和增量备份的准确性

全量备份和增量备份已经完成了,下面我们来核对全量备份和增量备份的准确性。

我们核对时主要分析每个备份文件中的xtrabackup_checkpoints这个文件,观察相邻备份的last_lsn号和from_lsn号,当前增量备份的from_lsn号是上次备份的last_lsn号减9的位置号。

image-20220703142422017

4.使用XBK通过增量备份还原数据库数据

4.1.使用XBK增量备份还原数据库的过程

在3小结中,数据库在周日的时候已经完成全量备份,以及在周一和周二都完成了增量备份,下面我们要模拟故障破坏数据库,然后通过XBK完成的全量备份以及增量备份去还原数据库的数据。

XBK的增量备份是不能直接还原的,需要先将多个增量备份合并到全量备份中,然后用全量备份去还原数据库的数据。

使用XBK增量备份还原数据库的过程:

  • 1)首先整理全量备份数据,使用apply-log参数将全量备份数据进行整理,将备份时产生的“新的已提交事务的数据”通过备份redo log写入到备份文件中,将产生的“新的未提交事务的数据”通过备份的undo log回滚数据。
  • 2)将周一的增量备份数据合并到全量备份数据中。
  • 3)将周二的增量备份数据合并到全量备份数据中。
  • 4)增量备份数据与全量备份数据全部合并后,然后再次整理全量备份数据。
  • 5)最后通过全量备份数据还原被破坏掉的数据库即可。

4.2.XBK增量备份与全量备份合并时的重要参数

在XBK增量备份与全量备份合并时有几个的重要参数。

--apply-log:整理备份的数据,无论是全量备份还是增量备份,都需要先整理备份的数据,将备份过程中产生的“已提交事务的数据”通过redo log写入到备份文件中,将“未提交事务的数据”通过undo log回滚。

--redo-only:这个参数需要配合--apply-log这个参数一起使用,表示在整理备份数据时只执行redo前滚操作,不执行undo回滚操作。

意思就是说在整理数据时,只将备份过程中产生的“已提交事务的数据”通过redo log写入到备份文件中,对于“未提交事务的数据”不进行任何处理,此参数主要是为了防止在整理数据时,undo回滚会导致备份文件中记录的LSN号发生改变,从而影响备份合并

这个参数只在特定的时机下使用:整理全备数据时使用、整理增量备份时使用、最后一个增量备份整理时不使用。

都是最后一次增量备份整理了,即使LSN号发生改变也没有任何影响。

整理备份数据、仅执行Redo前滚操作、合并增量到全量,这三步操作通常是一起执行的。

--incremental-dir=xxx:指定要将那个增量备份合并到全量备份中,指定增量备份的路径。

XBK增量备份合并全量备份的例子:

将/data/dbbackup/inc_db_bak/monday_inc_bak/这个增量备份合并到全量备份/data/dbbackup/all_db_bak/all_bak_2022-07-03/中innobackupex --apply-log --redo-only --incremental-dir=/data/dbbackup/inc_db_bak/monday_inc_bak /data/dbbackup/all_db_bak/all_bak_2022-07-03/

4.3.损坏数据库数据

直接将db_1、db_2、db_3的数据文件删除即可。此时数据库已经被损坏了,下面通过全量备份+增量备份还原数据库数据。

[root@mysql ~]# rm -rf /data/mysql/db_1/
[root@mysql ~]# rm -rf /data/mysql/db_2/
[root@mysql ~]# rm -rf /data/mysql/db_3/

4.4.整理全量备份数据

从这里开始正式进行增量备份数据还原。

[root@mysql ~]# innobackupex --apply-log --redo-only /data/dbbackup/all_db_bak/all_bak_2022-07-03/

4.5.整理周一的增量备份并合并到全量备份中

全量数据已经整理完毕了,下面将增量备份一个个的合并到全量备份中,首先将周一的增量备份合并到全量备份中。

[root@mysql ~]# innobackupex --apply-log --redo-only --incremental-dir=/data/dbbackup/inc_db_bak/monday_inc_bak /data/dbbackup/all_db_bak/all_bak_2022-07-03/

注意:全量备份整理和增量备份整理时都需要加上--redo-only参数,最后一次增量备份整理时除外。

当周一的增量备份合并到全量备份之后,全量备份中的last_lsn号就发生了变化,lsn号已经记录到了周一增量备份的last_lsn号,此时就包含了周一增量的数据。

image-20220703215847680

4.6.整理周二的增量备份并合并到全量备份中

下面将周二的增量备份整理,然后合并到全量备份中。

[root@mysql ~]# innobackupex --apply-log --incremental-dir=/data/dbbackup/inc_db_bak/tuesday_inc_bak /data/dbbackup/all_db_bak/all_bak_2022-07-03/

注意:周二的增量备份是最后一个增量备份了,此时不需要再加--redo-only参数。

当周二的增量备份与全量备份合并后,全量备份的last_lsn号再次发生变化,此时全量备份中已经包含了周一、周二的增量数据。

image-20220703220407232

4.7.再次整理全量备份数据

增量备份和全量备份已经合并了,此时需要再次整理一下全量的备份数据。

[root@mysql ~]# innobackupex --apply-log /data/dbbackup/all_db_bak/all_bak_2022-07-03/

4.8.通过全量备份还原被破坏的数据

之前使用XBK备份还原都是直接拷贝的数据文件,下面我们通过XBK自带的还原工具来还原数据。

[root@mysql ~]# innobackupex --copy-back /data/dbbackup/all_db_bak/all_bak_2022-07-03/
[root@mysql ~]# chown -R mysql. /data/mysql/
[root@mysql ~]# systemctl restart mysqld

使用此方法还原数据时,要保证数据库的数据目录是空的,否则是无法还原的,如果不想覆盖掉数据目录的所有文件,那么还是通过cp进行还原。

[root@mysql ~]# \cp -ra /data/dbbackup/all_db_bak/all_bak_2022-07-03/db_1/* /data/mysql/db_1/
[root@mysql ~]# \cp -ra /data/dbbackup/all_db_bak/all_bak_2022-07-03/db_2/* /data/mysql/db_2/
[root@mysql ~]# \cp -ra /data/dbbackup/all_db_bak/all_bak_2022-07-03/db_3/* /data/mysql/db_3/
[root@mysql ~]# chown -R mysql. /data/mysql/
[root@mysql ~]# systemctl restart mysqld

数据还原成功,全备数据和增量数据都被恢复了。

image-20220703224836200

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的运算符和数据类型转换

Python的运算符&#xff1a; 算术运算符: 加法&#xff1a;减法&#xff1a;-乘法&#xff1a;*除法&#xff1a;/取余&#xff1a;%幂运算&#xff1a;**整除&#xff1a;// 比较运算符: 等于&#xff1a;不等于&#xff1a;!大于&#xff1a;>小于&#xff1a;<大于等于…

WPF真入门教程27--项目案例--设备数据实时监测

1、上图看效果 今天要做的一个案例是这样的效果&#xff0c;它能实时监测车间设备有关数据&#xff0c;并以表格和图形显示在界面上&#xff0c;这个比上个案例要复杂些&#xff0c;颜值也高些&#xff0c;通过这个来巩固wpf的技能&#xff0c;用到了命令绑定&#xff0c;样式…

【数据库】视图索引执行计划多表查询笔试题

文章目录 一、视图1.1 概念1.2 视图与数据表的区别1.3 优点1.4 语法1.5 实例 二、索引2.1 什么是索引2.2.为什么要使用索引2.3 优缺点2.4 何时不使用索引2.5 索引何时失效2.6 索引分类2.6.1.普通索引2.6.2.唯一索引2.6.3.主键索引2.6.4.组合索引2.6.5.全文索引 三、执行计划3.1…

uniapp运行自定义底座到真机没反应

同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示。 如果此时手机没有任何反应&#xff0c;请检查自定义基座是否正确;如果是离线制作的自定义基座包&#xff0c; 请检查离线包制作是否正确。 网上各种查找报…

C++力扣题目513找树左下角的值

给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 思路 本题要找出树的最后一行的最左边的值。此时大家应该想…

C#Stopwatch类高精度计时功能

Stopwatch 是 C# 中的一个类&#xff0c;用于测量时间间隔的工具。它提供了高精度的计时功能&#xff0c;可以用于性能测试、调试和其他需要测量时间的场景。 使用 Stopwatch 类&#xff0c;你可以执行以下操作&#xff1a; 启动计时器&#xff1a;使用 Start 方法启动计时器…

Verilog 状态机 示例

状态机设计&#xff1a;3 段式&#xff08;推荐&#xff09; 状态机设计如下&#xff1a; (0) 首先&#xff0c;根据状态机的个数确定状态机编码。利用编码给状态寄存器赋值&#xff0c;代码可读性更好。 (1) 状态机第一段&#xff0c;时序逻辑&#xff0c;非阻塞赋值&#xf…

okcc呼叫系统如何配置呼入?

配置OKCC的呼入需要进行以下步骤&#xff1a; 1. 登录OKCC管理界面&#xff1a;使用管理员账号和密码登录OKCC的管理界面。通常可以在浏览器中输入OKCC的IP地址或域名来访问管理界面。 2. 确认网关配置&#xff1a;在OKCC管理界面中&#xff0c;确认已正确配置了网关&#xf…

在windows11系统上利用docker搭建linux记录

我的windows11系统上&#xff0c;之前已经安装好了window版本的docker&#xff0c;没有安装的小伙伴需要去安装一下。 下面直接记录安装linux的步骤&#xff1a; 一、创建linux容器 1、拉取镜像 docker pull ubuntu 2、查看镜像 docker images 3、创建容器 docker run --…

rtm姿态跟踪

6年前&#xff1a; GitHub - YuliangXiu/PoseFlow: PoseFlow: Efficient Online Pose Tracking (BMVC18) 报错&#xff1a; Clarification on min_keypoints in tracking Issue #1411 open-mmlab/mmpose GitHub https://github.com/open-mmlab/mmpose/blob/c8e91ff456d82c…

根能抵达的节点(二分法、DFS)C++

给定一棵由 N个节点构成的带边权树。节点编号从 0到 N−1&#xff0c;其中 0 号点为根节点。最初&#xff0c;从根节点可以抵达所有节点&#xff08;包括自己&#xff09;。如果我们将所有边权小于 X 的边全部删掉&#xff0c;那么从根节点可以抵达的节点数目就可能发生改变。 …

全国首创:福建协和医院成功完成长期型人工心脏微创植入

导语 微创技术在心脏手术领域正逐渐发展&#xff0c;并取得了突破性进展。最近&#xff0c;福建协和医院成功进行了全球第二例微创EVAHEART左心室辅助装置手术&#xff0c;为心脏病患者带来新的希望和治疗选择。 2023年11 月&#xff0c;中华医学会胸心血管外科学分会第八届…

从零开始学Python:分支结构

应用场景 迄今为止&#xff0c;我们写的Python代码都是一条一条语句顺序执行&#xff0c;这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题&#xff0c;比如我们设计一个游戏&#xff0c;游戏第一关的通关条件是玩家获得1000分&#xff0c;那么在完成本…

电商建表常用前缀[ams/mms/pms/oms/cms/wms/crm]

ams&#xff1a;代表 "Admin Management System"&#xff0c;即管理后台系统。该模块通常用于管理用户、权限、订单等与后台管理相关的功能。 mms&#xff1a;代表 "Merchant Management System"&#xff0c;即商家管理系统。该模块通常用于管理商家账户、…

Duality

对偶 拉格朗日对偶函数 考虑优化问题 min ⁡ f 0 ( x ) s.t. f i ( x ) ≤ 0 , i 1 , … , m h i ( x ) 0 , i 1 , … , p \begin{array}{ll} \min & f_0\left(\mathbf{x}\right) \\ \text {s.t.} & f_i\left(\mathbf{x}\right) \leq 0, \quad i1, \ldots, m \\ …

基于人脸识别的智慧校园方案—校内区域智能管理(2)

实验室人脸识别 实验是教师、学生和科研人员进行教学和科学研究的重要场地,也是学校教务管理中的重要组成部分,高校实验室管理质量直接影响教学科研工作质量。 随着在校学生的日益增多,实验室资源如何分配利用、实验室设施安全如何保障也成为一大难题。运用智能管理系统开…

windows安装Elasticsearch后使用ik分词器报错解决办法

最近在学习Elasticsearch&#xff0c;安装完成后下载了ik分词器压缩到plugins目录下启动es报错如下&#xff1a; java.security.AccessControlException: access denied (“java.io.FilePermission” “D:…\plugins\ik-analyzer\config\IKAnalyzer.cfg.xml” “read”)咋一看…

外贸建站主机哪个好?海洋建站系统怎么样?

外贸建站主机的选择攻略&#xff1f;搭建电商网站用哪个主机好&#xff1f; 要在互联网上建立一个成功的外贸网站&#xff0c;选择一款稳定可靠的外贸建站主机是至关重要的一环。海洋建站将探讨在众多选择中&#xff0c;如何寻找一款适合自己业务需求的外贸建站主机。 外贸建…

PCF8563转STM32 RTC避坑指南

问题一&#xff0c;时间读取错误 原因&#xff0c;读写时间必须Time在前&#xff0c;Date在后 HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BCD); HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BCD); HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BCD); …

【AI视野·今日Sound 声学论文速览 第四十四期】Tue, 9 Jan 2024

AI视野今日CS.Sound 声学论文速览 Tue, 9 Jan 2024 Totally 27 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers DJCM: A Deep Joint Cascade Model for Singing Voice Separation and Vocal Pitch Estimation Authors Haojie Wei, Xueke Cao, Wenbo Xu…