zoukankan      html  css  js  c++  java
  • MySQL 之数据库增量数据恢复案例

     MySQL 数据库增量数据恢复案例

    一、场景概述

    1. MySQL数据库每日零点自动全备
    2. 某天上午10点,小明莫名其妙地drop了一个数据库
    3. 我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢复

    二、主要思想

    1. 利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件增量的部分
    2. 用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句
    3. 通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据

    三、过程示意图

    QQ截图20160802163433

    四、操作过程

    1. 模拟数据

    2. 全备命令

    3. 继续插入数据

    此时,全备之后到误操作时刻之间,用户写入的数据在binlog中,需要恢复出来

    4.查看全备之后新增的binlog文件

    这是全备时刻的binlog文件位置,即mysql-bin.000003的107行,因此在该文件之前的binlog文件中的数据都已经包含在这个全备的sql文件中了

    5. 移动binlog文件,并读取sql,剔除其中的drop语句

    在恢复全备数据之前必须将该binlog文件移出,否则恢复过程中,会继续写入语句到binlog,最终导致增量恢复数据部分变得比较混乱

    6. 恢复数据

    五、小结

    • 适合人为SQL语句造成的误操作或者没有主从复制等的热备情况宕机时的修复
    • 恢复条件要全备和增量的所有数据
    • 恢复时建议对外停止更新,即禁止更新数据库
    • 先恢复全量,然后把全备时刻点以后的增量日志,按顺序恢复成SQL文件,然后把文件中有问题的SQL语句删除(也可通过时间和位置点),再恢复到数据库
  • 相关阅读:
    软件设计和开发是手艺活也是艺术活
    学界老师和业界专业人员的紧密合作才能促进软件设计开发教学的进步
    最简单的 GitExtensions 教程(持续更新中)
    最简单的 IntelliJ IDEA 中使用 GitHub 进行版本控制教程(持续更新中)
    工作室成员 GitHub 地址集中贴(按发布时间先后排序)
    使用 Visual Studio Code 运行 C# 及 Java 程序
    推荐一个非常好的 IntelliJ IDEA 教程
    Commit message 和 Change log 编写指南(转自阮一峰的博客)
    关于编码规范的延伸资料(来自于福州大学陈世发同学的博客)
    【扩展阅读】提问的智慧(转自福州大学陈世发同学的评论)
  • 原文地址:https://www.cnblogs.com/EikiXu/p/9837150.html
Copyright © 2011-2022 走看看