前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0001.MySQL通过句柄恢复文件

0001.MySQL通过句柄恢复文件

原创
作者头像
你要的小米吖
修改2021-08-18 10:43:18
1.1K0
修改2021-08-18 10:43:18
举报

MySQL误删除ibd文件,通过句柄恢复:

1.删除物理ibd文件,sbtest2.ibd已经被删除

2.此时不要关闭mysql服务,查询到mysql的句柄号,通过句柄号恢复ibd文件

步骤1:通过mysql pid进程号在proc进入到mysql当前使用的进程,并且找到删除ibd文件的句柄号

代码语言:txt
复制
通过ps命令查询出来mysql的pid
ls -alh /proc/$(cat /data/mysql/mysqld3306.pid)/fd

步骤2:如图看到sbtest2.ibd这条记录对应的句柄号是83

步骤3:为了避免进一步数据写入,造成进一步错误,暂时将数据库设置为只读,或者锁表

3.现在记录一下表的记录数和校验值,以便跟恢复后的数据比较:

4.现在通过文件句柄找到消失的数据文件,并将其复制出来(此处注意磁盘空间)

代码语言:txt
复制
[root@localhost proc]# cat /proc/$(cat /data/mysql/mysqld3306.pid)/fd/83 >/tmp/sbtest2.ibd
[root@localhost proc]# ll /tmp/sbtest2.ibd 
-rw-r--r--. 1 root root 134217728 8月  16 22:00 /tmp/sbtest2.ibd
[root@localhost proc]# ls -lh /tmp/sbtest2.ibd 
-rw-r--r--. 1 root root 128M 8月  16 22:00 /tmp/sbtest2.ibd

5.现在将文件拷贝回去:

代码语言:txt
复制
[root@localhost proc]# cp /tmp/sbtest2.ibd /data/mysql/data/thn/
c[root@localhost proc]# cd /data/mysql/data/thn/
[root@localhost thn]# chown mysql.mysql sbtest*
[root@localhost thn]# /etc/init.d/mysqld restart
Shutting down MySQL..... SUCCESS! 
Starting MySQL.. SUCCESS! 

代码语言:txt
复制
mysql> use thn
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> checksum table sbtest2;
+-------------+------------+
| Table       | Checksum   |
+-------------+------------+
| thn.sbtest2 | 1112280794 |
+-------------+------------+
1 row in set (0.37 sec)

结论:为了验证拷贝回来的是否正常使用,将数据库重启了一下,

注:第五步拷贝回去的时候也可以将数据库关闭,之后在拷贝回去,然后启动数据库

场景为客户环境误操作之后在本地进行还原演练,模拟误删之后的恢复操作!

原理:

Linux 删除文件其实是减少了对文件的使用数,当使用数降为 0 时,才正式删除文件。

所以当我们执行 rm 时,由于 ibd 文件还在被 MySQL 使用,文件其实并没有被真实删除,只是没办法通过文件系统访问。通过 proc 查找文件句柄,可以让我们追踪到消失的文件。

抛半砖以求全玉,班门弄斧,不胜惶恐!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档