传统解法

用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态。然后跳过误操作的SQL,再继续应用binlog。此法费时费力,不值得再推荐。

利用binlog2sql快速闪回

首先,确认你的MySQL server开启了binlog,设置了以下参数:

[mysqld]

server-id=1

log_bin=/var/log/mysql/mysql-bin.log

max_binlog_size=1000M

binlog-format=row

如果没有开启binlog,也没有预先生成回滚SQL,那真的无法快速恢复数据了。对存放重要业务数据的MySQL,强烈建议开启binlog。

随后,安装开源工具binlog2sql。binlog2sql是一款简单易用的binlog解析工具,其中一个功能就是利用binlog进行闪回。

gitclonehttps://github.com/danfengcao/binlog2sql.git

pipinstall-rrequirements.txt

然后,我们就可以生成回滚SQL了。

背景:误删了test库tbl表整张表的数据,需要紧急回滚。

test库tbl表原有数据

mysql>select*fromtbl;

+----+--------+---------------------+

|id|name|addtime|

+----+--------+---------------------+

|1|小赵|2016-12-1000:04:33|

|2|小钱|2016-12-1000:04:48|

|3|小孙|2016-12-1000:04:51|

|4|小李|2016-12-1000:04:56|

+----+--------+---------------------+

4rowsinset(0.00sec)

mysql>deletefromtbl;

QueryOK,4rowsaffected(0.00sec)

tbl表被清空

mysql>select*fromtbl;

Emptyset(0.00sec)

恢复数据步骤:

登录mysql,查看目前的binlog文件

mysql>showmaster logs;

+------------------+-----------+

|Log_name|File_size|

+------------------+-----------+

|mysql-bin.000046|12262268|

|mysql-bin.000047|3583|

+------------------+-----------+

最新的binlog文件是mysql-bin.000047,我们再定位误操作SQL的binlog位置

$pythonbinlog2sql/binlog2sql.py-h127.0.0.1-P3306-uadmin-p'admin'-dtest-ttbl--start-file='mysql-bin.000047'

输出:

DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:33'AND`id`=1AND`name`='小赵'LIMIT1;#start 3346 end 3556

DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:48'AND`id`=2AND`name`='小钱'LIMIT1;#start 3346 end 3556

DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:51'AND`id`=3AND`name`='小孙'LIMIT1;#start 3346 end 3556

DELETEFROM`test`.`tbl`WHERE`addtime`='2016-12-10 00:04:56'AND`id`=4AND`name`='小李'LIMIT1;#start 3346 end 3556

生成回滚sql,并检查回滚sql是否正确

$pythonbinlog2sql/binlog2sql.py-h127.0.0.1-P3306-uadmin-p'admin'-dtest-ttbl--start-file='mysql-bin.000047'--start-pos=3346--end-pos=3556-B

输出:

INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:56',4,'小李');#start 3346 end 3556

INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:51',3,'小孙');#start 3346 end 3556

INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:48',2,'小钱');#start 3346 end 3556

INSERTINTO`test`.`tbl`(`addtime`,`id`,`name`)VALUES('2016-12-10 00:04:33',1,'小赵');#start 3346 end 3556

确认回滚sql正确,执行回滚语句。登录mysql确认,数据回滚成功。

$pythonbinlog2sql.py-h127.0.0.1-P3306-uadmin-p'admin'-dtest-ttbl--start-file='mysql-bin.000047'--start-pos=3346--end-pos=3556-B|mysql-h127.0.0.1-P3306-uadmin-p'admin'

mysql>select*fromtbl;

+----+--------+---------------------+

|id|name|addtime|

+----+--------+---------------------+

|1|小赵|2016-12-1000:04:33|

|2|小钱|2016-12-1000:04:48|

|3|小孙|2016-12-1000:04:51|

|4|小李|2016-12-1000:04:56|

+----+--------+---------------------+

软件测试免费视频观看链接:https://ke.qq.com/course/159919#tuin=ba4122

松勤网:www.songqinnet.com

mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据相关推荐

  1. mysql+误操作怎么恢复_Mysql误操作恢复流程

    一.开启binlog. show variables like 'log_bin'; #vim  /etc/my.cnf 在[mysqld]中加入 log-bin                 =  ...

  2. mysql 传统数据恢复_MySQL误操作后如何快速恢复数据 传统解法 利用binlog2sql快速闪回 常见问题 参考资料...

    MySQL误操作后如何快速恢复数据 摘要: 利用binlog闪回误操作数据. 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,不小心upda ...

  3. MySQL误操作后如何快速恢复数据

    基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,MySQL误操作后如何快速回滚?比如,delete一张表,忘加限制条件,整张表都没了.假如这还是线上环境核心业务数据,那这事就闹大 ...

  4. mysql设置停止二进制文件的操作_window下使用二进制文件对mysql数据库备份及恢复(再现用户操作)...

    1,查看二进制日志文件是否启用 mysql>show variables like 'log_bin'; 如果未启用,则启用二进制文件(默认是关闭的 ) 2,在mysql的配置文件[mysqld ...

  5. mysql根据bin log恢复_MySQL 通过 binlog 恢复数据

    目的 通过了解 binlog 日志的相关配置,简单掌握通过 binlog 对数据库进行数据恢复操作: mysql 日志文件 任何成熟软件都会有一套成熟的日志系统,当软件出现问题时,这些日志就是查询问题 ...

  6. mysql数据库怎么冷备份恢复_MySQL数据库的备份与恢复

    一.数据备份的重要性 在生产环境中,数据的安全性至关重要 任何数据的丢失都可能产生严重的后果 造成数据丢失的原因 ·程序错误 ·人为操作错误 ·运算错误 ·磁盘故障 ·灾难(如火灾.地震等) 二.数据 ...

  7. mysql如何进行视图恢复_mysql事务 视图 索引 备份和恢复

    事务 1.事务: 概念:是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行,要么都不执行 事务是一个不可分割的工作逻辑单元 默认情况下 , 每条单独的SQL语句视为一个 ...

  8. mysql倍增表的内容_MySQL入门(7)——表数据的增、删、改

    MySQL入门(7)--表数据的增.删.改 插入数据 使用INSERT···VALUES语句插入数据 INSERT语句最常用的格式是INSERT···VALUES: INSERT [LOW_PRIOR ...

  9. mysql 载入主体时出错_mysql遇到load data导入文件数据出现1290错误的解决方案

    错误出现情景 在cmd中使用mysql命令,学生信息表添加数据.使用load data方式简单批量导入数据. 准备好文本数据: xueshengxinxi.txt 文件  数据之间以tab键进行分割 ...

最新文章

  1. 【亲测可用】Xshell可视化配置一个登录服务器后自动进入指定目录的方法
  2. 紫书 习题 10-17 UVa 11105 (筛法)
  3. Linux下屏蔽Ctrl+Alt+Delete
  4. oracle 查询数据横向,Oracle 查询存储过程做横向报表的方法
  5. 涨跌因子计算器下载哪里下载_网易超级计算器appv1-网易超级计算器v1下载
  6. 【D3.js 学习总结】26、D3地理地图
  7. 微软Hololens设备 浅分析
  8. flutter AppBar
  9. 【ros】4.rosbag的相关用法
  10. 黑马程序员之《String 类练习》
  11. 大地图开发管理:《巫师3》Umbra遮挡剔除技术
  12. Python -bs4介绍
  13. linux之安装boost环境
  14. 设计模式笔记十七:迭代器模式
  15. 苹果开发者账号那些事儿(三)
  16. 低代码大势所趋,RDP报表3.0应运而生
  17. python读取xps文件_Python操作PDF-文本和图片提取(使用PyPDF2和PyMuPDF)
  18. python截图识别文字_python截图并转换文字
  19. gmail邮箱注册成功流程
  20. methodinvocationexception: property ‘driverclassname‘ threw exception; nested exception is java.lang

热门文章

  1. .NET Core TDD前传: 编写易于测试的代码 -- 缝
  2. ASP.NET Core 2.0 全局配置项
  3. .NET Conf 2017后初尝Xamarin Forms 3.0@Linux
  4. django13:Session与Cookie操作
  5. Windows11 发布更新 Insider Preview Build 22000.100
  6. EditPlus 文件查找功能:在指定文件夹,用正则查寻包含指定内容的文件,指定文件类型,并排除特殊文件名文件
  7. C#创建桌面快捷方式
  8. Java之HashMap、Hashtable、LinkedHashMap、TreeMap、ConcurrentHashMap简单的区别
  9. Android之解决键盘覆盖编辑框问题
  10. java和C++之单例类双重检查加锁