zoukankan      html  css  js  c++  java
  • 《Mysql

    一:误删数据 (如何恢复和避免误删除)

      - 使用 delete 语句误删数据行;

      - 使用 drop table 或者 truncate table 语句误删数据表;

      - 使用 drop database 语句误删数据库;

      - 使用 rm 命令误删整个 MySQL 实例。 

    二:误删行

      - 方法

        - 如果是使用 delete 语句误删了数据行,可以用 Flashback 工具通过闪回把数据恢复回来。

      - 原理

        - Flashback 恢复数据的原理,是修改 binlog 的内容,拿回原库重放。

        - 而能够使用这个方案的前提是,需要确保 binlog_format=rowbinlog_row_image=FULL。 

      - 恢复流程

        - 对于 insert 语句,对应的 binlog event 类型是 Write_rows event,把它改成 Delete_rows event 即可;

        - 同理,对于 delete 语句,也是将 Delete_rows event 改为 Write_rows event;

        - 而如果是 Update_rows 的话,binlog 里面记录了数据行修改前和修改后的值,对调这两行的位置即可。

      - 注意

        - 建议在备库执行这些操作。因为主库的数据同时的也在产生数据。

        - 我们不止要说误删数据的事后处理办法,更重要是要做到事前预防

          - 把 sql_safe_updates 参数设置为 on。

          - 这样一来,如果我们忘记在 delete 或者 update 语句中写 where 条件,或者 where 条件里面没有包含索引字段的话,这条语句的执行就会报错。 

    三:误删库、表

      - 通过 truncate /drop table 和 drop database 命令删除的数据,就没办法通过 binglog 来恢复了

        - 因为,即使我们配置了 binlog_format=row,执行这三个命令时,记录的 binlog 还是 statement 格式。

        - binlog 里面就只有一个 truncate/drop 语句,这些信息是恢复不出数据的。

      - 这种情况下,要想恢复数据,就需要使用全量备份,加增量日志的方式了。

        -  这个方案要求线上有定期的全量备份,并且实时备份 binlog。

      - 预防误删库 / 表的方法

        - 第一条建议是,账号分离。这样做的目的是,避免写错命令。

          - 比如:我们只给业务开发同学 DML 权限,而不给 truncate/drop 权限。而如果业务开发人员有 DDL 需求的话,也可以通过开发管理系统得到支持。

          - 即使是 DBA 团队成员,日常也都规定只使用只读账号,必要的时候才使用有更新权限的账号。 

        - 第二条建议是,制定操作规范。这样做的目的,是避免写错要删除的表名。

          - 比如:在删除数据表之前,必须先对表做改名操作。然后,观察一段时间,确保对业务无影响以后再删除这张表。

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

    四: rm 删除数据

      - 只要不是恶意地把整个集群删除,而只是删掉了其中某一个节点的数据的话.

      - HA 系统就会开始工作,选出一个新的主库,从而保证整个集群的正常工作。

      - 这时,你要做的就是在这个节点上把数据恢复回来,再接入整个集群。

    五:小结

      - 预防远比处理的意义来得大。

      - 及时备份和检查备份很重要。 

  • 相关阅读:
    [转载]ASP.NET Core 之 Identity 入门(一)
    ABP框架使用(版本3.3.1)
    [转载]ABP 结合 MongoDB 集成依赖注入
    [转载]初识ABP vNext(4):vue用户登录&菜单权限
    【转载】ASP.NET Core中如何显示[PII is hidden]的隐藏信息
    [转载]超简单本地mock假数据测试,模拟后台数据返回必杀技
    Git 分支简介、Git 和 GitHub 日常操作
    重载++运算符为成员函数(日期类函数设计也可以看一下 )
    重载操作符(cin cout 都在这篇文章里出现了 注意区别)
    重载操作符(日期类)
  • 原文地址:https://www.cnblogs.com/25-lH/p/11079095.html
Copyright © 2011-2022 走看看