首页
学习
活动
专区
圈层
工具
发布

mysql undo误删

基础概念

MySQL的UNDO日志是InnoDB存储引擎的一部分,用于支持事务的回滚操作。当事务对数据进行修改时,InnoDB会先将修改前的数据记录到UNDO日志中。如果事务需要回滚,InnoDB可以使用这些日志来恢复数据到修改前的状态。

相关优势

  1. 事务回滚:UNDO日志确保了事务的原子性,即事务要么全部成功,要么全部失败并回滚到初始状态。
  2. 一致性:通过UNDO日志,InnoDB可以维护数据库的一致性,即使在系统崩溃或异常情况下也能恢复到一致的状态。
  3. 并发控制:UNDO日志在多用户并发操作时,帮助实现读写锁的正确管理,提高系统的并发性能。

类型

  • 逻辑UNDO日志:记录的是数据的逻辑变化,而不是物理变化。
  • 物理UNDO日志:记录的是数据的物理变化,如页的修改。

应用场景

UNDO日志主要应用于以下场景:

  1. 事务回滚:当事务需要回滚时,使用UNDO日志恢复数据。
  2. 崩溃恢复:系统崩溃后,使用UNDO日志进行恢复,确保数据的一致性。
  3. 在线备份:在进行在线备份时,UNDO日志可以帮助恢复备份期间的数据变化。

问题及解决方法

误删UNDO日志

原因:

误删UNDO日志通常是由于操作失误或对MySQL内部机制不了解导致的。

解决方法:

  1. 立即停止MySQL服务:
  2. 立即停止MySQL服务:
  3. 检查UNDO日志目录:
  4. 检查UNDO日志目录:
  5. 如果发现误删,尝试从备份恢复:
    • 如果有定期备份,可以从备份中恢复UNDO日志。
    • 如果没有备份,可以尝试使用MySQL的innodb_force_recovery参数来恢复数据。
  • 设置innodb_force_recovery参数:
  • 设置innodb_force_recovery参数:
  • 添加或修改以下配置:
  • 添加或修改以下配置:
  • 启动MySQL服务:
  • 启动MySQL服务:
  • 尝试导出数据:
  • 尝试导出数据:
  • 恢复数据:
  • 恢复数据:
  • 修复表:
  • 修复表:

参考链接

通过以上步骤,可以尽量减少误删UNDO日志带来的影响,并尝试恢复数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql undo文件解析(2)

可使用如下代码快速得到回滚段的PAGE ID信息import structfilename = '/data/mysql_3314/mysqldata/undo_001'with open(filename...有兴趣的可以去看mysql源码: storage/innobase/trx/trx0rec.cc验证还是来使用代码进行愉快的验证吧.我们显示开启一个事务, 先不提交然后我们使用ibd2sql的debug...到这里了还是会有点成就感的, 但不多.总结mysql会自己去使用undo, 即使undo有问题了,重新初始化就行, 所以undo一般不咋重视. 后续也不在对undo进行解析了....如下为完整的undo文件结构图.参考: https://github.com/mysql/mysql-serverhttps://dev.mysql.com/doc/refman/8.0附源码github...:{undo_slot}")def _argparse():parser = argparse.ArgumentParser(add_help=True, description='解析mysql的undo

73221
  • Undo日志--mysql详解(十)

    Undo日志 如何保证事务里的原子性,当数据执行到一半需要回滚,或者数据库发生宕机,这时候就需要保证事务原子性,所以回滚应该只有发生新增,修改,删除时候才考虑,select并没有回滚操作。...这里除了trx_id外,还有roll_pointer,他本质上就是一个指针,指向对应的undo日志。...一种是更新主键的情况,会对该记录先进行delete mark操作,之后再插入新的数据,也就是说,每次都会产生两条undo log。...我们前面说过表空间是很多页组成,fil_page_index存储聚簇索引二级索引, fil_page_type_fsp_hdr存储表空间头部信息,这里存的就是fil_page_undo_log。...Undo日志是分为两大类,一类是可以提交直接删除,一类还是为了mvcc服务。在undo日志中,每个页分类不同的链表连接起来,insert undo,update undo链表。

    73510

    Oracle 短时间内误删数据,如何快速找回?(UNDO)

    首先,这个短时间内,通常是值 undo 段没有被覆盖,undo 保留的时间为多长呢? 1、需要看 undo_retention 的设置,默认为 900s,也就是 15 分钟。...2、需要看数据库的业务繁忙程度,如果1天切一个归档那种,3天前删的说不定都能用 UNDO 找回来。 好的,科普完了! 如果,两分钟前不小心误删了一笔数据,如何快速找回?...hh24:mi:ss'); 2、防止 UNDO 中数据被覆盖,先创建一张备份表将5分钟前数据备份 create table 用户.表_20201217 as select * from 用户.表 as...of timestamp to_timestamp('2021-09-12 10:30:00', 'yyyy-mm-dd hh24:mi:ss'); 3、用备份表和原表比对数据,将误删的数据插入原表中...注意:此方法仅适用于 delete 等 DML 误删误操作恢复,DDL 不支持! ----

    89910

    MySQL中undo日志介绍

    MySQL中undo日志介绍 概念介绍: 我们知道,MySQL中的redo日志记录了事务的行为,在服务器宕机的时候,可以通过重做事务来达到恢复数据的目的,然而,有的时候,事务还有回滚的需求,也就是说...,undo日志的段位于共享表空间内。...删除方式: 还有一点需要注意,事务共享表空间中写入undo日志的过程同样需要写入redo日志,事务一旦提交,也就意味着事务的持久性生效,那么undo日志则不被需要,但是innodb并不会把这个undo...日志直接删除,而是放在一个undo日志的链表中,到底什么时候删除取决于mysql的purge线程,这样做是为了避免其他的事务需要通过undo日志来得到这条记录之前的版本。...,具体的方法是,事务提交的时候,现将undo页放入链表中,然后判断这个undo页的使用空间是否小于75%,如果是的话,那么这个undo页就可以被重用,之后的undo日志就可以追加在当前undo日志的后面

    2.1K20

    MySQL误删数据如何恢复

    MySQL误删数据如何恢复面试官视角:这道题考察你生产环境应急处理能力和MySQL底层原理,80%的人会栽在"第一步就错了"面试标准回答面试官您好,MySQL误删数据的恢复我会严格按照"先止损,再恢复,.../binlog/mysql-bin.000001>recovery.sql--步骤4:在测试库验证恢复SQL无误后,导入生产库mysql-uroot-ptest_db误删整个库...恢复流程可视化技术难点与避坑指南⚠️常见坑点后果解决方案第一步就重启MySQL内存中的binlog缓存丢失,无法恢复绝对不要重启,先备份binlog直接在生产库执行恢复SQL二次误删,雪上加霜必须先在测试库验证忘记断开主从同步误操作同步到所有从库...-restore-file/var/lib/mysql/order_db/t_order.ibd恢复后数据一致性无法验证无法确认恢复的数据是否和误删前完全一致1.对比核心表的行数和主键范围2.对比关键业务指标...候选人️:我总结了一套“防误删三板斧”:措施作用落地方式安全更新模式禁止无WHERE/无索引的DELETE/UPDATEsetglobalsql_safe_updates=1写入配置文件延迟从库误删后可以从延迟从库立刻捞出数据搭建一个延迟

    32110

    Mysql-4-redo、undo、binlog

    https://www.jianshu.com/p/20e10ed721d01、binlog(归档日志):MySQL 自带的日志模块,是一个二进制格式的文件,用于"记录用户对数据库更新的SQL语句信息"...主要作用:主从复制、数据恢复2、undo_log(回滚日志):用于保证数据的原子性,记录数据修改之前的数据,可以用于回滚(记录旧数据) 主要作用:事务回滚、实现多版本控制...主要作用:当有增删改相关的操作时,会先记录到 Innodb 中,并修改缓存页中的数据, 等到 mysql 闲下来的时候才会真正的将 redolog...2、undo log:主要记录的是数据的逻辑变化,为了在发生错误时回滚之前的操作,需要将之前的操作都记录下来,然后在发生错误时才可以回滚。...undo log的作用: 1、用于事务的回滚(保证原子性); 2、用于MVCC(保证一致性);

    51410

    MySQL误删怎么办

    使用delete误删 处理 使用flashback工具,原理是修改binlog的内容,拿回原库重放。...举例 假设当前库的备份策略是一天一备,假如有人中午12点误删了一个库,恢复流程如下: 取最近一次的全备,也就是当天的0点 用备份恢复出一个临时库 从日志备份里,取出凌晨0点之后的日志 把这些日志除了误删数据的语句外...,最好就是只恢复出这张表,但是mysqlbinlog工具并不能指定只解析一个表的日志 ● 用mysqlbinlog解析出日志应用,应用日志的过程只能是单线程,MySQL的并行复制在这里用不上 加速的方法...通过 CHANGE MASTER TO MASTER_DELAY = N 命令,可以指定这个备库持续保持跟主库有 N 秒的延迟,比如你把 N 设置为 3600,这就代表了如果主库上有数据被误删了,并且在...MySQL实例 对于一个有高可用机制的MySQL集群来说,rm删除数据后,只要不是恶意的把整个集群删除,而只是删除了其中一个节点的数据的话,HA就会开始工作,选出一个新的主库,从而保证整个集群的正常工作

    2.3K40

    🍑 MySQL事务日志 undo log 详解

    (对于每个UPDATE,InnoDB存储引擎会执行一个相反的UPDATE,将修改前的行放回去) MySQL把这些为了回滚而记录的这些内容称之为撤销日志或者回滚日志(即undo log)。...此外,undo log会产生redo log,也就是undo log的产生会伴随着redo log的产生,这是因为undo log也需要持久性的保护。...2.Undo 日志作用: 作用一:回滚数据 用户对undo日志可能有误解:undo用于将数据库物理地恢复到执行语句或事务之前的样子。但事实并非如此。...3.Undo 日志存储结构: 回滚段与undo页: InnoDB对undo log管理采用段的方式,也就是回滚段(Rollback Segment)。...每个回滚段记录了1024个undo log segment,而在每个undo log segment段中进行undo页的申请。

    2K31

    MySQL 日志:undo log、redo log、binlog

    大家好,我是田哥 今天来和大家分享MySQL的三个日志文件,可以说 MySQL 的多数特性都是围绕日志文件实现,而其中最重要的有以下三种: redo 日志 undo 日志 binlog 日志 比如更新语句的流程会涉及到...在事务没提交之前,MySQL 会先记录更新前的数据到 undo log 日志文件里面,当事务回滚时,可以利用 undo log 来进行回滚。...事务处理过程中,如果出现了错误或者用户执 行了 ROLLBACK 语句,MySQL 可以利用 undo log 中的历史数据将数据恢复到事务开始之前的状态。...undo log 为每条记录保存多份历史数据,MySQL 在执行快照读(普通 select 语句)的时候,会根据事务的 Read View 里的信息,顺着 undo log 的版本链找到满足其可见性的记录...不过,在修改该 Undo 页面前需要先记录对应的 redo log,所以先记录修改 Undo 页面的 redo log ,然后再真正的修改 Undo 页面。

    3.3K43
    领券