暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

MySQL误删数据怎么恢复(3)rm 误删数据文件恢复

原创 陈家睿 2021-11-29
5077

idb文件被误删除了,如何恢复


解决思路:实例在没有重启的状况下可以根据lsof恢复,这也是linux常用文件恢复的方法

恢复步骤(网络上有较多解决思路,这里简单记录,便于下次使用):

1、ps -ef|grep mysqld 找到mysql对应的进程号,这个时候访问出问题最好给mysql加个全局的锁(flush tables with read lock;)
2、lsof|grep deleted|grep *.ibd 看下这个文件还有木有
3、找到这个对应的文件拷贝回去

根据进程号找到目录
cd /proc/123940/fd (ps:123940就是ps -ef|grep mysqld 查到的进程号)
这个时候执行ll会出现文件号指向不同的文件,找到想要恢复的文件cp回去
cp /proc/123940/fd/70 > /data/mysql/data/xxx.ibd

4、修改文件权限到mysql,重启即可


具体操作

1、MySQL进程还在
MySQL进程存在的情况下,操作系统还保留进程打开的文件句柄,可以进入/proc/$进程pid/fd 目录下查到文件对应的句柄文件,通过cp 拷贝到原路径下

模拟故障,mysql正常运行,查看fd状态

删除ibdata文件

查看mysql的进程还在

FD指向的文件已经变成delete状态

登录数据库:
1、添加全局读锁同时开启super_read_only
2、修改强制脏页刷新,调整innodb_io_capacity 增加IO刷新参数
3、查找链接并组成kill 语句


确认脏页是否刷新完成
1、确保insert buffer 合并插入缓存等于1
2、确保这三个值不变
3、确保脏页数量为0确保插入、更新、删除为0

备份数据目录
cp -rf data data_bak
拷贝文件句柄
cp 10 /data/3306/data/ibdata1
赋权
chown mysql:mysql ibdata1
重启数据库
mysqld_safe --defaults-file=/etc/my.cnf






「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论