019、数据库管理之备份恢复管理(BR)

news2024/10/7 8:20:13

备份的重要性

  • 数据库恢复
  • 审计和分析
  • 典型DBA任务

备份的类型

  • 热备,允许应用程序完全访问数据。
  • 冷备,不允许应用程序访问年数据
  • 温备,允许应用程序读取,但不能修改

热备份

  • 热备份是在读取和修改数据时进行的,几乎不会中断您与数据交互或操作数据的能力。
  • 对于读取和修改数据的操作,系统仍可访问。
  • 通过以下方式锁定数据:
    • 使用MVCC
    • 锁定在较低级别
    • 完全不锁定,以便应用程序可以继续访问数据

冷备份

  • 当用户无法访问数据时发生。
  • 防止对数据执行任何活动

温备份

  • 在访问数据时发生
  • 具有不必完全锁定最终用户的优势
  • 可能会导致性能问题,因为备份期间无法修改数据。

备份技术

  • 逻辑备份
    • 文本形式:SQL语句
  • 物理备份
    • TiDB数据库文件的二进制副本
  • 基于复制
  • 增量备份
    • 通过同步复制创建

逻辑备份

通过使用Dumpling 或 Lightning 执行完整的数据转储。
这些数据转储基于特定的时间点,但是在所有备份技术中是较慢的。
优势: 该过程将创建一个SQL脚本,可以在TiDB服务器上执行该脚本。
劣势: 转储过程中,锁定表会阻止用户在备份过程中修改数据。

物理备份

  • 通过复制数据文件创建
  • 必须还原到相同的存储引擎和TiDB版本
  • 可以跨机器架构还原
  • 比逻辑备份和恢复执行和还原速度更快

物理备份的文件

  • 原始二进制备份比逻辑备份块,该过程是简单的文件或文件系统副本
  • 这些副本跟TiDB数据库本身在磁盘上存储的格式大小完全相同的格式保存数据库

物理备份的条件

  • 备份期间,服务器不得修改数据文件
  • 如果要复制实时数据文件,则防止写入这些文件

备份恢复技术对比

方法冷/热/温备逻辑备份/物理备份一致性
BR工具热备物理
Dumpling热/温备逻辑
复制热备逻辑
操作系统拷贝冷/温物理

备份恢复技术的选择

在这里插入图片描述

使用备份恢复工具BR进行备份恢复

BR介绍

BR全称为Backup & Restore,是TiDB分布式备份恢复的命令行工具,用于对TiDB集群进行数据备份和恢复

适用场景

  • 大数据量
  • 速度较快
  • SST文件
  • 只能恢复到TiDB数据库

BR原理

在这里插入图片描述
在一次备份或恢复中,各个TiKV节点都会有一个对应的备份路径,TiKV备份时产生的备份文件会保存在该路径下,恢复时也会从该路径读取相应的备份文件,每个节点的leader 数据会备份到每个节点的备份目录。

BR的使用限制

1、BR恢复到TiCDC/Drainer的上游集群时,恢复数据无法由TiCDC/Drainer同步到下游
2、备份集群和恢复集群采用相同的排序规则(new_collations_enabled_on_first_bootstrap)
3、版本兼容性(使用-check-requirements=false 强行跳过版本检查)
4、某些功能在开启或关闭状态下,会导致KV格式发生变化

BR命令

  • 通过SQL语句
    TiDB支持使用SQL语句backup和restore 进行备份恢复。如果要查看备份恢复的进度,可以使用show backups|restores语句。
  • 通过命令行工具
    TiDB支持使用BR命令行工具进行备份恢复。

全库备份

br backup full --pd "${PD_IP}:${PD_PORT}" --storage "local:///tmp/backup" --ratelimit 120 --log-file backupfull.log

–storage: 每个节点leader备份的位置,另外在做恢复的时候,一定要包含所有sst,不仅仅只包含自己的。所以这个应该用共享存储。
ratelimit: 速度上限 120M/s

全库恢复

br restore full --pd "${PD_IP}:${PD_PORT}" --storage "local:///tmp/backup" --ratelimit 128 --log-file restorefull.log

单库备份

br backup db --pd "${PD_IP}:${PD_PORT}" --db test --storage "local:///tmp/backup" --ratelimit 120 --log-file backupdb.log

单库恢复

br restore db --pd "${PD_IP}:${PD_PORT}" --db "test" --storage "local:///tmp/backup" --log-file backupdb.log

单表备份

br backup table --pd "${PD_IP}:${PD_PORT}" --db test --table utable --storage "local:///tmp/backup" --ratelimit 120 --log-file backuptable.log

单表恢复

br restore table --pd "${PD_IP}:${PD_PORT}" --db test --table utable --storage "local:///tmp/backup" --ratelimit 120 --log-file restoretable.log

过滤恢复数据

可以使用--filter 或者-f指定使用表库过滤
br restore full --pd "${PD_IP}:${PD_PORT}" --filter 'db*.tbl*' --storage "local:///tmp/backup" --ratelimit 120 restorefilter.log

增量备份

增量备份,只需要在备份的时候指定上一次的备份时间戳 --lastbackupts即可

br backup full --pd "${PD_IP}:${PD_PORT}" -s "local:///tmp/increment"  --lastbackupts ${LAST_BACKUP_TS}

LAST_BACKUP_TS = `br validate decode --field = "end-version" -s "local:///tmp/backup" | tail -n1`

增量恢复

增量恢复的方法和使用BR进行全量恢复的方法并没有差别。需要注意的是:恢复增量数据的时候,需要保证备份时指定的last_backup_ts之前的备份数据已经全部恢复到目标集群。

最佳实践

  • 推荐在业务低峰时执行备份操作
  • 恢复期间对在线业务影响很大,建议低峰期或者限速(rate-limit)进行恢复
  • 备份和恢复最好都只使用串行
  • 指定存储的时候,指定共享存储

实验-安装工具

[root@tiup ~]# wget https://download.pingcap.org/tidb-toolkit-v5.0.1-linux-amd64.tar.gz

[root@tiup ~]# tar xvf tidb-toolkit-v5.0.1-linux-amd64.tar.gz 
tidb-toolkit-v5.0.1-linux-amd64/
tidb-toolkit-v5.0.1-linux-amd64/bin/
tidb-toolkit-v5.0.1-linux-amd64/bin/tikv-importer
tidb-toolkit-v5.0.1-linux-amd64/bin/dumpling
tidb-toolkit-v5.0.1-linux-amd64/bin/br
tidb-toolkit-v5.0.1-linux-amd64/bin/tidb-lightning
tidb-toolkit-v5.0.1-linux-amd64/bin/mydumper
tidb-toolkit-v5.0.1-linux-amd64/bin/tidb-lightning-ctl
tidb-toolkit-v5.0.1-linux-amd64/bin/pd-tso-bench
tidb-toolkit-v5.0.1-linux-amd64/bin/sync_diff_inspector

加入到换进变量中
[root@tiup ~]# grep -i 'PATH' ~/.bash_profile 
PATH=$PATH:$HOME/bin
export PATH
export PATH=/root/.tiup/bin:$PATH:/root/tidb-toolkit/bin

实验-全库备份

1、 添加备份目录
所有的TiKV节点创建文件夹/tmp/backup,用来存储节点的备份文件。

[root@tiup ~]# mkdir /tmp/backup   
循环在每一个TiKV节点上进行操作。

2、全库备份
连接到其中一个PD节点,开始进行数据库全备份:

[root@tiup tidb-toolkit]# ./br backup full --pd "192.168.16.10:2379" --storage "local:///tmp/backup" --ratelimit 120 --log-file backupfull.log
Detail BR log in backupfull.log 
Full Backup <----------------------------------------------------------------------------------> 100.00%
Checksum <-------------------------------------------------------------------------------------> 100.00%
[2023/06/27 17:22:29.449 -04:00] [INFO] [collector.go:67] ["Full Backup success summary"] [total-ranges=12] [ranges-succeed=12] [ranges-failed=0] [backup-checksum=55.745741ms] [backup-fast-checksum=11.735203ms] [backup-total-regions=66] [backup-total-ranges=66] [total-take=820.332664ms] [BackupTS=442473106335596546] [total-kv=1054] [total-kv-size=77.76kB] [average-speed=94.79kB/s] [backup-data-size(after-compressed)=46kB] [Size=45997]

--pd : 连接TiDB数据库的PD节点,最好在PD节点上执行,即连接本节点
--storage: 备份文件存储在TiKV节点上的位置
--ratelimit : 对于备份所用存储带宽限速
--logfile : 备份日志文件

3、查看备份目录
备份结束后,可以到各个TiKV节点检查备份文件

[root@tiup backup]# cd 1
[root@tiup 1]# ls
16_8_355f0b5a4a8313c61daccaf1f055ac6ce3e0abaeb3d9fda7eb60557014f38dac_1687900949109_write.sst
16_8_495c5d2e3a1901df43133318e03236d08d1c8882cdd7b452579a4fcd82ccb718_1687900949092_write.sst
18_9_36adb8cedcd7af34708edff520499e712e2cfdcb202f5707dc9305a031d55a98_1687900949120_write.sst
18_9_c2baa1d0dee98e26766aa462a873c405eaad66653a52db6bc9e1d584f6aebcc7_1687900949127_write.sst
24_12_afb978bcbf32cf0ba18923daa88bdab19c00ad22f4fe49863f102827eb831e21_1687900949153_write.sst
24_12_d0a5865efa1d90636cf0c26e991e1f13ad4ef35c631530b967aa1e342d73208b_1687900949147_write.sst
38_19_2d2f68c250f77d93ffb8ea543a425eebeea7c92d1f033e9d32cdb914ca4341a9_1687900949224_write.sst
38_19_8dd75043152f9a7a07ef9bc0b24b629d464621806e3c93219cac918ec3d5b346_1687900949217_write.sst
38_19_a24c493bf7e801abe1238806dd31796f911e7dd0970118b9315f0a7366532873_1687900949229_write.sst
42_21_ff781abda573afc7d7878f20390a290dcdb471bf12a8cbabf359ccf9e8d37084_1687900949247_write.sst
6_3_302753bc98ec93e98edea12aeac15074da779bb66c735c8ce184eacf43f1e7c2_1687900949297_write.sst
6_3_c11c7f8053ba1d8a3efe53decec79ee83321252578aaa0e09024538869d60d0d_1687900949290_write.sst

4、查看执行备份的节点
同时在执行备份的节点上,也会自动创建文件/tmp/backup 用来存储元数据和锁信息

cd /tmp/backup/
[root@tiup backup]# ls
backup.lock  backupmeta

5、进行单库备份

mkdir /tmp/test

[root@tiup tidb-toolkit]# ./br backup db --pd "192.168.16.10:2379" --db test --storage "local:///tmp/test" --ratelimit 120 --log-file backupfull.log

实验-恢复演示

1、故障模拟

[root@tiup ~]# mysql -uroot -p -P4000 -h192.168.16.10
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 405
Server version: 5.7.25-TiDB-v6.1.6 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible

mysql> drop database test;
Query OK, 0 rows affected (0.22 sec)

2、备份汇总
接下来准备进行恢复,首先将所有TiKV目录/tmp/test下面都备份文件拷贝到其他节点.并且保证在所有的TiKV节点上都有完整的备份

cd /tmp/test
scp tikv2:/tmp/test/* .
scp tikv3:/tmp/test/* .
循环操作,更换不同节点,保证所有tikv节点上都有完整备份

3、开始进行恢复

[root@tiup tidb-toolkit]# ./br restore db --pd "192.168.16.10:2379" --db "test" --storage "local:///tmp/test"  --log-file restoredb.log
Detail BR log in restoredb.log 
DataBase Restore <----------------------------------------------------------------------> 100.00%
[2023/06/27 22:32:24.843 -04:00] [INFO] [collector.go:67] ["DataBase Restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-region=436.944µs] [restore-ranges=1] [total-take=2.004639305s] [Size=1560] [BackupTS=442477980702998563] [total-kv=2] [total-kv-size=58B] [average-speed=28.93B/s] [restore-data-size(after-compressed)=1.56kB]

4、验证

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA     |
| PERFORMANCE_SCHEMA |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.01 sec)

实验-单表备份和恢复

1、创建备份目录
在所有TiKV节点创建文件夹/tmp/t1,用来存储本节点的备份文件

mkdir -p /tmp/t1
循环在每一个TiKV节点上进行操作

2、备份表

[root@tiup tidb-toolkit]# ./br backup table --pd "192.168.16.10:2379" --db "test" --table t1 --storage "local:///tmp/t1"  --log-file backupt1.log
Detail BR log in backupt1.log 
Table Backup <--------------------------------------------------------------------------> 100.00%
Checksum <------------------------------------------------------------------------------> 100.00%
[2023/06/27 22:40:38.475 -04:00] [INFO] [collector.go:67] ["Table Backup success summary"] [total-ranges=1] [ranges-succeed=1] [ranges-failed=0] [backup-checksum=3.698861ms] [backup-fast-checksum=429.128µs] [backup-total-ranges=1] [backup-total-regions=1] [total-take=236.714686ms] [BackupTS=442478110541348866] [total-kv=2] [total-kv-size=58B] [average-speed=245B/s] [backup-data-size(after-compressed)=1.56kB] [Size=1560]

3、模拟故障

mysql> use test;

mysql> drop table t1;

4、备份汇总
接下来准备进行恢复,首先将所有TiKV目录/tmp/t1下面都备份文件拷贝到其他节点.并且保证在所有的TiKV节点上都有完整的备份

cd /tmp/t1
scp tikv2:/tmp/t1/* .
scp tikv3:/tmp/t1/* .
循环操作,更换不同节点,保证所有tikv节点上都有完整备份

5、开始恢复

[root@tiup tidb-toolkit]# ./br restore table --pd "192.168.16.10:2379" --db "test" --table t1 --storage "local:///tmp/t1"  --log-file restoret1.log
Detail BR log in restoret1.log 
Table Restore <-------------------------------------------------------------------------> 100.00%
[2023/06/27 22:46:26.773 -04:00] [INFO] [collector.go:67] ["Table Restore success summary"] [total-ranges=2] [ranges-succeed=2] [ranges-failed=0] [split-region=499.422µs] [restore-ranges=1] [total-take=1.062222347s] [Size=1560] [BackupTS=442478201636388866] [total-kv=2] [total-kv-size=58B] [average-speed=54.6B/s] [restore-data-size(after-compressed)=1.56kB]

6、验证

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

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

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

相关文章

怎么高效批量调整视频的尺寸大小

大家平时在剪辑视频的过程中&#xff0c;是否会遇到视频尺寸大小不合适的情况&#xff0c;当我们遇到这种情况时&#xff0c;如何才能快速批量地解决呢&#xff1f;有没有什么方法可以快速批量修改视频尺寸大小呢&#xff1f;跟着小编一起来看看我平时批量修改视频尺寸的方法。…

联邦学习的架构思想

目录 联邦学习介绍&#xff08;非常详细&#xff09; 联邦学习的由来 联邦学习的发展历程 1) 机器学习 2) 分布式机器学习 3) 隐私保护技术 4) 联邦学习 联邦学习的规范与标准 联邦学习的架构思想 联邦学习的社区与生态 联邦学习介绍&#xff08;非常详细&#xff09…

Lenovo联想笔记本电脑 小新 Air-14 2020 Intel平台IIL版(81YJ)原装Win10系统恢复原厂OEM预装专用系统

Lenovo联想笔记本电脑&#xff0c;小新 Air-14 2020 Intel平台IIL版(81YJ)出厂Windows10系统原装系统镜像&#xff0c;恢复原厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1…

基于微信小程序的上课签到系统(数据库+报告+文档+演示视频)

系统技术语言介绍&#xff1a; 本系统采用了SSM (Spring Spring MVC Mybatis&#xff09;架构&#xff0c; MySQL作为基础数据库&#xff0c;微信开发工具作为前端基础&#xff0c;前端采用了 wxml的设计语言&#xff0c;Idea作为后台的开发工具。 功能列表&#xff1a; 1.…

从数字图像到音视频学习:我的学习之旅

数字图像是一门广泛应用于计算机视觉、图像处理和计算机图形学等领域的学科&#xff0c;而音视频学习则涵盖了音频和视频的处理、分析和应用。 如果你最开始接触数字图像&#xff0c;可能会学习一些基本概念&#xff0c;例如像素、分辨率、色彩空间和图像处理算法等。这可能涉…

java项目之药源购物网站ssm源码+文档

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的药源购物网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&#xff…

隔离变压器和浪涌保护器SPD有哪些不同作用

浪涌保护装置&#xff08;SPD&#xff09;和隔离变压器的作用经常混淆。为了保护敏感的电子设备和设备免受瞬态事件的影响&#xff0c;必须考虑各种因素。 无论瞬态来自外部还是内部&#xff0c;信号噪声、共模瞬变、差模瞬变和接地电位上升都可能导致保护不力的设备出现问题。…

vue中使用mock.js

安装mock npm install mockjs --save-dev或者在ui中选择依赖 查看安装是否成功 进入package.json文件 配置mock 在src目录下新建mock文件夹&#xff0c;在mock文件夹下建立index.js 配置模拟请求数据 index.js import Mock from mockjsconst loginData Mock.mock(http://l…

【 云原生 kubernetes 】- 单点登录Authelia + OpenLdap

文章目录 简介AutheliaOpenLdap属性介绍 Helm部署openldap配置调整数据持久化部署使用命令行Web Authelia 页面访问反向代理进行集成流程 ⚡️: OpenLDAP是轻量级目录访问协议&#xff08;LDAP&#xff09;的开源实现&#xff0c;它提供了一种存储和访问关于用户、组、计算机和…

使用Python将图片转pdf

使用Python将图片转pdf 1. 效果图2. 源码参考 今天需要把图片转pdf&#xff0c;发现迅捷pdf转换开始默认带水印了&#xff0c;收费版那算了&#x1f602;&#x1f602;&#xff0c;那就用Python吧&#xff0c;可单转&#xff0c;可批量转。 参考: https://blog.csdn.net/qq_53…

我是如何在linux下 安装 mongoDB的

背景 接到上级任务&#xff0c;需要在测试环境搭建一套mongodb&#xff1b;对于从来没接触过mongodb的小白&#xff0c;但拥有多年编程经验的我来说&#xff0c;不虚好吧。因为我有自己做事的思考。 首先向领导确认两点&#xff1a; 搭建mongo db是单机版的&#xff0c;还是主…

自定义Veiw实战《渐变的文字》

自定义Veiw实战《渐变的文字》 前言SpannableString什么时候使用常用场景 自定义TextView控件什么时候使用实战歌词渐变的文字先看效果第一步&#xff1a;初始化第二步&#xff1a;测量文字&#xff0c;并确认文字绘制的起点第三步&#xff1a;绘制文字第四步&#xff1a;调用 …

Node.js安装及npm国内镜像配置

node.js中文网站下载&#xff0c;以16.17为例&#xff01;&#xff01;&#xff01;&#xff01; 安装 1.网站链接 CNPM Binaries Mirror (npmmirror.com) 根据自己的版本选择&#xff0c;我是64位选择了zip版 2.下载完成后解压 我选择的目录是&#xff08;E:\Environments…

mac中在html中引入react.development.js、react-dom.development.js报错

错误描述 Uncaught ReferenceError: process is not definedUncaught Invariant Violation: ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.Inline Babel script:3 Uncaught ReferenceError: React is not defined解决 1…

react中数组列表的简单新增,删除以及修改实践

react中数组列表的简单新增&#xff0c;删除以及修改实践 效果示例图示例代码 index.jsx示例样式 index.scss 效果示例图 新增图片 编辑图片 示例代码 index.jsx import { useEffect, useState } from "react"; import "./index.scss";// 创建数据 fu…

WebGIS 信息系统-数据库设计

WebGIS 信息系统-数据库设计 E-R 图设计创建数据库及数据表开发环境及环境配置1 .服务器端2. 客户端1 &#xff09;配置Struts22 &#xff09;配置Hibernate3 &#xff09;配置Spring4 &#xff09;配置Web . xml 基于GIS 的交通信息系统采用PostgreSQL 为属性数据库&#xff0…

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法

虚拟机中Ubuntu 22上传框被黑框包裹的解决方法 现象解决方法 现象 在vm17下的ubuntu22使用上传表单时出现了这种不和谐的现象&#xff0c;被领导批评一通。最后费劲心思&#xff0c;找到了这个问题的解决方法。 解决方法 解决方法特别容易&#xff0c;在虚拟机的设置中&…

TypeScript 【type】关键字的进阶使用方式

导语&#xff1a; 在前面章节中&#xff0c;我们了解到 TS 中 type 这个关键字&#xff0c;常常被用作于&#xff0c;定义 类型别名&#xff0c;用来简化或复用复杂联合类型的时候使用。同时也了解到 为对象定义约束接口类型 的时候所使用的是 Interfaces。 其实对于前面&#…

ansible - 安装 -【kodcloud教程】

目录 目录结构、主机清单 【1】安装基础环境 【2】webserver - 安装nginx 【3】安装php环境 【4】lb-server 【5】redis安装 【6】 kodcloud 【7】wordpress-proxy ansible10.0.0.10lb-server10.0.0.11web0110.0.0.15web0210.0.0.16redis10.0.0.20 目录结构、主机清单…

[python][yolov7][深度学习]将yolov7实例分割成一个类几句代码完成实例分割任务

大家都知道,yolov7目前支持图像分类、目标检测和实例分割&#xff0c;而实例分割一般都是用predict.py去预测图片这个如果要引入pyqt5或着嵌入其他python模块有点麻烦&#xff0c;因此需要封装一个类去预测图像&#xff0c;这样我们可以轻松完成各种实例分割任务&#xff0c;封…