《MySQL——恢复数据-误删行、表、库》

目录

    • 误删行
    • 事前预防误删行数据方法
    • 误删表/库
    • 延迟复制备库
    • 事前预防误删库/表方法

传统的架构不能预防误删数据,因为主库的一个drop table命令,会通过binlog传给所有从库和级联从库,进而导致整个集群的实例都会执行这个命令。

MySQL相关的误删除数据分类:

1、使用delete语句误删数据行

2、使用drop table 或者 truncate table 语句误删数据表

3、使用drop database语句误删数据库

4、使用rm命令误删整个MySQL实例

误删行

若使用delete语句误删数据行,可以用Flashback工具通过闪回把数据恢复。

原理:修改binlog内容,拿回原库重放。

前提:binlog_fromat = row 和binlog_row_image = FULL

具体措施:

1、对于insert语句,对应的binlog event 类型为WrIte_rows event,将其改为Delete_rows event

2、同理,对于delete,将Delete_rows event 改为Write_rows event

3、对于Update_rows,binlog记录了数据行修改前和修改后的值,对调两行位置即可

如果误操作是多个,如:

(A)delete ...
(B)insert ...
(C)update ...

若要恢复这三个事务之前状态,用Flashback工具解析binlog后,写回主库:

(reverse C)update ...
(reverse B)delete ...
(reverse A)insert ...

恢复数据的比较安全的做法是恢复出一个备库,或者找一个从库作为临时库,在这个临时库上执行这个操作,然后再将确认过的临时库的数据,恢复回主库。

这是由于发现数据问题时间比较晚,导致会有在误操作的基础上的逻辑,如果单独恢复这个几行数据,会对数据造成二次破坏。

事前预防误删行数据方法

1、把sql_safe_updates参数设置为on。这样如果忘记在delete或者update语句中写where条件,或者where条件里没有包含索引字段,语句执行报错

2、代码上线前,必须经过SQL审计

误删表/库

需要删除一个表时,delete全表很慢,需要生成回滚日志、写redo、写binlog,所以常常使用truncate table 或者 drop table。

直接drop表和delete每行的最大区别就是,binlog对delete有详细的删除行内容,可是drop表后binlog就只有一个drop语句,恢复不了数据。

使用truncate/drop误删除数据时的恢复方法 :使用全量备份,加增量日志。要求对线上有定期的全量备份,并且实时备份binlog。

如果中午误删了库,恢复数据流程如下:

1、取最近一次全量备份,假设这个库是一天一备,上次备份是当天0点

2、用备份恢复出一个临时库

3、从日志被分离,取出0点之后的日志

4、把这些日志,除了误删除的数据的语句外,全部应用到临时库
在这里插入图片描述

加速恢复数据

1、如果临时库有多个数据库,可以指定误删表所在的库,这样就避免了恢复数据时还要应用其他库日志。

2、应用日志时,跳过误操作的语句

不过这样使用mysqlbinlog方法恢复数据不够快。

mysqlbinlog恢复数据不够快的原因:不能指定特定数据表、单线程操作

另外的加速方法

在用备份恢复出临时实例之后,将这个临时实例设置成线上备库的从库。

具体流程:

1、在start slave 之前,执行change replication filter replicate_do_table = (tbl_name),让临时库只同步误操作的表

2、可以使用并行复制技术,加速数据恢复
在这里插入图片描述

延迟复制备库

如果一个库备份很大,或者误操作的时间举例上一个全备份的时间较长,可以搭建延迟复制的备库缩短恢复数据恢复需要的时间。

一般的主备复制结构存在问题:如果主库有个表被误删了,这个命令很快也会被发给所有从库,进而导致所有从库的数据表也都一起被误删。

可以主动加大同步延迟,通过CHANGE MASTER TO MASTER_DELAY = N 命令,指定这个备库始终与主库有N秒延迟。如果把N设置为3600,代表如果主库上有数据被误删了,并且在1h之内发现了这个误操作,该命令此时没有在延迟复制的备库执行,所以可以到备库上stop slave,然后跳过误操作命令,恢复数据。

事前预防误删库/表方法

1、账号分离。

只给业务开发人员DML权限,不给truncate/drop权限。

DBA团队成员,也只使用只读账号,必要时使用有更新权限的账号

2、指定操作规范,避免写错要删除的表名。

在删除数据表之前,对表进行改名操作,并观察一段时间,若对业务无影响,则删除

改表名时要给表名加固定的后缀如_to_be_deleted,然后删除表的动作必须通过管理系统执行。并且管理系统只能删除固定后缀的表。

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

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

相关文章

python图例位置_Python | 图例位置

python图例位置Legends are one of the key components of data visualization and plotting. Matplotlib can automatically define a position for a legend in addition to this, it allows us to locate it in our required positions. Following is the list of locations…

工作总结:文件对话框的分类(C++)

原文地址:http://www.jizhuomi.com/software/173.html 文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框。例如,很多编辑软件像记事本等都有“打开”选项,选择“打开”后会弹出一个…

《MySQL——Innodb改进LRU算法》

Innodb改进LRU.算法,实质上将内存链表分成两段。 靠近头部的young和靠近末尾的old,取5/12段为分界。 新数据在一定时间内只能在old段的头部,当在old段保持了一定的时间后被再次访问才能升级到young。 实质上是分了两段lru,这样做的…

jQuery: 整理4---创建元素和添加元素

1.创建元素&#xff1a;$("内容") const p "<p>这是一个p标签</p>" console.log(p)console.log($(p)) 2. 添加元素 2.1 前追加子元素 1. 指定元素.prepend(内容) -> 在指定元素的内部的最前面追加内容&#xff0c;内容可以是字符串、…

Design a high performance cache for multi-threaded environment

如何设计一个支持高并发的高性能缓存库 不 考虑并发情况下的缓存的设计大家应该都比较清楚&#xff0c;基本上就是用map/hashmap存储键值&#xff0c;然后用双向链表记录一个LRU来用于缓存的清理。这篇文章 应该是讲得很清楚http://timday.bitbucket.org/lru.html。但是考虑到高…

LinkChecker 8.1 发布,网页链接检查

LinkChecker 8.1 可对检查时间和最大的 URL 数量进行配置&#xff1b;当使用 HTTP 请求时发送 do-not-track 头&#xff1b;生成 XML 的 sitemap 用于搜索引擎优化&#xff1b;检测 URL 长度和重复的页面内容&#xff1b;修复了很多检查的 bug。 LinkChecker 是一个网页链接检查…

c语言语言教程0基础_C语言基础

c语言语言教程0基础Hey, Folks here I am back with my second article on C language. Hope you are through with my previous article C language - History, Popularity reasons, Characteristics, Basic structure etc. In this one, I will cover some fundamental conce…

《MySQL——临时表》

内存表与临时表区别 临时表&#xff0c;一般是人手动创建。 内存表&#xff0c;是mysql自动创建和销毁的。 内存表&#xff0c;指的是使用Memory引擎的表&#xff0c;建表语法&#xff1a;create table ... engine memeory 表的数据存在内存里&#xff0c;系统重启后会被清…

drei

模拟9 T3 &#xff08;COGS上也有&#xff0c;链接http://218.28.19.228/cogs/problem/problem.php?pid1428&#xff09; 题目描述 输入a&#xff0c;p&#xff0c;求最小正整数x&#xff0c;使得a^x mod p 1。 分析 神奇的欧拉定理&#xff08;对于gcd&#xff08;a&#xf…

css中变量_CSS中的变量

css中变量CSS | 变数 (CSS | Variables) CSS variables allow you to create reusable values that can be used throughout a CSS document. CSS变量允许您创建可在CSS文档中使用的可重用值。 In CSS variable, function var() allows CSS variables to be accessed. 在CSS变…

SuperSpider——打造功能强大的爬虫利器

SuperSpider——打造功能强大的爬虫利器 博文作者&#xff1a;加菲 发布日期&#xff1a;2013-12-11 阅读次数&#xff1a;4506 博文内容&#xff1a; 1.爬虫的介绍 图1-1 爬虫&#xff08;spider) 网络爬虫(web spider)是一个自动的通过网络抓取互联网上的网页的程序&#xf…

《MySQL——关于grant赋权以及flush privileges》

先上总结图&#xff1a; 对于赋予权限或者收回权限还是创建用户&#xff0c;都会涉及两个操作&#xff1a; 1、磁盘&#xff0c;mysql.user表&#xff0c;用户行所有表示权限的字段的值的修改 2、内存&#xff0c;acl_users找到用户对应的对象&#xff0c;将access值修改 g…

《MySQL 8.0.22执行器源码分析(1)——execute iterator一些记录》

目录一条语句的函数调用栈顺序8.0使用迭代器模式改进executorint *handler*::ha_rnd_next(*uchar* **buf*)int *TableScanIterator*::Read()int FilterIterator :: Read&#xff08;&#xff09;int HashJoinIterator::Read()int NestedLoopIterator :: Read&#xff08;&#…

strcspn函数

函数原型&#xff1a;extern int strcspn(char *str1,char *str2) 参数说明&#xff1a;str1为参照字符串&#xff0c;即str2中每个字符分别与str1中的每个字符比较。 所在库名&#xff1a;#include <string.h> 函数功能&#xff1a;以str1为参照&#xff0c…

MongoDB源码概述——内存管理和存储引擎

数据存储&#xff1a; 之前在介绍Journal的时候有说到为什么MongoDB会先把数据放入内存&#xff0c;而不是直接持久化到数据库存储文件&#xff0c;这与MongoDB对数据库记录文件的存储管理操作有关。MongoDB采用操作系统底层提供的内存文件映射&#xff08;MMap&#xff09;的方…

SharePoint 2010 Form Authentication (SQL) based on existing database

博客地址 http://blog.csdn.net/foxdaveSharePoint 2010 表单认证&#xff0c;基于现有数据库的用户信息表本文主要描述本人配置过程中涉及到的步骤&#xff0c;仅作为参考&#xff0c;不要仅限于此步骤。另外本文通俗易懂&#xff0c;适合大众口味儿。I. 开启并配置基于声明的…

小狐狸ChatGPT系统 不同老版本升级至新版数据库结构同步教程

最新版2.6.7下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 小狐狸GPT付费体验系统如何升级&#xff0c;该系统更新比较频繁&#xff0c;也造成了特别有用户数据情况下升级时麻烦&#xff0c;特别针对会员关心的问题出一篇操作教程&#xff0c;本次教程…

HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)

I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33469 Accepted Submission(s): 13168 Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问&#xff0c;从某某到某某当中&#xff0c;…

C# 把数字转换成链表

例如&#xff1a;123456转换成 1 -> 2 -> 3-> 4-> 5-> 6 View Code static LinkedList<int> CovertIntToLinkedList(int num){Stack<int> stack new Stack<int>();LinkedList<int> result new LinkedList<int>();while (num!0…

《MySQL 8.0.22执行器源码分析(4.1)Item_sum类以及聚合》

Item_sum类用于SQL聚合函数的特殊表达式基类。 这些表达式是在聚合函数&#xff08;sum、max&#xff09;等帮助下形成的。item_sum类也是window函数的基类。 聚合函数&#xff08;Aggregate Function&#xff09;实现的大部分代码在item_sum.h和item_sum.cc 聚合函数限制 不…