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

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

65221
  • 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链表。

    65710

    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 不支持! ----

    84410

    MySQL中undo日志介绍

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

    2K20

    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(保证一致性);

    43910

    MySQL误删怎么办

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

    2.2K40

    🍑 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页的申请。

    1.8K31

    MySQL误删除文件场景

    同事反馈说某个测试的MySQL数据库误删除了ibdata1文件,导致库启动不了,而且没做备份,能不能恢复?...如果误删除文件,但是数据库没进行过重启,只要删除的文件句柄还在系统中,就可以进行恢复,可以参考《Linux恢复误删文件的操作》。但是这套环境中,数据库进程已经被删除了,lsof未找到误删除的文件。...Version: '5.7.32-log'  socket: '/mysql/3306/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)...因此针对MySQL 5.7,如果误删除ibdata1,不需要数据的前提下,可以再删除ib_logfile0、ib_logfile1,让MySQL可以自动创建这几个文件,带起数据库。...connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) 我觉得应该比较接近答案了,但是受限于进度,

    1.7K30
    领券