面试官:当你误删某张数据库表的frm和ibd文件时,该如何恢复?
浏览量: 次 发布日期:2023-10-06 23:15:43
面试官:当你误删某张数据库表的frm和ibd文件时,该如何恢复?
上海数据恢复之所以做这个实验,也是有个朋友误删了某张表的frm和ibd文件,然后要导入数据的时候一直提示无法重新创建这张表,这时候应该怎么解决呢?我们用一个实验来看看。。
以下ERROR 29 (HY000): File 'http://www.toutiao.com/a6780600319429575175/test/t2.MYD' not found (Errcode: 2 - No such file or directory)提示表明t2数据库文件损坏了
测试在t表表结构不存在的时候插入数据,发现可以插入成功
重启之前得在其他数据库新建t表结构,然后复制frm文件到原数据库即可
因为myisam不需要记录信息到数据字典,所以drop后重建就行了
此时t2表结构和数据已经恢复
可以发现修复不成功
考虑到在使用innoDB引擎的数据库中,其实际数据不是存放在数据库目录下的,而是放在一个叫ibdata1的文件内(默认配置时),其目录下只是放置了数据库的表及表结构相关的信息。这里在其他库上建立t表及数据,然后将这个表复制到test库下
拷贝后发现还是没有恢复成功
升级后还是没有恢复成功
因为共享表空间记录了信息
配置文件的一个参数:innodb_force_recovery
innodb_force_recovery 会影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行
select,create,drop操作,但insert,update或者delete这类操作是不允许的。
1、在mysql库创建t表及数据
2、停止数据库
3、复制frm和ibd文件
4、修改参数
5、两次启动数据库
启动mysql,再关闭mysql 把配置innodb_force_recovery = 6给删除了,然后启动mysql
连云港数据恢复6、drop 表后重建
提示ERROR 1813 (HY000): Tablespace '`test`.`t`' exists或ERROR 1813 (HY000): Unknown error 1813都是表空间问题
此时只需要删除对应的.ibd文件即可或者alter table t discard tablespace;来删除
1、误删数据文件时不要忙着重启数据库,先查看表是否存在,做一下备份
2、定期备份是很重要的
3、以上innodb表实际上只恢复了表结构,表数据并没有恢复,可以考虑通过mysqlbinlog进行回退
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~