数据库系列之分布式数据库下误删表怎么恢复?

news2025/1/6 5:31:20

数据的完整性是数据库可用性的基本功能,在实际应用数据库变更操作过程中可能因为误操作导致误删表或者truncate操作影响业务的正常访问。本文介绍了分布式数据库中在误删表场景下的数据恢复方案,并进行了对比。


1、数据库误删表恢复方案

应用数据的完整性是保证应用系统正常服务的重要基础,在实际应用DDL部署过程或数据库变更过程中,可能因为误操作导致应用关键表被误删除或truncate,影响业务的正常访问。分布式数据库中当误删表时有不同的数据恢复方案:

  1. 基于数据库备份+增量日志:该方案的前提是数据库有一份全量的备份数据,在这个全量备份数据的基础之上应用增量的数据库日志,并且跳过误操作的日志,进而完成表数据的恢复。基于数据库备份的恢复方案在库数据量大或者增量日志多的时候耗时较长,在这个恢复的过程中应用是无法正常访问的。
  2. 基于闪回技术:数据库闪回技术是基于回收站和数据库undo日志完成数据库的恢复操作,undo数据用于记录数据修改之前的状态信息,数据库会将这部分数据写入undo段中用于回滚事务,或者发生错误时恢复数据到修改前的状态。对于误删表等操作,数据库中实际上是一个rename操作,将表移动到回收站,只要回收站中的空间足够且未被清理,就可以使用闪回删除来恢复被删除的表。
  3. 基于延迟复制方案:延迟复制一般是在主备部署架构的数据库中通过备节点延迟复制主节点的数据,当主节点出现逻辑上的误操作如误删表时,利用备节点延迟同步和跳过特定的误操作事务日志来恢复数据。延迟复制通常是在生产集群之外再建一个单独的最小化备集群,需要额外的部署成本,同时依赖数据库厂商实现延迟复制并跳过特定的事务。

在误删表的故障场景下业务访问误删除的表会报错,业务对其它表的访问仍然正常。下文将简要介绍分布式数据库下以上三种误删表操作下的数据恢复方法。

2、分布式数据库下误删表恢复方法
2.1 基于备份+增量日志的恢复

数据库的完整备份数据和增量日志是保证数据库完整性的基础,一些重要的应用系统每天会进行全量或增量的数据库备份,在数据恢复的过程中首先基于这些备份数据恢复到备份时点的数据,再通过增量日志追加的方式将数据恢复到PITR一致时间点。在误删表等特殊场景下,增量追加日志的时候需要将这一特殊的操作跳过,而在分布式数据库中还需要恢复多个实例的数据和以及计算节点层的元数据信息。以下以GoldenDB分布式数据库为例介绍这种误删表恢复方案的恢复过程。

在这里插入图片描述

1)恢复误删表的表结构
从保存的DDL中恢复出表结构信息,用于后续表结构恢复。

2)登录到每个分片的主节点,解析binlog并获取到删表操作的gtidX信息

#执行命令
$mysqlbinlog -vv mysql-bin.xxx |grep -i -B20 ‘drop table’

找到类似如下信息:

SET @@SESSION.GTID_NEXT=’xxxx’/*!*/;
DROP TABLE xx.xx /*generated by server*/

3)选取待恢复的备节点,并使用全量备份数据恢复备节点

##停止备节点
$dbmoni -stop
##使用restore命令恢复备节点
$restory.py --full_backup_filename=xx --my_cnf=xx.cnf --db_user=xx --db_password=xx

4)追binlog到当前状态,并跳过删表的gtid
检查备节点状态,dbagent非启动,并且数据库实例是启动的

$dbstate

设置gtid_next并手动执行空事务,跳过drop table对应的操作,gtid_next为之前解析binlog找到的

> set @@session_gtid_next=’xxxx’;
> begin;
> commit;

启动dbagent,将备机接入集群,开启自动主从复制

##启动备节点
$dbmoni -start

5)检查主备同步的状态,确认备机已追上主机

$show slave status \G
$show tables like ‘xx’

此时备机中之前误删除的表数据已经恢复。

6)发起主备切换,将恢复的备机作为主节点对外提供服务
此时虽然主备切换成功,备节点作为新主,但是原主节点作为备机,和新主节点之间数据是不一致的,需要通过修复备机的方式恢复。

7)登录Proxy节点,更新元数据信息。
此时虽然数据节点已经恢复了表数据,但是在计算节点层没有该表的元数据信息,需要通过恢复的元数据信息更新计算层的元数据。

8)修复其它备机状态
新发起全量备份,通过备份数据恢复其它备机。注意在主节点发起备份时候对性能会有部分损耗,比如响应时间增加、IO影响等。

基于全量备份+增量日志的误删表恢复方法,在表数据恢复期间业务访问这部分表会报错,整个故障的RTO时间依赖于全量备份的恢复加上增量日志追平。在单主节点对外提供服务的时候,需要调整相关的配置,比如调整高低水位和主计数等,优先可用性。

2.2 基于闪回空间的恢复

基于闪回空间的恢复是利用了回收站的机制,当用户执行DROP表操作时,数据库并不会立即从磁盘上删除表的物理文件,而是将其移动到回收站中。回收站中的对象可以被视为被“软删除”,即它们仍然存在于数据库中,但不再对用户可见。多个分布式数据库已支持闪回功能,比如TiDB、GaussDB、OceanBase、GoldenDB等。以GaussDB数据库为例,回收站功能通过数据库参数enable_recyclebin来启用或禁用。回收站中对象的保留时间由参数recyclebin_retention_time来控制,超过该时间的对象将被自动清理。利用闪回恢复只需要秒级,并且恢复时间和数据库大小无关。

#闪回被删除的表
TIMECAPSULE TABLE { table_name } TO BEFORE DROP [RENAME TO new_tablename]
#闪回截断的表
TIMECAPSULE TABLE { table_name } TO BEFORE TRUNCATE

1)查看回收站,删除的表被放入回收站

gaussdb=# SELECT * FROM gs_recyclebin;
 rcybaseid | rcydbid | rcyrelid |           rcyname            |    rcyoriginname     | rcyoperation | rcytype | rcyrecyclecsn |        rcyrecycletime         | rcycreatecsn | rcychangecs
n | rcynamespace | rcyowner | rcytablespace | rcyrelfilenode | rcycanrestore | rcycanpurge | rcyfrozenxid | rcyfrozenxid64 | rcybucket 
-----------+---------+----------+------------------------------+----------------------+--------------+---------+---------------+-------------------------------+--------------+------------
--+--------------+----------+---------------+----------------+---------------+-------------+--------------+----------------+-----------
     18591 |   12737 |    18585 | BIN$42C23EB5699$9737$0==$0   | test            | d            |       0 |      79352606 | 2024-09-13 20:01:28.640664+08 |     79352595 |     7935259
5 |         2200 |       10 |             0 |          18585 | t             | t           | 225492       |         225492 |

2)闪回drop表

gaussdb=# TIMECAPSULE TABLE test to before drop;

查看表数据已经恢复

闪回功能是一种强大的数据恢复技术,在使用上受到闪回时间点和旧版本保留时间的限制。

  • 闪回时间点限制:闪回功能只能回滚到开启闪回功能后的某个时间点,且只能回滚到最近的一个事务提交点。这意味着,如果数据库在开启闪回功能之前已经发生了错误操作,那么这些操作将无法通过闪回功能来恢复。
  • 旧版本保留时间:闪回功能依赖于旧版本的保留时间。如果旧版本数据被清理或删除,那么将无法回滚到这些时间点。因此,用户需要合理配置旧版本保留时间,以确保能够回滚到所需的时间点。

另外闪回功能只支持部分DDL操作,比如drop表、truncate表等,对于误删库、drop某个字段,以及因为硬件故障导致的数据不一致是无法恢复的。

2.3 基于延迟复制的恢复

基于延迟复制的误删表数据恢复方案在“国产分布式数据库延迟复制实现”一文中做过介绍,如OceanBase数据库的物理备库方案、GoldenDB数据库的DRSP灾备集群方案。实现上主要是依赖分布式数据库的灾备架构建立一套延迟备库集群,主备集群之间通过设置合理的延迟时间,当主集群出现误操作时,通过在备集群跳过对应操作的事务,完成主库的数据同步,再切换到备集群对外提供服务。从实现机制上看和基于备份和增量日志的方式原理类似,少了全量备份数据恢复的动作,减少了恢复的RTO时间。相对应的是部署建设成本的增加,需要在生产站点单独再部署一套备库集群用于故障场景下的数据恢复,成本和收益的权衡,毕竟有更多的措施来预防这一类的故障场景。

2.4 不同恢复方案对比

总结以上三种针对误删表场景下的不同的数据恢复方案,在恢复RTO时间、技术复杂度、部署成本和使用限制等方面进行了对比如下:

方案全量备份+增量日志闪回空间延迟复制
恢复RTO通过全量备份加上增量日志方式,数据恢复时间长秒级恢复依赖于增量日志同步回放时间,较长
部署复杂度方案成熟但操作复杂,数据恢复为数据库的基本功能操作简单,依赖于数据库本身的功能实现不成熟并且操作复杂,依赖于数据库的高可用架构实现
部署成本低,基于现有的部署架构,不会增加额外的成本一般,增加额外的存储空间,并且开启闪回功能会影响一定性能高,需要额外部署一套
技术限制逻辑上恢复,只支持部分DDL操作;保留时间上限制延迟时间上限制
  • 恢复RTO
    • 全量备份+增量日志:先基于全量备份恢复表,再加上增量日志追加方式,数据恢复时间长
    • 闪回空间:支持秒级恢复
    • 延迟复制:基于日志同步回放,时间较长
  • 部署复杂度
    • 全量备份+增量日志:PITR恢复是数据库的基本功能,方案成熟但操作复杂,需要找到drop操作的gtid、指定备机跳过gtid先恢复备机
    • 闪回空间:操作简单,依赖于数据库本身的功能实现
    • 延迟复制:不成熟并且操作复杂,依赖于数据库的高可用架构实现
  • 部署成本
    • 全量备份+增量日志:低,基于现有的部署架构,不会增加额外的成本
    • 闪回空间:一般,增加额外的存储空间,并且开启闪回功能会影响一定性能
    • 延迟复制:高,需要额外部署一套备集群
  • 技术限制
    • 全量备份+增量日志:无
    • 闪回空间:逻辑上恢复,只支持部分DDL操作;保留时间上也存在限制
    • 延迟复制:延迟时间设置上有限制,超过时间后已经同步到备机

在实际应用过程中,如果数据库本身支持闪回功能优先使用该恢复方案,能够满足快速的RTO恢复要求。在闪回功能不成熟或没有该功能时,选择全量备份的恢复方式,方案成熟并且通用性强。


参考资料

  1. GoldenDB分布式数据库备份恢复
  2. GaussDB数据库闪回恢复
  3. 国产分布式数据库延迟复制实现

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

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

相关文章

【分布式缓存中间件Memcached原理与应用】

分布式缓存中间件(以 Memcached 为例) 一、分布式缓存中间件概述 (一)概念 分布式缓存中间件是一种用于存储频繁访问的数据副本的软件系统,它位于应用程序和数据源(通常是数据库)之间。通过在…

No.2十六届蓝桥杯备战|练习题4道|数据类型|字符型|整型|浮点型|布尔型|signed|unsigned(C++)

B2002 Hello,World! - 洛谷 #include <iostream> using namespace std; int main() { cout << "Hello,World!" << endl; return 0; }打印飞机 #include <iostream> using namespace std;int main() {cout << " …

mysql系列7—Innodb的redolog

背景 本文涉及的内容较为底层&#xff0c;做了解即可&#xff0c;是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过&#xff1a;数据和索引保存在磁盘上…

小程序租赁系统开发的优势与应用探索

内容概要 在如今这个数码科技飞速发展的时代&#xff0c;小程序租赁系统开发仿佛是一张神奇的魔法卡&#xff0c;能让租赁体验变得顺畅如丝。想象一下&#xff0c;无论你需要租用什么&#xff0c;从单车到房屋&#xff0c;甚至是派对用品&#xff0c;只需动动手指&#xff0c;…

太速科技-135-4路250Msps 16bit AD采集PCIe卡

4路250Msps 16bit AD采集PCIe卡 一、板卡概述 板卡为四路250M频率采集卡&#xff0c;可以实现四路高速的模拟数据转换到PCI-E总线上。板载两颗250M采样频率的高性能AD芯片&#xff08;ADS42LB69&#xff09;&#xff0c;数据输出模式为LVDS&#xff08;DDR&#xff09…

如何恢复永久删除的PPT文件?查看数据恢复教程!

可以恢复永久删除的PPT文件吗&#xff1f; Microsoft PowerPoint应用程序是一种应用广泛的演示程序&#xff0c;在人们的日常生活中经常使用。商人、官员、学生等在学习和工作中会使用PowerPoint做报告和演示。PowerPoint在人们的学习和工作生活中占主导地位&#xff0c;每天都…

Windows电脑带有日历的桌面备忘记事工具

工作计划、备忘清单、会议文件等怎么能化繁琐为简约&#xff0c;统统存储在一个记事工具中呢&#xff1f;Windows电脑上的备忘记事工具哪一款好用呢&#xff1f;推荐大家可关注敬业签&#xff0c;敬业签是一款集备忘、提醒和日历等功能于一体的桌面记事工具&#xff0c;可悬挂桌…

SSA-Transformer拿捏!麻雀搜索算法优化-Transformer多特征分类预测/故障诊断

SSA-Transformer拿捏&#xff01;麻雀搜索算法优化-Transformer多特征分类预测/故障诊断 目录 SSA-Transformer拿捏&#xff01;麻雀搜索算法优化-Transformer多特征分类预测/故障诊断效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SSA-Transformer麻雀搜索…

STM32G070CB的USART1_RX引脚

简介 在使用STM32G070CBT6 的 USART1时&#xff0c;发现把 PA10作为 USART1_RX引脚时&#xff0c;接收不到数据。 问题排查 更换pin脚 使用PB6/PB7作为USART1_TX/RX&#xff0c; USART1 工作正常。 使用PA9/PB7作为USART1_TX/RX&#xff0c; USART1 同样工作正常。 示波器…

鸿蒙工程签名编译和上架

作为一个开发者&#xff0c;当你把自己的应用开发完了&#xff0c;准备上架到应用市场的时候&#xff0c;就需要用签名文件进行编译和应用上架了&#xff0c;本文介绍如何把一个鸿蒙工程进行签名编译和上架。 在平时开发中&#xff0c;我们可能关注签名不多&#xff0c;大家一般…

S7-1200 SCL PEEK 和 POKE 指令使用

使用S7-1200 SCL 编程语言的 PEEK 和 POKE 指令&#xff0c;可以实现对 I/O、M 存储器和数据块的读取或写入。 而通过 POKE_BLK 指令&#xff0c;还可以实现数据区域的复制或移动。 指令适用条件&#xff1a; 只用于 SCL 编程语言&#xff1b;软件从STEP7 Basic/Pro V11 SP2起…

绘制三元图、颜色空间图:R语言代码

本文介绍基于R语言中的Ternary包&#xff0c;绘制三元图&#xff08;Ternary Plot&#xff09;的详细方法&#xff1b;其中&#xff0c;我们就以RGB三色分布图为例来具体介绍。 三元图可以从三个不同的角度反映数据的特征&#xff0c;因此在很多领域都得以广泛应用&#xff1b;…

【2025 Rust学习 --- 09 特型和泛型】

特型和泛型 Rust 通过两个相关联的特性来支持多态&#xff1a;特型和泛型。许多 程序员熟悉这些概念&#xff0c;但 Rust 受到 Haskell 类型类&#xff08;typeclass&#xff09;的启发&#xff0c;采用 了一种全新的方式。 1、特型是 Rust 体系中的接口或抽象基类。乍一看&a…

位置编码-APE

Transformer 中的绝对位置编码 &#xff08;以下由gpt 生成&#xff09; Transformer 的绝对位置编码&#xff08;Absolute Position Encoding, APE&#xff09;是用于对序列数据中的位置信息进行建模的一种方法。在 Transformer 的架构中&#xff0c;输入数据&#xff08;如句…

2025跨年倒计时

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2025年跨年倒计时</title><style>/* 页…

C#-使用StbSharp库读写图片

一.StbSharp StbSharp是基于C/Stb图形处理库封装的C#接口,支持多种格式PNG/JPG等图片的处理. GitHub链接: GitHub - StbSharp/StbTrueTypeSharp: C# port of stb_truetype.hhttps://github.com/StbSharp/StbTrueTypeSharp二.使用StbSharp创建高度图 创建一张500*500的高度图PN…

MF248:复制工作表形状到Word并调整多形状位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

【从零开始入门unity游戏开发之——C#篇43】C#补充知识——值类型和引用类型汇总补充、变量的生命周期与性能优化、值类型和引用类型组合使用

文章目录 一、值类型和引用类型汇总补充1、值类型和引用类型汇总2、值类型和引用类型的区别3、简单的判断值类型和引用类型 二、变量的生命周期与性能优化1、**栈和堆的区别**2、**变量生命周期**3、**垃圾回收&#xff08;GC&#xff09;机制**4、**代码示例与优化**4.1. 临时…

Dockerfile运行指令

1.RUN 在build构建时执行命令。 举例&#xff1a;安装vim Shell命令格式 RUN yum install -y vim Exec命令格式 RUN ["yum","install","-y","vim"] 2.CMD 用于设置容器启动时默认执行的命令或参数。 如果Dockerfile中有多个CMD&a…

无穿戴动作捕捉系统技术解密及多元化运用

在当今科技飞速发展的时代&#xff0c;动作捕捉技术不断革新&#xff0c;无穿戴动作捕捉系统崭露头角。与传统粘贴标记点的动作捕捉技术相比&#xff0c;无标记点动作捕捉技术具有显著优势。它能够在确保高精度捕捉的前提下&#xff0c;以非接触的方式极大地提升被捕捉对象的表…