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日

相关文章

  • mysql sql语句性能调优简单实例

    MySQL SQL语句性能调优是MySQL优化的一个重要方面,通常是通过优化SQL语句,使其执行效率更高,提升MySQL数据库的性能。下面是一个MySQL SQL语句性能调优的简单实例攻略,包含以下步骤: 1. 编写测试SQL语句 在调优之前,需要编写测试SQL语句,并通过MySQL的EXPLAIN命令查看其执行计划,了解语句执行的具体过程。下面是一个简单的…

    database 2023年5月22日
    00
  • Redis – 介绍与使用场景

    Redis 每秒可以处理超过 10 万次读写操作,是已知性能最快的 key-value 数据库,称得上是必须要学会的知识。 简介 Redis 的全称是 Remote Dictionary Server,是一个使用 C 语言编写的、开源的(BSD 许可)高性能非关系型(NoSQL)的键值对数据库。 Redis 的数据是存储在内存中的,所以读写速度非常快,被广泛…

    Redis 2023年4月10日
    00
  • MySQL一键安装Shell脚本的实现

    MySQL一键安装Shell脚本的实现可以通过以下步骤完成: 1. 安装MySQL 在Linux系统中安装MySQL可以通过以下命令: sudo apt-get update sudo apt-get install mysql-server 安装完成后,需要启动MySQL服务并设置MySQL的root用户的密码: sudo systemctl start …

    database 2023年5月22日
    00
  • Redis相关操作

    Redis相关操作 Redis相关文档 一. Redis简单使用 ​ redis作为一款目前这个星球上性能最高的非关系型数据库之一. 拥有每秒近十万次的读写能力. 其实力只能用恐怖来形容. 1.安装redis redis是我见过这个星球上最好安装的软件了. 比起前面的那一坨. 它简直了… 直接把压缩包解压. 然后配置一下环境变量就可以了. 接下来, 在环…

    2023年4月16日
    00
  • MySql 基础知识-常用命令及sql语句

    一.常用mysql命令行命令   1,启动mysql服务 net start mysql.        停止mysql服务 net stop mysql   2,netstart -na|findstr 3306查看被监听的端口,findstr 用于查找后面的端口是否存在   3,在windowns中登陆mysql控制台的一般过程:            …

    MySQL 2023年4月12日
    00
  • mysql时间字段默认设置为当前时间实例代码

    来讲解一下mysql时间字段默认设置为当前时间的攻略。 在mysql中,如果我们需要在表中创建一个时间类型的字段,我们可以使用datetime或timestamp类型的数据来存储时间信息。在创建表的时候,我们可以设置默认值为当前时间,这样当我们插入数据时,如果没有为该字段赋值,系统将会自动为该字段设置当前时间,这样就可以省去手动设置时间的麻烦。 下面,我将分…

    database 2023年5月22日
    00
  • mysql数据库存储过程数据迁移案例与比较

    cursor 与 insert …select 对比:     cursor:安全,不会造成死锁,可以在服务运行阶段跑,比较稳定。   insert…select :速度快,但是可能造成死锁,相比cursor能够成倍提升,在服务停止的情况下迁移,速度快 数据迁移案例:   首先数据的迁移绝对不是一朝一夕能够快速迁移完成的 ,如果可以很快完成的 dum…

    MySQL 2023年4月16日
    00
  • MySQL循环语句实例教程 mysql while循环测试

    在mysql数据库中操作同样有循环语句操作,标准的循环方式: while 循环 、 loop 循环和repeat循环。还有一种非标准的循环: goto。 鉴于goto 语句的跳跃性会造成使用的的思维混乱,所以不建议使用。 这几个循环语句的格式如下:WHILE……DO……END WHILEREPEAT……UNTIL END REPEATLOOP……END LO…

    MySQL 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部