• Mysql 45讲学习笔记(三十一)误删数据


    一.产生背景 

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

    二. MySQL误删数据分类:

    • 使用delete语句误删除数据行
    • drop table或truncate table误删数据表
    • drop database删除数据库
    • rm命令误删整个MySQL实例

    三.误删行

        Flashback工具闪回进行数据恢复

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

    注意事项:

            不要在主库执行这些操作

    解决方法:

         找一个从库作为临时库,在临时库上执行这些操作,确认临时库的数据,再恢复主库

        防止出现对主库数据的二次伤害

    预防措施:

    •  将sql_safe_updates 参数设置为 on,如果忘记delete或者update中写where条件,或者没有包含索引字段,这条语句会执行报错
    • 代码上线前,必须进行SQL审计

    四.误删库 /表

    • 要想恢复数据,就需要使用全量备份,加增量日志的方式 
    • 这个方案要求线上有定期的全量备份,并且能够实时备份binlog

    假如有人中午12点误删一个库,恢复数据的流程如下:

    • 取最近一次全量备份 ,假设这个库是一天一备,上次备份是当天0点
    • 用备份恢复出一个临时库;
    • 从日志备份里面,取出凌晨0点之后的日志
    • 把这些日志,除了误删除数据的语句外,全部应用到临时库

     如何加速数据恢复?

          如果这个临时库有多个数据库,可以使用mysqlbinlog命令时,加上一个-database参数,用来指定误删表所在的库

        避免恢复数据时应用其他库日志的情况。

       在应用日志的时候,需要跳过12点误操作的那个语句的binlog

    mysqlbinlog方法恢复数据还是不够快(恢复时间不可控

    • 如何误删表,最好就是只恢复这张表,重放这张表的操作,但是mysqlbinlog工具不能指定解析一个表的日志。
    • 用mysqlbinlog解析出日志应用,应用日志的过程只能是单线程

    延迟复制备库

    • 延迟复制的备库是一种特殊的备库,通过change master to master_delay=N命令,可以指定这个备库持续保持跟主库有N秒延迟

      比如讲N设置为3600,如果主库上有数据被误删了,在1个小时候内发现这个误操作命令,这个命令在延迟复制的备库执行,这时候这个备库上执行stop salve命令

    五.预防误删库/表的方法

    1.  账号分离---- 只给开发同学DML权限 
    2. 删除表,先给表改名,观察一段时间业务影响再删除,给表名加固定后缀_to_be_deleted),只删除固定后缀的表

  • 相关阅读:
    XMLHttpRequest Level2的新功能&&使用jquery简化文件上传
    操作系统原理随堂笔记(10)ᝰ多处理机操作系统
    问题记录:两台Ubuntu之间传输文件(SCP)
    我摊牌了!真正的灰度队列实现方案!全网你都搜不到!
    oracle查询数据库参数sql语句
    操作系统—— I/O 相关知识
    1147 Heaps
    WPF之Button组件
    2023计算机毕业设计SSM最新选题之java企业物资管理系统h3109
    弘玑Cyclone与风变科技达成战略合作:优势互补聚焦数字化人才培养
  • 原文地址:https://blog.csdn.net/weixin_42369687/article/details/125754703