Mysql误删除DELETE数据找回操作指南

Mysql误删除DELETE数据找回操作指南

1. 背景

在使用Mysql时,可能会因为人为操作失误误删除了数据,如果没有及时备份就会带来严重的后果,影响业务。所以,本文将介绍在误删除DELETE数据后如何找回。

2. 解决方案

2.1. 使用undo日志

Mysql通过undo日志来记录所有事务的变更,包括DELETE语句。当误删除数据时,可以使用undo日志来还原数据。

步骤1:查看undo表空间的大小

SHOW GLOBAL VARIABLES LIKE 'innodb_undo_directory';

此命令将会返回undo表空间的路径。可以借助操作系统的空间占用命令来查看此路径下的空间占用情况,以判断是否需要临时增加硬盘空间。

步骤2:停止mysql实例

sudo service mysql stop

步骤3:修改mysql配置文件

将配置文件中的参数 undo_log_recovery 设置为 ON,开启undo日志恢复选项。

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
...
innodb_undo_log_recovery=ON
...

步骤4:启动mysql实例

sudo service mysql start

步骤5:进行数据恢复

使用如下命令打开mysql客户端,进入目标数据库。

mysql -u root -p
use xxx;

然后查找误删除的记录的binlog位置。可以查看mysql的binlog文件,找到删除语句执行时的位置。

SHOW BINARY LOGS;

查看具体binlog文件中的内容。

mysqlbinlog /var/log/mysql/mysql-bin.000XXX

找到误删除的记录的语句,复制该语句并在mysql客户端执行,即可将数据恢复。

2.2. 使用Binlog日志

在Mysql中,Binlog日志包括二进制日志和查询日志两种。其中,二进制日志记录了所有的增删改操作,它们都有TIME和对应的事件,因此我们可以通过解析Binlog日志来找回误删除数据。

步骤1:查听误删除数据的时间

因为binlog记录了所有操作的时间点,所以可以通过查听误删除数据的时间来定位到相应的binlog文件。

步骤2:使用mysqlbinlog解析binlog文件

使用mysqlbinlog工具解析掉所有的binlog文件,并找到误删除记录的位置。

mysqlbinlog /var/log/mysql/mysql-bin.000XXX

根据解析出来的binlog记录,构造SQL语句进行恢复。

2.3. 使用第三方工具

还可以使用一些第三方工具来完成误删除数据的恢复。例如,binlog2sql、mydumper等工具,都可以很好的完成数据恢复的工作,可以根据实际情况选择最适合的工具。

3. 总结

在Mysql中,误操作导致删除数据的情况难免发生,本文介绍了三种不同的解决方案:使用undo日志、使用Binlog日志和使用第三方工具,每个方案都有其适用的场景,具体选择哪种方案需要根据实际情况来判断。

4. 示例

示例1

小明误删了数据库中user表的一条记录,此记录信息如下:

id name sex
100001 小明明

使用undo日志来恢复此误删除的记录。

mysql -u root -p
use test;

查找删除记录的位置,并记录对应的binlog文件。

SHOW BINARY LOGS;
mysqlbinlog /var/log/mysql/mysql-bin.000XXX

然后根据找到的binlog中删除操作的语句进行恢复即可。

示例2

小红误删了student表中的一条记录,此记录信息如下:

id name score
100001 小红红 90

此时,我们可以使用第三方工具mydumper进行数据恢复。

apt-get install mydumper
myloader -u root -p xxx -d xxx -B xxx -t 32 -t xxx

注意:myloader命令中的选项参数需要根据实际情况进行填写。

等待mydumper恢复完成后,可到恢复后的数据库中查看误删除记录是否已经恢复。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql误删除DELETE数据找回操作指南 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL 使用SQL Server的PIVOT操作符创建交叉报表

    关于使用SQL Server的PIVOT操作符创建交叉报表的完整攻略,我会分成以下几个步骤来介绍: 确定数据源 定义PIVOT表达式 编写PIVOT查询语句 下面我就具体讲解一下这三个步骤。 1.确定数据源 在使用PIVOT操作符创建交叉报表之前,我们需要先确定一个数据源。碰巧我的电脑上有一个名叫“Sales”的数据库,它有一张名叫“Orders”的表,我们…

    database 2023年3月27日
    00
  • 配置java环境变量(linux mac windows7)

    以下是配置Java环境变量的攻略: 配置Java环境变量 Linux 安装Java 对于Ubuntu,Debian等系统,可通过包管理器安装Java: sudo apt update sudo apt install default-jdk 配置环境变量 打开 ~/.bashrc 或 ~/.bash_profile 文件,添加以下内容: export JAV…

    database 2023年5月21日
    00
  • jsp+servlet+javabean实现数据分页方法完整实例

    jsp+servlet+javabean实现数据分页方法完整实例攻略 前言 数据分页是Web开发中常见的功能需求之一。在Java Web应用开发中,使用jsp+servlet+javabean组合实现数据分页功能是常见的方式。本攻略将详细介绍如何使用jsp、servlet、javabean实现数据分页功能。完整示例实现代码可在GitHub代码库中查看。 前置…

    database 2023年5月21日
    00
  • SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解

    SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解 事务 事务是指将一组数据库操作作为一个不可分割的工作单元来执行的机制。在SQL Server中,我们可以使用 BEGIN TRANSACTION 开始一个事务,在其中进行一系列操作,最终使用 COMMIT 提交事务或者使用 ROLLBACK 回滚事务。 举个例子,当我们需要更新一条数据时,如果发现…

    database 2023年5月21日
    00
  • MySQL日期数据类型、时间类型使用总结

    MySQL日期和时间类型是数据库中常用的数据类型,本文将介绍它们的使用总结。 日期数据类型 MySQL日期数据类型用于处理日期信息,包括年份、月份和日期。常用的日期数据类型有DATE、YEAR和DATETIME。 DATE DATE用于存储日期类型。它的格式是YYYY-MM-DD,如2021-06-01。 示例: CREATE TABLE user( id …

    database 2023年5月22日
    00
  • CentOS 开机启动自定义脚本详解及实现

    CentOS 开机启动自定义脚本详解及实现 1. 概述 在 CentOS 系统中,开机启动脚本是自动运行的一些命令或程序,可以帮助我们在服务器启动时就进行一些必要操作。本文将详细介绍如何在 CentOS 系统中实现自定义开机启动脚本。 2. 实现步骤 步骤分为两部分,第一部分是创建开机启动脚本,第二部分是将脚本添加到系统服务中。 2.1 创建开机启动脚本 在…

    database 2023年5月22日
    00
  • Oracle中使用DBMS_XPLAN处理执行计划详解

    让我来详细讲解一下“Oracle中使用DBMS_XPLAN处理执行计划详解”的完整攻略。 什么是DBMS_XPLAN? DBMS_XPLAN是Oracle数据库中的一个包(Package),用于显示SQL语句的执行计划。使用DBMS_XPLAN可以更加方便地分析和优化SQL语句的执行效率。在默认情况下,Oracle数据库会为所有的SQL语句自动调用DBMS_…

    database 2023年5月21日
    00
  • 关于MYSQL中每个用户取1条记录的三种写法(group by xxx)

    MySQL中,如果我们需要在一张表中获取每个用户所对应的一条记录,可以采用group by xxx的方式实现。下面,我将详细讲解三种写法及其示例,帮助大家理清思路。 方法一:子查询 具体实现的流程如下所示: 首先,对数据表按照用户字段进行分组,使用group by语句,得到每个用户对应的记录集合 接着,在每个用户的记录集合中,取出一条记录。这里可以采用子查询…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部