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

一、场景概述

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

二、主要思想

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

三、过程示意图

四、操作过程

1. 模拟数据

 
 
 
 
 

MySQL

 
1
2
3
4
5
6
7
8
9
10
11
CREATETABLE`student`(
  `id`int(11)NOT NULLAUTO_INCREMENT,
  `name`char(20)NOT NULL,
  `age`tinyint(2)NOT NULLDEFAULT'0',
  PRIMARY KEY(`id`),
  KEY`index_name`(`name`)
)ENGINE=InnoDBAUTO_INCREMENT=8DEFAULTCHARSET=utf8
 
mysql>insertstudentvalues(1,'zhangsan',20);
mysql>insertstudentvalues(2,'lisi',21);
mysql>insertstudentvalues(3,'wangwu',22);

2. 全备命令

 
 
 
 
 
 

MySQL

 
1
2
3
4
5
6
7
8
# mysqldump -uroot -p -B -F -R -x --master-data=2 test|gzip >/server/backup/test_$(date +%F).sql.gz
 
参数说明:
-B指定数据库
-F刷新日志
-R备份存储过程等
-x锁表
--master-data在备份语句里添加CHANGEMASTER语句以及binlog文件及位置点信息

3. 继续插入数据

 
 
 
 
 

MySQL

 
1
2
3
4
5
6
mysql>insertstudentvalues(6,'xiaoming',20);
 
mysql>insertstudentvalues(6,'xiaohong',20);
 
此时误操作,删除了test数据库
mysql>dropdatabasetest;

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

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

 
 
 
 
 
 

MySQL

 
1
2
3
4
5
6
# cd /server/backup/
# ls
test_2016-08-02.sql.gz
# gzip -d test_2016-08-02.sql.gz
# grep CHANGE test_2016-08-02.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;

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

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

 
 
 
 
 

MySQL

 
1
2
3
# cp /data/3306/mysql-bin.000003 /server/backup/
# mysqlbinlog -d test mysql-bin.000003 >003bin.sql
# 用vim编辑文件,剔除drop语句

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

6. 恢复数据

 
 
 
 
 
 

MySQL

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# mysql -uroot -p <test_2016-08-02.sql
# mysql -uroot -p -e "select * from test.student;"
+----+----------+-----+
|id|name     |age|
+----+----------+-----+
|  1|zhangsan|  20|
|  2|lisi     |  21|
|  3|wangwu   |  22|
+----+----------+-----+
//此时恢复了全备时刻的数据
//然后使用003bin.sql文件恢复全备时刻到删除数据库之间,新增的数据
# mysql -uroot -p test<003bin.sql <span style="color: #3366ff;" data-mce-style="color: #3366ff;"><-需要指定恢复的数据库
</span># mysql -uroot -p -e "select * from test.student;"
+----+----------+-----+
|id|name     |age|
+----+----------+-----+
|  1|zhangsan|  20|
|  2|lisi     |  20|
|  3|wangwu   |  20|
|  4|xiaoming|  20|
|  5|xiaohong|  20|
+----+----------+-----+
完成

五、小结

  • 适合人为SQL语句造成的误操作或者没有主从复制等的热备情况宕机时的修复
  • 恢复条件要全备和增量的所有数据
  • 恢复时建议对外停止更新,即禁止更新数据库
  • 先恢复全量,然后把全备时刻点以后的增量日志,按顺序恢复成SQL文件,然后把文件中有问题的SQL语句删除(也可通过时间和位置点),再恢复到数据库

MySQL 之数据库增量数据恢复案例的更多相关文章

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

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

  2. mysql数据安全一之数据恢复案例

    mysql数据安全一之数据恢复案例 --chenjianwen 应用场景:适宜开启binlog 日志功能,定时备份并使用--master-data参数备份,在某个时间点丢失数据,用于数据恢复 开篇总结 ...

  3. MySQL Innodb数据库误删ibdata1后MySQL数据库的恢复案例

      上周,以前公司的同事朋友找我帮忙,看看能否帮忙恢复一个MySQL 数据库,具体情况为:数据库版本为MySQL 5.6(具体版本不清楚),也不清楚具体的数据库引擎; 没有数据库备份,只剩下数据库下面 ...

  4. Navicat for MySQL定时备份数据库及数据恢复

    在做数据库修改或删除操作中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库.本篇文章主要讲述Navicat for MySQL定时备份数据库和数据恢复等功能,同时可以定时播放电 ...

  5. MYSQL数据库增量备份

    MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可.接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法. #fu ...

  6. 170301、使用Spring AOP实现MySQL数据库读写分离案例分析

    使用Spring AOP实现MySQL数据库读写分离案例分析 原创 2016-12-29 徐刘根 Java后端技术 一.前言 分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案 ...

  7. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)     文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 inno ...

  8. MySQL中truncate误操作后的数据恢复案例

    MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...

  9. canal 基于Mysql数据库增量日志解析

    canal 基于Mysql数据库增量日志解析  1.前言  最近太多事情 工作的事情,以及终身大事等等 耽误更新,由于最近做项目需要同步监听 未来电视 mysql的变更了解到公司会用canal做增量监 ...

随机推荐

  1. linux 文件管理操作入门

    mkdir -p /root/kali/bp/shell  一路创建文件夹直到生成文件夹shell,中间没有kali文件夹的话也会自动创建生成 tar解压缩 范例一:将整个 /etc 目录下的文件全部 ...

  2. Android USB gadget configfs学习笔记总结

    1.一个config_item 是通过显式用户空间mkdir操作创建的,通过rmdir销毁.属性(文件)在mkdir之后出现,可以通过read和write读取或修改属性文件.与sysfs一样,read ...

  3. 诡异的磁盘空间100%报警分析得出df -h与du -sh的根本性差别

    前言:早晨磁盘报警刚清空完tomcat和nginx日志,使用的命令是类似echo "" > show_web-error.log或者> show_web-debug.l ...

  4. mysql-8.0.12 安装+配置, Navicat Premium 12 安装+激活

    1.解压到安装目录,如:D:\mysql-8.0.12-winx64 2.将以下配置文件粘贴到安装目录,并保存为my.ini,注意:使用ansi 而非utf-8编码格式保存 [mysql] # 设置m ...

  5. 微软Azure通知中心 (Azure Notification Hubs)

    Azure Notification Hubs 提供简单的方法从后台(azure或者on-promise)去发送通知在不同的平台上面(iOS, Android, Windows, Kindle, Ba ...

  6. ML(5)——神经网络2(BP反向传播)

    上一章的神经网络实际上是前馈神经网络(feedforward neural network),也叫多层感知机(multilayer perceptron,MLP).具体来说,每层神经元与下一层神经元全 ...

  7. Exception analysis

    Finding: Thread 119:1f7c Exception Code 0xE06D7363 From https://support.microsoft.com/en-us/help/185 ...

  8. Tornado 模板(StaticFileHandler/static_path/template_path等) 笔记

    使用StaticFileHandler进行首页默认访问页面,最好将StaticFileHandler放在最后面,这样不会覆盖要匹配自定义的路径 import tornado.web import to ...

  9. MapReduce案例:统计共同好友+订单表多表合并+求每个订单中最贵的商品

    案例三: 统计共同好友 任务需求: 如下的文本, A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O,MG:A,C,D,E ...

  10. HanLP极致简繁转换详细讲解

    HanLP极致简繁转换详细讲解 作者: hankcs(大快高级研究员 hanlp项目负责人) 谈起简繁转换,许多人以为是小意思,按字转换就行了.事实上,汉语历史悠久,地域复杂,发展至今在字符级别存在“ ...