mysqlbinlog恢复delete的数据

实验目的

delete数据后,用mysqlbinlog进行数据恢复

实验过程

原表

mysql> select * from mytest;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | xw01 |    90 |
|  2 | xw02 |    92 |
|  3 | xw03 |    93 |
|  4 | xw04 |    94 |
|  5 | xw05 |    93 |
|  6 | xw06 |    96 |
|  7 | xw7  |    97 |
+----+------+-------+
7 rows in set (0.00 sec)mysql># 查看binlog日志文件
root@dg02-xianwetitest-dy03:/var/log/mysql# ls
error.log  mysql-bin.000001  mysql-bin.000002  mysql-bin.index
root@dg02-xianwetitest-dy03:/var/log/mysql#mysql> show binlog events in 'mysql-bin.000002' limit 10;
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                   |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------+
| mysql-bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.33-0ubuntu0.16.04.1-log, Binlog ver: 4 |
| mysql-bin.000002 | 123 | Previous_gtids |         1 |         154 |                                                        |
| mysql-bin.000002 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                   |
| mysql-bin.000002 | 219 | Query          |         1 |         291 | BEGIN                                                  |
| mysql-bin.000002 | 291 | Table_map      |         1 |         344 | table_id: 108 (test.mytest)                            |
| mysql-bin.000002 | 344 | Update_rows    |         1 |         408 | table_id: 108 flags: STMT_END_F                        |
| mysql-bin.000002 | 408 | Xid            |         1 |         439 | COMMIT /* xid=91 */                                    |
| mysql-bin.000002 | 439 | Anonymous_Gtid |         1 |         504 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                   |
| mysql-bin.000002 | 504 | Query          |         1 |         576 | BEGIN                                                  |
| mysql-bin.000002 | 576 | Table_map      |         1 |         629 | table_id: 108 (test.mytest)                            |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------+
10 rows in set (0.00 sec)# 测试删除3行数据
mysql> delete from mytest where id=1 or id=2 or id=3;
Query OK, 3 rows affected (0.00 sec)mysql> select * from mytest;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  4 | xw04 |    94 |
|  5 | xw05 |    93 |
|  6 | xw06 |    96 |
|  7 | xw7  |    97 |
+----+------+-------+
4 rows in set (0.00 sec)

实验mysqlbin找到删除的命令

mysql> show binlog events in 'mysql-bin.000002' ;
.... 此次省略部分输出| mysql-bin.000002 | 2811 | Query          |         1 |        2883 | BEGIN                                                                                                                                                                                                                     |
| mysql-bin.000002 | 2883 | Table_map      |         1 |        2936 | table_id: 115 (test.mytest)                                                                                                                                                                                               |
| mysql-bin.000002 | 2936 | Write_rows     |         1 |        2984 | table_id: 115 flags: STMT_END_F                                                                                                                                                                                           |
| mysql-bin.000002 | 2984 | Xid            |         1 |        3015 | COMMIT /* xid=331 */                                                                                                                                                                                                      |
| mysql-bin.000002 | 3015 | Anonymous_Gtid |         1 |        3080 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                                                                                                                      |
| mysql-bin.000002 | 3080 | Query          |         1 |        3152 | BEGIN                                                                                                                                                                                                                     |
| mysql-bin.000002 | 3152 | Table_map      |         1 |        3205 | table_id: 115 (test.mytest)                                                                                                                                                                                               |
| mysql-bin.000002 | 3205 | Delete_rows    |         1 |        3282 | table_id: 115 flags: STMT_END_F                                                                                                                                                                                           |
| mysql-bin.000002 | 3282 | Xid            |         1 |        3313 | COMMIT /* xid=338 */                                                                                                                                                                                                      |
+------------------+------+----------------+-----------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
47 rows in set (0.00 sec)#找到“Delete_rows”对应所在的pos,是3080到3282
# 实验mysqlbin从binlog文件查找到删除对应的语句
root@dg02-xianwetitest-dy03:/var/log/mysql# mysqlbinlog  --start-position=3080  --stop-position=3282 --database=test mysql-bin.000002 -vv |grep ^"###"
### DELETE FROM `test`.`mytest`
### WHERE
###   @1=1 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw01' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=90 /* INT meta=0 nullable=1 is_null=0 */
### DELETE FROM `test`.`mytest`
### WHERE
###   @1=2 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw02' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=92 /* INT meta=0 nullable=1 is_null=0 */
### DELETE FROM `test`.`mytest`
### WHERE
###   @1=3 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw03' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=93 /* INT meta=0 nullable=1 is_null=0 */mysqlbinlog --start-position=3080 --stop-position=3282 --database=test mysql-bin.000002 -vv  | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' |sed -r 's/(@6.*),/\1;/g' | sed 's/@[1-9]=//g' | sed 's/@[1-9][0-9]=//g'
INSERT INTO `test`.`mytest`
SELECT1 ,'xw01' ,90 ,
INSERT INTO `test`.`mytest`
SELECT2 ,'xw02' ,92 ,
INSERT INTO `test`.`mytest`
SELECT3 ,'xw03' ,93 ,
  • 再用文本工具编译为恢复的sql语句,如果太多可以用bin2sql工具处理
INSERT INTO `test`.`mytest`
SELECT1 ,'xw01' ,90 ;
INSERT INTO `test`.`mytest`
SELECT2 ,'xw02' ,92 ;
INSERT INTO `test`.`mytest`
SELECT3 ,'xw03' ,93 
  • 恢复数据
mysql> INSERT INTO `test`.`mytest`-> SELECT->   1 ,->   'xw01' ,->   90 ;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> INSERT INTO `test`.`mytest`-> SELECT->   2 ,->   'xw02' ,->   92 ;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0mysql> INSERT INTO `test`.`mytest`-> SELECT->   3 ,->   'xw03' ,->   93 ;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
  • 恢复后检查
mysql> select * from mytest;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | xw01 |    90 |
|  2 | xw02 |    92 |
|  3 | xw03 |    93 |
|  4 | xw04 |    94 |
|  5 | xw05 |    93 |
|  6 | xw06 |    96 |
|  7 | xw7  |    97 |
+----+------+-------+
7 rows in set (0.00 sec)

另外如何用mysqlbinlog语言转换太麻烦可以用binlog2sql工具,使用方法如下

参考文档:https://juejin.cn/post/7150801079196712967

root@dg02-xianwetitest-dy03:~/bin2sql/bin2sql/binlog2sql# /usr/bin/python2.7 binlog2sql/binlog2sql.py --start-position=3080 --stop-position=3282  --start-file='mysql-bin.000002' -h127.0.0.1  -uroot -proot@123 -dtest -tmytest
DELETE FROM `test`.`mytest` WHERE `score`=90 AND `id`=1 AND `name`='xw01' LIMIT 1; #start 3080 end 3282 time 2024-04-29 18:01:43
DELETE FROM `test`.`mytest` WHERE `score`=92 AND `id`=2 AND `name`='xw02' LIMIT 1; #start 3080 end 3282 time 2024-04-29 18:01:43
DELETE FROM `test`.`mytest` WHERE `score`=93 AND `id`=3 AND `name`='xw03' LIMIT 1; #start 3080 end 3282 time 2024-04-29 18:01:43
root@dg02-xianwetitest-dy03:~/bin2sql/bin2sql/binlog2sql#
root@dg02-xianwetitest-dy03:~/bin2sql/bin2sql/binlog2sql#
root@dg02-xianwetitest-dy03:~/bin2sql/bin2sql/binlog2sql#
root@dg02-xianwetitest-dy03:~/bin2sql/bin2sql/binlog2sql# /usr/bin/python2.7 binlog2sql/binlog2sql.py --start-position=3080 --stop-position=3282  --start-file='mysql-bin.000002' -h127.0.0.1  -uroot -proot@123 -dtest -tmytest -B
INSERT INTO `test`.`mytest`(`score`, `id`, `name`) VALUES (93, 3, 'xw03'); #start 3080 end 3282 time 2024-04-29 18:01:43
INSERT INTO `test`.`mytest`(`score`, `id`, `name`) VALUES (92, 2, 'xw02'); #start 3080 end 3282 time 2024-04-29 18:01:43
INSERT INTO `test`.`mytest`(`score`, `id`, `name`) VALUES (90, 1, 'xw01'); #start 3080 end 3282 time 2024-04-29 18:01:43上面就是需要恢复数据的sql语句

实验总结

达到实验目的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D看车有哪些强大的功能?适合哪些企业使用?

3D看车是一种创新的汽车展示方式,它提供了许多强大的功能,特别适合汽车行业的企业使用。 3D看车可实现哪些功能? 1、细节展示: 51建模网提供全套汽车行业3D数字化解决方案,3D看车能够将汽车展示得更加栩栩如生&…

maven聚合,继承等方式

需要install安装到本地仓库&#xff0c;或者私服&#xff0c;方可使用自己封装项目 编译&#xff0c;测试&#xff0c;打包&#xff0c;安装&#xff0c;发布 parent: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…

Open CASCADE学习|BRepFill_SectionPlacement

BRepFill_SectionPlacement 是一个与计算机辅助设计&#xff08;CAD&#xff09;相关的术语&#xff0c;通常用于指代一个几何对象或操作&#xff0c;它是Open CASCADE Technology&#xff08;OCCT&#xff09;中的一个类。Open CASCADE Technology是一个开源的CAD内核&#xf…

在AndroidStudio创建Flutter项目并运行到模拟器

1.Flutter简介 Flutter是Google开源的构建用户界面&#xff08;UI&#xff09;工具包&#xff0c;帮助开发者通过一套代码库高效构建多平台精美应用&#xff0c;支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费&#xff0c;拥有宽松的开源协议&#xff0c;适合商…

HTML中input输入框(详解输入框的用法)

目录 一、input介绍 1.概念 2.好处 3.用法 4.应用 二、input语法 1.文本输入框 (type"text") 2.密码输入框 (type"password") 3.数字输入框 (type"number") 4.电子邮件输入框 (type"email") 5.复选框 (type"checkbox&…

Centos7 安装Git、使用

Centos7 安装Git 一、安装步骤1.1 查看版本1.2 卸载1.3 安装 二、创建仓库2.1 新增仓库2.2 新增配置项 三、管理文件3.1 文件创建3.2 文件修改、add、commit3.3 tree结构探索 四、分支4.1 创建分支&#xff1a;4.2 查看分支4.3 切换分支4.4 删除分支4.5 合并冲突 一、安装步骤 …

运行DeepSORT_YOLOv5_Pytorch时出现的问题

文章目录 前言问题1&#xff1a;Loaderyaml.FullLoader问题2&#xff1a;utils. -> yolov5.utils.问题3&#xff1a;np.float -> float问题4&#xff1a;np.int -> int问题5&#xff1a;ImportError: cannot import name time_synchronized from yolov5.utils.torch_u…

TCP协议关于速率的优化机制-滑动窗口详解

在上一章中&#xff0c;我们讲述了TCP协议在传输过程中的可靠性http://t.csdnimg.cn/BsImO&#xff0c;这里衔接上一篇文章继续讲&#xff0c;TCP协议的特性&#xff0c;TCP协议写完之后就写&#xff0c;Http和Https等内容吧 1. 滑动窗口 这里的滑动窗口不是指算法里面的双指…

Jetson Orin NX L4T35.5.0平台相机stop导致系统死机问题调试

1. 环境 硬件:国产OrinNX套件 系统版本: L4T35.5.0 相机: SDI 相机,1080P50fps 2. 问题描述 移植驱动已经开始正常采集相机图像,但是会出现以下问题: 采集流程如下: (1)start SDI camera (2)gst-launch-1.0采集图像 gst-launch-1.0 v4l2src device=/dev/vide…

30天拿下Rust之图形编程

概述 Rust语言以其卓越的安全性、性能和可靠性赢得了广大开发者的青睐&#xff0c;逐渐在系统编程、网络服务、游戏开发等领域崭露头角。随着Rust生态的日益繁荣&#xff0c;图形编程领域也涌现出一批优秀的框架和库&#xff0c;使得用Rust进行高效、安全的图形应用开发成为可能…

QT学习之QtXlsx

背景&#xff1a; 本来我是想提取xml中的信息存在xlsx文件中的&#xff0c;网上很多说是使用QtXlsx&#xff1b; 于是我找了一些帖&#xff0c; 像&#xff1a;https://www.cnblogs.com/liming19680104/p/14398459.html&#xff1b; 大家的说法都是安装第三方库到QT中&#xff…

「AIGC」如何理解大语言模型

一、Transformer模型 Transformer模型是一种基于自注意力机制的架构&#xff0c;由Vaswani等人在2017年的论文《Attention Is All You Need》中首次提出。它主要用于处理序列到序列的任务&#xff0c;如机器翻译、文本摘要等。 案例&#xff1a;机器翻译 假设我们想将英文句子…

OLTP和OLAP,StarRocks数据库,TiDB数据库

OLTP和OLAP&#xff0c;StarRocks数据库&#xff0c;TiDB数据库 一、OLTP和OLAP二、StarRocks数据库三、TiDB数据库 一、OLTP和OLAP OLTP和OLAP是两种不同的数据处理方式&#xff0c;用于处理不同类型的工作负载。OLTP&#xff08;Online Transaction Processing&#xff09;是…

leetcode18-4Sum

题目 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 &l…

ECharts在网页中添加可视化图标-在网页中添加交互图表+option模块案列详解

一、引言 ECharts 是一个使用 JavaScript 编写的开源可视化库&#xff0c;它可以在浏览器中生成交互式的图表。无论是折线图、柱状图、散点图还是饼图&#xff0c;ECharts 都能轻松应对。本文将带领大家了解如何在网页中添加 ECharts 可视化图标。 本章可以直接跳到第五点完整…

XML 映射文件(Mapper 文件)的命名空间

MyBatis 中&#xff0c;mapper 命名空间是指一个 XML 映射文件&#xff08;Mapper 文件&#xff09;的命名空间。每个 Mapper 文件都有一个命名空间&#xff0c;用于定义与特定数据库表相关联的 SQL 映射规则和操作方法。 mapper 命名空间的作用包括&#xff1a; 命名空间的唯…

EOCR-SS-05W电子式过电流继电器 0.5-6A 施耐德韩国三和

三和EOCR株式会社是韩国的电动机保护器生产企业&#xff0c;公司由金仁锡博士&#xff08;施耐德电气集团韩国执行官&#xff09;于1981年建立。 2001年&#xff0c;为了把企业发展成性的、战略性企业&#xff0c;随后加入了法国施耐德电气集团公司。 EOCR主要产品有电子式电…

LeetCode 刷题 -- Day 6

今日题目 题目难度备注102. 二叉树的层序遍历 中等一招鲜吃遍天107. 二叉树的层序遍历 II &#xff09;中等199. 二叉树的右视图 中等637. 二叉树的层平均值简单429. N 叉树的层序遍历中等515. 在每个树行中找最大值中等116. 填充每个节点的下一个右侧节点指针中等104. 二叉树…

JAVA相关面试题分享

Java 基础知识 1.1 面向对象的特征&#xff08;了解&#xff09; 面向对象的特征&#xff1a;封装、继承、多态、抽象。 封装&#xff1a;就是把对象的属性和行为&#xff08;数据&#xff09;结合为一个独立的整体&#xff0c;并尽可能隐藏对 象的内部实现细节&#xff0c;就…

spring boot 定义启动页 到 login

当前办法只是针对 项目启动后 直接跳转到 指定静态页面 如果有验证身份 安全等问题 可以另外想办法 去添加 &#xff0c;需要的直接 拉过去使用 修改 【"redirect: 需要启动后访问到文件位置得地址 ”】 直接上代码 &#xff1a; import org.springframework.context…