当前位置: 首页 > news >正文

接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能

看腻了文章就来听听视频演示吧:https://www.bilibili.com/video/BV1cV411A7iU/

delete忘加where条件(模拟Oracle闪回)

操作基本等同于上篇:再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的回滚功能
原理:binlog的ROW模式将记录的delete语句内容转换成insert语句
步骤

  1. 查找误操作的binlog文件内容
  2. binlog内容处理,转为可执行的SQL语句
  3. 执行SQL恢复达到回滚效果
mysql> select * from t_student;
+------+------+-------+-------+
| id   | name | class | score |
+------+------+-------+-------+
|    1 | a    |     1 | 66    |
|    2 | b    |     1 | 58    |
|    3 | c    |     2 | 86    |
|    4 | d    |     2 | 78    |
+------+------+-------+-------+
4 rows in set (0.00 sec)# 模拟误删数据
delete from t_student where id>2;mysql> select * from t_student;
+------+------+-------+-------+
| id   | name | class | score |
+------+------+-------+-------+
|    1 | a    |     1 | 66    |
|    2 | b    |     1 | 58    |
+------+------+-------+-------+
2 rows in set (0.00 sec)

binlog查找到误delete语句

[root@db01 data]# mysqlbinlog --no-defaults -v -v --base64-output=decode-rows mysql-bin.000013 | sed -n '/### DELETE FROM `mdb`.`t_student`/,/COMMIT/p' > deltbl_data.txt
[root@db01 data]# cat deltbl_data.txt 
### DELETE FROM `mdb`.`t_student`
### WHERE
###   @1=3 /* INT meta=0 nullable=1 is_null=0 */
###   @2='c' /* VARSTRING(54) meta=54 nullable=1 is_null=0 */
###   @3=2 /* INT meta=0 nullable=1 is_null=0 */
###   @4='86' /* VARSTRING(54) meta=54 nullable=1 is_null=0 */
### DELETE FROM `mdb`.`t_student`
### WHERE
###   @1=4 /* INT meta=0 nullable=1 is_null=0 */
###   @2='d' /* VARSTRING(54) meta=54 nullable=1 is_null=0 */
###   @3=2 /* INT meta=0 nullable=1 is_null=0 */
###   @4='78' /* VARSTRING(54) meta=54 nullable=1 is_null=0 */
# at 2508
#230910 11:44:32 server id 3306  end_log_pos 2539 CRC32 0x7be20ca3      Xid = 571
COMMIT/*!*/;

转换成标准SQL

[root@db01 data]# cat deltbl_data.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@4.*),/\1;/g' | sed 's/@[1-9]=//g' > instbl_data.sql
[root@db01 data]# cat instbl_data.sql 
INSERT INTO `mdb`.`t_student`
SELECT3 ,'c' ,2 ,'86' ;
INSERT INTO `mdb`.`t_student`
SELECT4 ,'d' ,2 ,'78' ;

恢复

mysql> select * from t_student;
+------+------+-------+-------+
| id   | name | class | score |
+------+------+-------+-------+
|    1 | a    |     1 | 66    |
|    2 | b    |     1 | 58    |
+------+------+-------+-------+
2 rows in set (0.00 sec)mysql> source /mysqldata/data/instbl_data.sql
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> select * from t_student;
+------+------+-------+-------+
| id   | name | class | score |
+------+------+-------+-------+
|    1 | a    |     1 | 66    |
|    2 | b    |     1 | 58    |
|    3 | c    |     2 | 86    |
|    4 | d    |     2 | 78    |
+------+------+-------+-------+
4 rows in set (0.00 sec)

MySQL的binlog系列和奇技操作:

先来聊聊MySQL的binlog文件解析
接着说说mysqlbinlog解析工具如何做数据恢复
再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能
接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
再来介绍另一个binlog文件解析的第三方工具my2sql
顺带来聊聊MySQL误删ibdata数据文件的恢复
MySQL大表直接复制文件的copy方式

http://www.lryc.cn/news/183770.html

相关文章:

  • 计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶
  • pyqt5使用经验总结
  • 【MQTT】mosquitto库中SSL/TLS相关API接口
  • 假期题目整合
  • Redisson—分布式服务
  • volatile使用方法
  • 提升您的 Go 应用性能的 6 种方法
  • 计算摄像技术02 - 颜色空间
  • Pytorch笔记之分类
  • 【目标检测】——PE-YOLO精读
  • Java 数组转集合
  • Elasticsearch:ES|QL 查询语言简介
  • qt qml中listview出现卡顿情况时的常用处理方法
  • Elasticsearch基础操作演示总结
  • Spring 作用域解析器AnnotationScopeMetadataResolver
  • 如何发布一个 NPM 包
  • Flask小项目教程(含MySQL与前端部分)
  • Eureka
  • STM32G070RBT6-MCU温度测量(ADC)
  • 数据结构之带头双向循环链表
  • adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表
  • 【Spring Boot】日志文件
  • 图像处理与计算机视觉--第五章-图像分割-Canny算子
  • LabVIEW开发教学实验室自动化INL和DNL测试系统
  • 数据结构: 数组与链表
  • unity 控制玩家物体
  • 指数分布优化器(EDO)(含MATLAB代码)
  • Java 时间的加减处理
  • 基于A4988/DRV8825的四路步进电机驱动器
  • 万字总结网络原理