MySQL恢复不小心误删的数据记录(binlog)-生产实操

news2024/9/22 4:13:04

同事操作删除生产数据时,未及时备份导致误删除部份数据。现通过mysql的binlog日志回滚数据。

1.由于我们第一时间找到相应的操作时间的大概在12点~13点之间操作删除了product和product_item表的部份数据。因此我们只要找到这期间的binlog文件就行了,

脚本为:delete from product_item  where shop_id = '1630131736490098689';

             delete from product  where shop_id = '1630131736490098689';

cd /var/lib/mysql
ll

 

(该图为后面载图的)

2.先cp到其它目录去操作。千万不要在原目录操作!!!!
cd /mnt
mkdir  mysqlbak003217
cp /var/lib/mysql/binlog.* /mnt/mysqlbak003217/

3.通过分析找到对应的binlog文件(通过时间缩小范围)并通过mysqlbinlog 命令转为sql文件

binlog.003216,binlog.003217,binlog.003218三个文件中找

mysqlbinlog --base64-output=decode-rows -v binlog.003216 --result-file=mysql-bin-sql-003216.sql  
mysqlbinlog --base64-output=decode-rows -v binlog.003218 --result-file=mysql-bin-sql-003218.sql     
mysqlbinlog --base64-output=decode-rows -v binlog.003217 --result-file=mysql-bin-sql-003217.sql 

4找到你误删的数据

一般来说你误删的数据会大致记下来一个标识。我这里是shop_id。记得被删除的数据的是多少,那么我们就可以模糊搜索该条件:

grep '1630131736490098689' mysql-bin-sql-003217.sql  -C 200或

grep '1630131736490098689' mysql-bin-sql-003217.sql  -C 200 --> 1630131736490098689.sql 输出文件查看下delete from 的脚本。

 

确认是 mysql-bin-sql-003217.sql文件

5.通过linux命令,查找需的数据,成为需要的数据(#每完成一份正确的数据,都及时备份下文件。以免操作错误重头开始

grep 'DELETE FROM' mysql-bin-sql-003217.sql  -C 200 --> delete20231021.sql

#每完成一份正确的数据,都及时备份下。以免操作错误重头开始
cp delete20231021.sql delete20231021.sql.bak

#拆分两个表的操作数据SQL(过程是通过反复操作及分析的结果)
grep 'DELETE FROM `lirimall_server`.`product_item`' mysql-bin-sql-003217.sql  -C 200 --> deleteproduct_item20231021.sql

grep 'DELETE FROM `lirimall_server`.`product`' mysql-bin-sql-003217.sql  -C 200 --> deleteproduct20231021.sql


6。分别处理两个操作数据的文件

删除无效数据,

#包括特殊字符"",#,|"这些的处理,这个只能通过SQL工具测试后有异常再更新文件

mkdir product_itme
mkdir product
cp deleteproduct20231021.sql ./product
cp deleteproduct_item20231021.sql ./product_item/
 

cd product


#备份数据
cp deleteproduct20231021.sql deleteproduct20231021.sql.bak

#删除无用的数据,特殊字符的数据
vi deleteproduct20231021.sql
#文件命令:
#显示行数
:set nu
#删除1-200行的数据
:1,200d
#删除336581~336938d行的数据
:336581,336938d
#搜索“# at”的数据
/# at
#到文件的结尾处查看下
:$

#包括特殊字符"",#,|"这些的处理,这个只能通过SQL工具测试后有异常再更新




7.通过linux的sed 命令把delete删除语句替换为insert into语句(有问题可反复执行-一定要备份文件)-
sed -i 's/^### //g' deleteproduct20231021.sql
sed -i "s/^DELETE FROM/INSERT INTO/g" deleteproduct20231021.sql
sed -i "s/^WHERE/VALUES(/g" deleteproduct20231021.sql
sed -i '/INSERT INTO/i );' deleteproduct20231021.sql


cat deleteproduct20231021.sql  | awk -F"=|" '{

    if($0 ~ /^INSERT|^VALUES|^);/){

        print $0;

    }else{

        printf $2",";

    };

}' > delete2insertproduct20231021.sql


sed -i "s/,);$/);/g" delete2insertproduct20231021.sql

vi  delete2insertproduct20231021.sql
#删除开头和补齐结束的SQL
8.通过处理后的insert into语句在SQL工具(我是HeidiSQL)逐步执行下,有异常可反复操作步骤6和7,以达到需要的效果。

注:一定不要在原数据库实例上操作。可以新建一个数据库实例和表进行操作。我是在测试环境的数据库进操作验证的,验证的数据同步到生产。再进行回滚数据的。

参考:

MySQL如何恢复不小心误删的数据记录(binlog)_mysql恢复误删的数据-CSDN博客

https://www.lmlphp.com/user/62049/article/item/2326681/【精选】sed -i 命令入门详解_码灵的博客-CSDN博客

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

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

相关文章

【字符串】【字符串和字符数组的相互转化】Leetcode 541 反转字符串 II

【字符串】【toCharArray & String st new String(ch)】Leetcode 541 反转字符串 II 字符串和字符数组的相互转化:star:解法1 字符串和字符数组的相互转化⭐️ 解法1 时间复杂度O(N) 这个解法的时间复杂度是O(N),其中N是字符串的长度。…

美颜SDK集成指南:为应用添加视频美颜功能

随着社交媒体和直播应用的兴起,视频美颜功能已成为用户追求的一项热门特性。用户希望能够在拍摄照片或进行实时视频直播时,使用美颜功能来增强其外观。为了满足这一需求,开发者可以考虑集成美颜SDK,为其应用增加这一吸引人的功能。…

花生供应链中的沙门氏菌、大肠杆菌和肠杆菌: 从农场到餐桌

1.1Title:Salmonella, Escherichia coli and Enterobacteriaceae in the peanut supply chain: From farm to table 1.2 Author: Nascimento M. S. 1.3 机构:Campinas University 1.4 分区/影响因子:Q1/6.475 1.5 期刊:FOOD RESEARCH INT…

linux,windows命令行输出控制指令,带颜色的信息,多行刷新,进度条效果,golang

一、带颜色的信息 linux 颜色及模式编号 // 前景 背景 颜色 // --------------------------------------- // 30 40 黑色 // 31 41 红色 // 32 42 绿色 // 33 43 黄色 // 34 44 蓝色 // 35 45 紫红色 // 36 46 青蓝色 // 37 47 白色 // // 模式代码 意义 //…

接口测试到底怎么做,5分钟时间看完这篇文章彻底搞清楚!

01、通用的项目架构 02、什么是接口 接口:服务端程序对外提供的一种统一的访问方式,通常采用HTTP协议,通过不同的url,不同的请求类型(GET、POST),不同的参数,来执行不同的业务逻辑。…

SpringBoot中对Spring AOP的实现

文章目录 SpringBoot中对Spring AOP的实现AOP简介引入依赖AOP体系与概念编写AOP切面类启动SpringBoot项目然后访问controller控制器对环绕通知放行execution表达式的含义通过注解方式定义切点 SpringBoot中对Spring AOP的实现 AOP简介 AOP (Aspect Oriented Programming), 面…

模拟线程死锁现象:两个线程同时抢两个互斥锁

下面业务逻辑的分析 1.如果 flag 为 T,线程 A 就会先得到 / 持有 o1 对象锁,然后尝试去获取 o2 对象锁 2.如果线程 A 得不到 o2 对象锁,就会 Blocked 3.如果 flag 为 F ,线程 B 就会先得到 / 持有 o2 对象锁,然后尝试去…

【python】numpy常用属性

文章目录 np.rangenp.quantilenp.digitizenp.randomrandseedpermutation np.uniquenp.zerosnp.sumnp.logtransposebool判断 首先导入numpy import numpy as npnp.range np.range(start, end, step): 获取指定区间和步长的列表。 np.arange(0, 1, 0.1) # 区间: [0, 1), 步长…

大疆 dji mini4pro 不同充电器头 充电速度

协议 dp100w 头线 充电功率33.2w 指示灯快闪 一加手机官方充电头线(协议:wrap65w闪充) 12.1w 指示灯慢闪 官方 DJI Mini 4 Pro - 技术参数 - DJI 大疆创新 总结 买pd快充协议的头线即可。

(三)库存超卖案例实战——使用redis分布式锁解决“超卖”问题

前言 在上一节内容中我们介绍了如何使用mysql数据库的传统锁(行锁、乐观锁、悲观锁)来解决并发访问导致的“超卖问题”。虽然mysql的传统锁能够很好的解决并发访问的问题,但是从性能上来讲,mysql的表现似乎并不那么优秀&#xff…

ATA-8061射频功率放大器在心室导管式扩压电式测力传感器中的应用

心室导管式扩压电式测力传感器是一种广泛应用于心血管领域的关键设备,用于测量心脏内部的压力变化。本文将主要介绍关于压电式测力传感器的相关知识概念,以及功率放大器在心室导管式扩压电式测力传感器研究中的重要应用。我们通过对传感器原理和功率放大…

使用 JDAudioCrawler 将下载的音频存储到本地存储

前言 在当今数字化时代,音频数据的获取和处理变得越来越重要。本文将访问网易云音乐为案例,介绍如何使用JDAudioCrawler这个强大的工具,将音频数据存储下载到本地存储中。将详细介绍实现的流程和代码细节。 什么是 JDAudioCrawler DAudioC…

2023运营级别网赚网盘平台搭建(源码+教程)

023运营级别网赚网盘平台搭建(源码教程) 为什么要自己搭建网盘,现在许多大厂的网盘,文件都添加了许多限制,有好多文件会遭到和谐,而且大部分网盘也都会限速,不开通VIP是很难用的!这…

【Docker】Docker Compose服务依赖与健康检查

docker compose环境变量 为增加安全性,在前面的python例子中增加redis的密码校验,密码从环境变量中获取: from flask import Flask from redis import StrictRedis import os import socketapp Flask(__name__) redis StrictRedis(hostos…

企业在数字化转型时如何通过SD-WAN保证业务连续性

企业数字化建设离不开高品质的网络,随着信息化系统和应用的部署,传统网络线路逐渐暴露出不同的问题,包括: 线路资源利用率低易造成浪费 关键业务流量被抢占,缺乏保障 网络不可视,无法实时查看线路情况 故…

利用已存在的conda环境

一、已存在的环境 二、在Pycharm中使用这些环境

Linux 基于sysfs的GPIO读写操作

https://bbs.huaweicloud.com/blogs/297252 前言 最近接触到Linux系统中的GPIO开发,这里做个小总结,也分享一下;本文会介绍GPIO的读写,介绍基本原理,以及不同读写方式的性能。 一、GPIO sysfs interface 基本原理 …

Android 备案公钥、签名 MD5获取方法

公钥和 MD5 值可以通过安卓开发工具、Keytool、Jadx-GUI 等多种工具获取,本文以 jadx-gui 为例。 1 windows 下载 jadx-gui 工具 下载 jadx-gui 工具 在这里选择一个下载 下载后 解压文件 双击运行程序,然后选择 release apk安装包 2 Mac 打开终端&a…

基于springboot实现企业客户信息反馈平台管理系统项目【项目源码+论文说明】

基于springboot实现企业客户信息反馈平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把企业客户信息反馈管理与现在网络相结合,利用java技术建设企业客户信息反馈平台,实现企业客户信息反馈的信息化。则对于进一步提高企业客户信息反…

1024程序员节优惠来啦 | 芒果YOLO专栏《全年首次优惠全场8.8折活动来啦》,一年一次,优惠券数量有限,先到先得!

芒果YOLO改进专栏 订阅即可享受 优惠券直接减免,芒果专栏全场优惠!! 1024程序员 全年优惠活动 来啦!!!! 芒果专栏全场优惠8.8折!! 文章目录 活动时间🔥&…