首页 > 数据库 >Mysql 系列 | 误删数据

Mysql 系列 | 误删数据

时间:2022-10-06 19:33:47浏览次数:50  
标签:语句 binlog rows 系列 备份 误删 Mysql event

误删数据是数据库操作过程中不可避免会遇到的问题。

误删分为几种,误删行、误删库/表、误删整个实例。

遇到问题就要分析原因,并对症下药解决问题。

误删行

使用 delete 语句误删数据行。

此时可以用 Flashback 工具通过闪回恢复数据。

  • 原理是修改 binlog 内容,拿回原库重放,前提是确保 binlog_format=row binlog_row_image=FULL

  • 对于 insert 语句,binlog event 类型 Write_rows event => Delete_rows event

  • 对于 delete 语句,Delete_rows event => Delete_rows event

  • 对于 update 语句,将 binlog 中记录的修改前后的值对调即可

  • 涉及多个事务时,将事务顺序调过来再执行

误删库/表

delete 删除全表数据,需要生成回滚日志、redolog、binlog会很慢,应该优先考虑 truncate 或 drop。

此时 binlog 中只有一个 truncate/drop 语句,无法恢复出删除前的数据。

这种情况下,要使用全量备份和增量日志。要求线上有定期的全量备份,并且实时备份 binlog

  • 取最近一次全量备份,恢复出一个临时库

  • 从日志备份中取出全量备份后的日志,除了误删数据语句外,全部应用到临时库

    • 临时库有多个数据库时,mysqlbinlog 命令配合 -database 参数,指定误操作所在库

    • 配合 -stop-position 参数设置执行的开始和结束位置

事前预防

误删数据要及时处理,更重要的是做到事前预防

  • 设置 sql_safe_updates=on 一旦忘记在 delete 或者 update 语句中写 where 条件,或者条件中没有包含索引字段,这条语句执行就会报错

  • 代码上线前,必须进行 SQL 审计

  • 定期检查备份的有效性

  • 把数据恢复功能做成自动化工具,并且经常拿出来演练

  • 考虑搭建延迟复制的备库

  • 账号分离,严格给不同人员分配不同权限,尽量减少删除操作,必要时才使用有更新权限的账号

  • 指定操作规范,避免写错要删除的表名。比如删除前必须先修改表名为规定的后缀,确保对业务无影响后再删除固定后缀的表


标签:语句,binlog,rows,系列,备份,误删,Mysql,event
From: https://www.cnblogs.com/rendd/p/16758261.html

相关文章

  • Java 面试题 06 - MySQL
    事务事务是逻辑上的一组操作,要么都执行,要么都不执行。事务的四个特性(ACID):原子性:事务不允许分割,要么全部完成,要么完全不执行。一致性:逻辑上的正确性,即这组操作的结果是......
  • MySQL存储引擎详解(一)-InnoDB架构
    前言目前MySQL8.x版本数据库已经支持了很多存储引擎了,但是一般我们常用的就几种,容易形成思维固化不会轻易采取其他存储引擎,从而错失很多优化存储的功能。因此对现支持的九种......
  • Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识
    简介top命令是我们经常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的借口帮助我们去查看系统执行时的进程、线程和系统参数的信息。top命令输出内容详细剖析首......
  • 用通配符批量同步MySQL部分数据表
    作者:田逸(formyz)接到一个任务,需要对一个数据量比较大的MySQL数据库的部分数据表做主从复制,其中有51个表的表明前缀相同(如下图所示),还有几个没有规律的表也需要一起同步。要实......
  • 带你5分钟读懂MySQL字符集
    前言在日常开发中经常遇到“乱码”问题,很有可能就是因为对字符集的理解不到位、设置错误造成的,本文主要总结一下MySQL字符集的相关知识,以及如何设置字符集,希望对大家有所帮......
  • 【MySQL系列】- 浅析undo log
    undolog是什么undolog可以称为撤销日志、undo日志,它记录着事务回滚前的数据。官方定义:Astorageareathatholdscopiesofdatamodifiedbyactivetransactions.翻......
  • MySQL存储引擎详解(一)-InnoDB架构
    前言目前MySQL8.x版本数据库已经支持了很多存储引擎了,但是一般我们常用的就几种,容易形成思维固化不会轻易采取其他存储引擎,从而错失很多优化存储的功能。因此对现支持的九种......
  • MySQL 基础语法
    SELECT基础用法SELECTname,ageFROMuserDISTINCT——对检索结果去重应用于所有列而不仅是它后面的一列,所有列的值都不同才会被认为不同。SELECTDISTI......
  • MySQL索引底层:B+树详解
    前言当我们发现SQL执行很慢的时候,自然而然想到的就是加索引。对于范围查询,索引的底层结构就是B+树。今天我们一起来学习一下B+树哈~公众号:「捡田螺的小男孩」树简介、树种类......
  • MySQL面试题(二)
    11、列对比运算符是什么?在SELECT 语句 的列比较中使用=,<>,<=,<,>=,>,<<,>>,<=>,AND,&nbs***bsp;或 LIKE 运算符。12、  BLOB 和 TEXT 有什么区别?BLOB 是一个二进......