提示:建议每次对数据库进行修改时都做下备份

注意:以下Mysql开启的是row格式的binlog日志,确定到误操作具体时间可能有些麻烦,默认的格式就能很快找出来。这里开启row的原因是还有一种更快的方法实现误操作数据回滚(binlog2sql工具或用python脚本生成反向sql语句),以下介绍的为最常规方法。

1.发现生产主页打不开,并确定是数据库误操作更新了某个表格引起,大概误操作时间为2018-04-03 15:49——2018-04-03 15:55(每次数据库操作前都通过脚本进行了备份,记录的备份时间后面一段大概就是误操作时间,此处备份时间在15:48)

2.vim /etc/my.cnf 注释binlog日志,防止数据恢复时再次被记录

#binlog_do_db=xxx
#max_binlog_size = 100M
#binlog_format = row
#binlog_row_image = full

3.先恢复误操作之前的备份xx.sql

mysql -uroot -p  -S /var/lib/mysql/mysql.sock <xxx.sql

4.导出当前binlog日志以便确定具体误操作时间

mysqlbinlog --start-datetime='2018-04-03 15:49:00' --stop-datetime='2018-04-03 15:55:00' mysql-bin. >test.txt

5.vim test.txt 确认具体误操作位置时间(红色部分)

# at
# :: server id end_log_pos CRC32 0x1b094e96 Table_map: `xxx`.`xxx` mapped to number
# at
# :: server id end_log_pos CRC32 0xa5ba6d25 Update_rows: table id flags: STMT_END_F BINLOG '
NTLDWhMBAAAAMgAAAPIAAAAAAEYAAAAAAAEABHNwMnAABHRlc3QAAgMPAi0AA5ZOCRs=
NTLDWh8BAAAAOQAAACsBAAAAAEYAAAAAAAEAAgAC///8AwAAAAVkYW5uefwDAAAABGxvbmclbbql
'/*!*/;
# at
# :: server id end_log_pos CRC32 0xad17ed0c Xid =
COMMIT/*!*/;
# at
# :: server id end_log_pos CRC32 0x6a703d5a Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;

6.恢复binlog增量记录部分(15:50:13为误操作时间,从15:51:05开始为后续正常操作),增量恢复分两个部分,15:48:00——15:50:05(日志上看误操作之前最新数据时间)和15:51:00——现在

mysqlbinlog --start-datetime='2018-04-03 15:48:00'  --stop-datetime='2018-04-03 15:51:05'  mysql-bin.000xxx |mysql -uroot -p

mysqlbinlog --start-datetime='2018-04-03 15:51:00' mysql-bin.000xxx |mysql -uroot -p

7.确认数据恢复情况,重新开启binlog日志再重启Mysql

记一次生产mysql数据误操作恢复过程的更多相关文章

  1. delete、update忘加where条件误操作恢复过程演示

    update.delete没有带where条件,误操作,如何恢复呢? 我现在有一张学生表,我要把小于60更新成不及格. mysql> select * from student; +----+- ...

  2. 背景:表A数据误操作,被delete了,恢复。

    SELECT MAX(Scn) FROM Sys.Smon_Scn_Time WHERE Time_Dp < TO_DATE('2015-09-18', 'YYYY/MM/DD') select ...

  3. MySQL 数据表操作

    MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create  table  table_name (c ...

  4. mysql 数据表操作 目录

    mysql 数据表操作 存储引擎介绍 mysql 使用存储引擎 mysql 数据表的增删改查 mysql 数据类型 mysql 约束条件

  5. 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表;Oracle文件损坏处理……

    热门资讯 1.Stackoverflow 2020年度报告出炉!开发者最喜爱的数据库是什么?[摘要]2020年2月,近6.5万名开发者参与了 Stackoverflow 的 2020 年度调查,这份报 ...

  6. mysql数据表操作&库操作

    首先登陆mysql:mysql -uroot -proot -P3306 -h127.0.0.1 查看所有的库:show databases; 进入一个库:use database; 显示所在的库:s ...

  7. mongo 误操作恢复数据

    场景:我往同一个集合里面插入 三条数据  aa:aa  bb:bb  cc:cc .后来我后悔了,不想插入 bb:bb,通过oplog重放过滤好 bb:bb这条数据. 原理: 1.通过 oplog.r ...

  8. 数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!

    前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...

  9. Oracle数据库常见的误操作恢复方法(上)

    实验环境:Linux6.4 + Oracle 11g 面向读者:Oracle开发维护人员 概要: 1.误操作drop了emp表 2.误操作delete了emp表 3.误操作delete了emp表的部分 ...

随机推荐

  1. TensorFlow 学习资料

    感谢几位大神的笔记: https://blog.csdn.net/column/details/13300.html?&page=3 https://blog.csdn.net/u014595 ...

  2. 转://WITH AS and materialize hints

    WITH AS: 就是将一个子查询部分独立出来,有时候是为了提高SQL语句的可读性,有时候是为了提高SQL语句性能. 如果一个SQL语句中,某个表会被访问多次,而且每次访问的限制条件一样的话,就可以使 ...

  3. oracle等待事件-direct path read/write

    转://http://blog.chinaunix.net/uid-23177306-id-2531235.html 一.direct path read1.与直接读取相关联的等待事件.当ORACLE ...

  4. 七、Oracle 数据库设计

    1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体. 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证 ...

  5. ActiveMQ的作用总结(应用场景及优势)

    业务场景说明: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速度. 在不使用消息队列的情况下,用户的请求数据直接写入数据 ...

  6. wordpress数据表分析

    wordpress一共是有12个表的:|wp_commentmeta || wp_comments || wp_links || wp_options || wp_postmeta || wp_pos ...

  7. Json的生成和解析

    json是常见的数据格式,生成和解析是常用的操作.Android中,默认提供orgJson供我们使用,除此之外,google也提供了Gson库方便我们开发. Json样例类 package com.f ...

  8. 深入理解跨域SSO(单点登录)原理与技术

    一:SSO体系结构 SSO ​ SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他 ...

  9. Lambda表达式介绍(转)

    刚开始学lambda,lambda与linq的联合使用. Lambda表达式实际上是一个匿名函数.它包含表达式和语句,常用于创建委托或表达式目录树类型.所有Lambda表达式都是用Lambda运算符- ...

  10. matplot绘图基本使用

    先看一个最简单的例子 import matplotlib.pyplot as plt plt.figure() plt.subplot(211) plt.plot([1,2,3], color=''r ...