• 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语句删除(也可通过时间和位置点),再恢复到数据库
  • 相关阅读:
    微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed
    腾讯云 docker 镜像 dotnet/core sdk aspnet
    ImageMagick PDF到JPG有时会导致黑色背景
    VS2019 发布单文件
    MySQL 更新语句执行过程 WAL redolog binlog
    MySQL 查询语句执行过程
    让MySQL为我们记录执行流程
    SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束
    初用MySQL Mysql示例库 Navicat15
    OldTrafford after 102 days
  • 原文地址:https://www.cnblogs.com/EikiXu/p/9837150.html
Copyright © 2020-2023  润新知