码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 顺带来聊聊MySQL误删ibdata数据文件的恢复


    看腻了就来听听视频演示吧:https://www.bilibili.com/video/BV1m34y1A7tV/

    在MySQL进程未重启时可以恢复

    # 误删数据文件和重做日志文件
    [root@dba ~]# cd /mysqldata/data/
    [root@dba data]# ll ib*
    -rw-r----- 1 mysql mysql      809 Nov 19 03:22 ib_buffer_pool
    -rw-r----- 1 mysql mysql 79691776 Feb 23 07:17 ibdata1
    -rw-r----- 1 mysql mysql 50331648 Feb 23 07:18 ib_logfile0
    -rw-r----- 1 mysql mysql 50331648 Feb 23 07:18 ib_logfile1
    -rw-r----- 1 mysql mysql 12582912 Feb 23 07:06 ibtmp1
    [root@dba data]# rm -f ib*
    [root@dba data]# ll ib*
    ls: cannot access ib*: No such file or directory
    
    # 查找MySQL进程pid
    [root@dba data]# netstat -ntlp | grep mysqld
    tcp6       0      0 :::3306                 :::*                    LISTEN      7424/mysqld         
    # 确认进程具柄还没释放
    [root@dba data]# ll /proc/7424/fd | egrep 'ib_|ibdata'
    lrwx------ 1 root root 64 Feb 23 07:33 10 -> /mysqldata/data/ibdata1 (deleted)
    lrwx------ 1 root root 64 Feb 23 07:33 4 -> /mysqldata/data/ib_logfile0 (deleted)
    lrwx------ 1 root root 64 Feb 23 07:33 9 -> /mysqldata/data/ib_logfile1 (deleted)
    
    # 前端关闭业务或甚至只读模式
    flush tables with read lock;
    # 将脏页尽快刷入磁盘
    set global innodb_max_dirty_pages_pct = 0;
    # 查看binlog日志写入情况,确保File和Position值没变化
    show master status;
    # 查看InnoDB状态信息确保脏页已刷入磁盘
    show engine innodb status\G;
    
    # 将未释放的具柄号复制回原目录文件
    [root@dba data]# cp /proc/7424/fd/10 /mysqldata/data/ibdata1
    [root@dba data]# cp /proc/7424/fd/4 /mysqldata/data/ib_logfile0
    [root@dba data]# cp /proc/7424/fd/9 /mysqldata/data/ib_logfile1
    # 修改用户属性
    [root@dba data]# chown mysql.mysql ib*
    [root@dba data]# ll /mysqldata/data/ib*
    -rw-r----- 1 mysql mysql 79691776 Feb 23 07:41 /mysqldata/data/ibdata1
    -rw-r----- 1 mysql mysql 50331648 Feb 23 07:41 /mysqldata/data/ib_logfile0
    -rw-r----- 1 mysql mysql 50331648 Feb 23 07:41 /mysqldata/data/ib_logfile1
    
    # 解锁,看是否需要重启MySQL服务
    mysql> unlock tables;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    原理:利用操作系统对误删除文件进程的具柄尚未释放

    # 窗口一:创建文件,有进程一直在使用该文件
    [root@dba ~]# echo  "hello  py" > /tmp/testdelete.py
    [root@dba ~]# cat  >> /tmp/testdelete.py
    
    # 窗口二:删除文件
    [root@dba ~]# ll /tmp/testdelete.py 
    -rw-r--r-- 1 root root 10 Feb 23 07:51 testdelete.py
    [root@dba ~]# rm -f /tmp/testdelete.py 
    [root@dba ~]# ll /tmp/testdelete.py 
    ls: cannot access testdelete.py: No such file or directory
    
    # 找到还没删除的进程进行文件cp恢复,PID为服务进程
    [root@dba ~]# lsof | grep deleted | grep testdelete.py
    cat       15276           root    1w      REG              253,0        10   35364283 /tmp/testdelete.py (deleted)
    [root@dba ~]# ll /proc/15276/fd
    total 0
    lrwx------ 1 root root 64 Feb 23 07:53 0 -> /dev/pts/1
    l-wx------ 1 root root 64 Feb 23 07:53 1 -> /tmp/testdelete.py (deleted)
    lrwx------ 1 root root 64 Feb 23 07:53 2 -> /dev/pts/1
    
    # 恢复
    [root@dba ~]# cp /proc/15276/fd/1 /tmp/testdelete.py
    
    # 验证
    [root@dba ~]# ll /tmp/testdelete.py 
    -rw-r--r-- 1 root root 10 Feb 23 08:03 /tmp/testdelete.py
    [root@dba ~]# cat /tmp/testdelete.py 
    hello  py
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    MySQL的binlog系列和奇技操作:

    先来聊聊MySQL的binlog文件解析
    接着说说mysqlbinlog解析工具如何做数据恢复
    再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能
    接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
    借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
    再来介绍另一个binlog文件解析的第三方工具my2sql
    顺带来聊聊MySQL误删ibdata数据文件的恢复
    MySQL大表直接复制文件的copy方式

  • 相关阅读:
    Flink Icerberg 离线输仓-维度建模过程(二)
    面试官:BIO、NIO、AIO是什么,他们有什么区别?
    【ArcGIS处理】行政区划与流域区划间转化
    2024最佳steam搬砖项目,日入5000,保姆级教程,小白无脑操作
    变分自编码器(VAE)公式推导
    云原生微服务治理 第四章 Spring Cloud Netflix 服务注册/发现组件Eureka
    每天一技:全面了解CC攻击和防范策略
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    南京邮电大学电工电子(数电)实验报告——二进制全加器 & 数据选择器 & 集成触发器
    Si3262 集成低功耗SOC 三合一智能门锁应用芯片
  • 原文地址:https://blog.csdn.net/suoyue_py/article/details/133604799
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号