Mysql 恢复误删库表数据

一、前提

        1、如果你的数据库有备份文件,自己还原即可。

        2、如果没有备份文件,那首先检查下你的 binlog 是否开启。如果未开启,那你就不用往下看了。如果开启了,可以往下看看。

1.1 查看位置

        可以通过以下的命令查看是否开启了 binlog 以及它的存储路径,mysql8.0 版本是默认开启的。

show variables like '%log_bin%'

二、简单场景演示

2.1 背景

        此时演示的数据库版本是 Mysql 8.0。且创建表、插入数据和删除表都是在一个 binlog 里面完成的。

2.2 创建数据库

        确认 binlog 是开启状态之后,创建测试数据库,在测试数据库中创建测试表,并写入数据,脚本如下:

create database if EXISTS itcast;use itcast;create table tb_user(id int(11) not null,name varchar(50) not null,sex varchar(1),primary key (id)
)engine=innodb default charset=utf8;insert into tb_user(id,name,sex) values(1,'Tom','1');
insert into tb_user(id,name,sex) values(2,'Trigger','0');
insert into tb_user(id,name,sex) values(3,'Dawn','1');

2.3 删除数据库

        执行下面的语句将数据库删除掉。

drop DATABASE itcast;

2.4 创建新文件

        当需要恢复数据时,为了防止恢复数据后影响最新业务,需要执行下面的命令产生一个新的 binlog 文件,如下,此时旧的 binlog 文件不会再有写入操作了。

flush logs;

2.5 查看具体文件

        执行下面的命令,看下系统有多少个 binlog 文件

show master logs;

        由于我们执行 flush logs 命令新生了一个文件,所以我们执行的删除的命令应该在 binlog.000017 文件里面。

2.6 查看具体的命令行

        执行下面的命令,查看具体操作的开始和结束的位置

show binlog events in 'binlog.000017';

        得到数据恢复的起始位置为 125,结束位置为 1750

2.7 mysqlbinlog

        接下来使用 mysqlbinlog 命令执行 binlog 文件,恢复数据,命令如下:

mysqlbinlog -v /var/lib/mysql/binlog.000017 --start-position=125 --stop-position=1750 | mysql -uroot -p1234

         数据就被恢复成功了。

三、复杂场景演示

        先通过下面的命令查看下 binlog 是否开启,以及日志存储的位置

show variables like '%log_bin%'

3.1 背景

        1、此时演示的数据库版本是 Mysql 8.0

        2、创建表、插入数据和删除表不是在一个 binlog 里面完成的。

        3、binlog 里面存储了不止一个数据库的日志。

3.2 现状

        此时我们有一个库,里面有三张表,如下,具体什么时候创建的,不记得了,现在我们把他删除掉,看看能不能给还原回去。

3.3 删除数据库

        执行下面的语句将数据库删除掉。

drop DATABASE itcast;

3.4 数据复原

        1、执行 flush logs 命令,使其产生一个新的 binlog 文件

        2、执行下面的命令,看下系统有多少个 binlog 文件。

show master logs;

        3、挨个遍历,执行下面的命令,挨个 binlog 日志去查看

show binlog events in 'DESKTOP-B0B82CP-bin.000001';
show binlog events in 'DESKTOP-B0B82CP-bin.000002';
show binlog events in 'DESKTOP-B0B82CP-bin.000003';
show binlog events in 'DESKTOP-B0B82CP-bin.000004';
show binlog events in 'DESKTOP-B0B82CP-bin.000005';
show binlog events in 'DESKTOP-B0B82CP-bin.000006';
show binlog events in 'DESKTOP-B0B82CP-bin.000007';

        1、发现第一个有关于 itcast 的日志位置,如下

        把涉及到的这几个 binlog 日志都拷贝到另外的文件夹里面去,因为 MySQL Server 8.0 这个目录识别不了,真坑爹。 

 

         拷贝完成后,执行下面的语句:

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000003 --start-position=424 --stop-position=543 | mysql -uroot -p123456

        执行成功后,可以看到,数据库被恢复成功了,不过现在只是个空库,如下图:

        2、继续向下搜寻有关 itcast binlog 日志,如下图,又在 binlog 里面发现了有关 itcast 的日志,

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=125 --stop-position=9655 | mysql -uroot -p123456

        继续找,继续还原。 

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=11607 --stop-position=12344 | mysql -uroot -p123456

        继续找,继续还原。

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=14152 --stop-position=14742 | mysql -uroot -p123456

        到此为止,就都找全了,数据也都恢复回来了。

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

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

相关文章

梯度下降和反向传播:能改

一、背景 1.问题 通过顶点坐标公式,求解出抛物线最低点的w坐标,得到了让误差代价最小的w。同样的,也通过算数说明了这种一步到位求解的方式固然是好,但是在输入特征过多、样本数量过大的时候,却非常消耗计算资源。 …

Windows Server 2012 R2 Standard 版英特尔 以太网 wifi 无线网驱动网络适配器驱动程序

Windows Server 2012 R2 Standard 版安装好以后发现没有网络,网上搜了很多都是不行,后来找到了方法,解决你方法如下: Windows Server 2012 R2 Standard 版英特尔网络适配器驱动程序 1、以太网驱动,下载解压安装即可…

echarts - xAxis.type设置time时该如何使用formatter的分级模板

echarts 文档中描述了x轴的多种类型 一、type: ‘value’ ‘value’ 数值轴,适用于连续数据。 此时x轴数据是从零开始,有数据大小的区分。 【注意】 因为xAxis.data是为category服务的,所以xAxis.data里面设置的数据无效。 二、type: ‘ca…

前端适配750px设计稿

全局引入 (function(doc, win) {const docEl doc.documentElement,resizeEvt orientationchange in window ? orientationchange : resizeconst setFont function() {let clientWidth docEl.clientWidth;if (!clientWidth) return;if (clientWidth > 750) {docEl.styl…

【自学笔记】01Java基础-07面向对象基础-03常量、枚举类、抽象类、多态详解

记录java基础学习中有关常量、枚举类、抽象类和多态的内容。 1 常量 什么是常量? 常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。 常量名的命名规范:英文单词全部大写&#x…

【JAVA】throw 和 throws 的区别?

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 throw: throws: 区别: 作用: 使用位置: 个数: 应…

软件测试|Python对JSON的解析和创建详解

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已经成为当今互联网应用中广泛使用的数据格式之一。Python提供了内置的模块来解析和创建JSON数据,使得在Python中处理JSON变得非常简单。本文将详细介绍Python…

复试 || 就业day10(2024.01.05)算法篇

文章目录 前言等价多米诺骨牌对的数量拼写单词“气球” 的最大数量独一无二的出现次数找出井字棋的获胜者种花问题用最少数量的箭引爆气球划分字母区间最小数字游戏 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目…

数据库:园林题库软件(《城市绿地设计规范》答题卷一 )

《城市绿地设计规范》答题卷一 填空题 1、城市绿地设计应贯彻人与自然和谐共存、可持续发展、经济合理等基本原则,创造良好生态和景观效果,促进人的身心健康。 2、城市绿地 urban green space 以植物为主要存在形态,用于改善城市生态&am…

YAML使用

yaml是类似xml,json的标记性语言,它强调以数据为中心 yaml的语法主要是如下几个: 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab、只允许空格(低版本限制,高版本不限制) 缩进时空格数不重要&#xf…

【题解】—— LeetCode一周小结

1.经营摩天轮的最大利润 题目链接: 1599. 经营摩天轮的最大利润 你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本 runningCost 。摩…

Qt 多进程编程-将子程序嵌入到主窗口

关键字:GPT4、QProcess、FindWindowEx、Qt 、嵌入 文章目录 前言调用外部程序关于 QProcess 嵌入到主程序显示FindWindowEx & FindWindowFindWindowFindWindowEx使用场景 结束 前言 今天计划是稍微研究一下Qt的多进程编程,因为最近的程序感觉有点慢…

Docker简介、基本概念和安装

Docker简介、基本概念和安装 1.docker简介 1.1 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes (opens new window)在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2…

Objective-C中使用STL标准库Queue队列

1.修改.m文件为mm 2.导入queue头 #include<queue> 3.使用&#xff1a; #import <Foundation/Foundation.h> #include <cmath> #include <queue> using namespace std;int main(int argc, const char * argv[]) {autoreleasepool {NSLog("C标准…

云计算任务调度仿真01

云计算任务调度的研究大多数以来仿真研究&#xff0c;现梳理一些做过的代码研究 结果无数次的排错&#xff0c;终于finish with code 0 了 这个代码以来的是比较老的TensorFlow版本&#xff0c;我们都知道TensorFlow1.x和TensorFlow2.x之间有很大差别&#xff0c;但其实&#…

AspectJ 基础

前两篇AspectJ入门的文章大致的介绍了AspectJ,本文更完整、更详细的介绍AspectJ的基础知识。包括了切点、连接点、类型间声明及thisJoinPoint的基础知识&#xff0c;来更好的理解AspectJ的语法。 1 切点和连接点 挑选切点的时候&#xff0c;我们还可以通过方法的访问权限、是…

C++ 字符串哈希 || 字符串前缀哈希法

字符串Hash就是构造一个数字使之唯一代表一个字符串。但是为了将映射关系进行一一对应&#xff0c;也就是&#xff0c;一个字符串对应一个数字&#xff0c;那么一个数字也对应一个字符串。 用字符串Hash的目的是&#xff0c;我们如果要比较一个字符串&#xff0c;我们不用直接比…

Realm Management Extension领域管理扩展之安全状态

RME基于Arm TrustZone技术。TrustZone技术在Armv6中引入,提供以下两个安全状态: 安全状态(Secure state)非安全状态(Non-secure state)以下图表显示了在AArch64中的这两个安全状态以及通常在每个安全状态中找到的软件组件: 该架构将在安全状态运行的软件与在非安全状态运…

openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败

文章目录 openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败190.1 服务启动失败190.1.1 问题现象190.1.2 原因分析190.1.3 处理办法 openGauss学习笔记-190 openGauss 数据库运维-常见故障定位案例-服务启动失败 190.1 服务启动失败 190.1.1 问题现…