mysql误删数据库表的frm文件和ibd文件?试试这样恢复
概述
之所以做这个实验,也是有个朋友误删了某张表的frm和ibd文件,然后要导入数据的时候一直提示无法重新创建这张表,这时候应该怎么解决呢?我们用一个实验来看看。。
一、环境准备
CREATE TABLE `t` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL ) ENGINE=myisam DEFAULT CHARSET=utf8; insert into t values(1); insert into t values(2); insert into t values(3); insert into t2 values(1); insert into t2 values(2);
二、手动删除frm和ibd文件
rm -rf t.frm t.ibd rm -rf t2.frm t2.MYD t2.MYI
三、在没关闭数据库且会话窗口没关闭的情况下查看
select * from t; select * from t2;
四、新开会话窗口(未关闭数据库)
以下ERROR 29 (HY000): File './test/t2.MYD' not found (Errcode: 2 - No such file or directory)提示表明t2数据库文件损坏了
测试在t表表结构不存在的时候插入数据,发现可以插入成功
mysql> insert into t values(4); Query OK, 1 row affected (0.06 sec) mysql> select * from t;
五、备份t表
重启之前得在其他数据库新建t表结构,然后复制frm文件到原数据库即可
六、重新创建t2表及数据
因为myisam不需要记录信息到数据字典,所以drop后重建就行了
drop table t2; CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL ) ENGINE=myisam DEFAULT CHARSET=utf8; insert into t2 values(1); insert into t2 values(2);
此时t2表结构和数据已经恢复
七、重启数据库后测试
# systemctl restart mysqld mysql> select * from t; ERROR 1146 (42S02): Unknown error 1146 mysql> drop table t; ERROR 1051 (42S02): mysql> CREATE TABLE `t` ( -> `id` int(11) DEFAULT NULL -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ERROR 1050 (42S01): Unknown error 1050
八、测试一下修复表
可以发现修复不成功
mysql> check table t; mysql> repair table t;
九、不停机情况下拷贝其他库的t表
考虑到在使用innoDB引擎的数据库中,其实际数据不是存放在数据库目录下的,而是放在一个叫ibdata1的文件内(默认配置时),其目录下只是放置了数据库的表及表结构相关的信息。这里在其他库上建立t表及数据,然后将这个表复制到test库下
use mysql; CREATE TABLE `t` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into t values(1); insert into t values(2); insert into t values(3); insert into t values(4); # cp t.frm ../test/ # mysql -uroot -p mysql> select * from t; ERROR 1017 (HY000): Unknown error 1017
拷贝后发现还是没有恢复成功
十、数据库升级
升级后还是没有恢复成功
mysql_upgrade -uroot -p --force mysql> select * from t; ERROR 1017 (HY000): Unknown error 1017
十一、重新创建t表(引擎为myisam)(该方法不能恢复为innodb引擎,废弃)
因为共享表空间记录了信息
CREATE TABLE `t` ( `id` int(11) DEFAULT NULL ) ENGINE=myisam DEFAULT CHARSET=utf8; insert into t values(1); insert into t values(2); insert into t values(3); insert into t values(4); alter table t engine=innodb; drop table t;
十二、修改配置文件恢复(最终选择)
配置文件的一个参数:innodb_force_recovery
innodb_force_recovery 会影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行
select,create,drop操作,但insert,update或者delete这类操作是不允许的。
(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。 (SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。 (SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。 (SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。 (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。 (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
1、在mysql库创建t表及数据
use mysql; CREATE TABLE `t` ( `id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into t values(1); insert into t values(2); insert into t values(3); insert into t values(4);
2、停止数据库
?systemctl stop mysqld
3、复制frm和ibd文件
# cp -a ../mysql/t.frm . # cp -a ../mysql/t.ibd .
4、修改参数
?在my.cnf设置参数innodb_force_recovery = 6
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方面的内容,感兴趣的朋友可以关注下~
版权声明:
作者: freeclashnode
链接: https://www.freeclashnode.com/news/article-3472.htm
来源: FreeClashNode
文章版权归作者所有,未经允许请勿转载。
热门文章
- 【金玉满堂】2月7日|22.2M/S,V2ray/SSR/Clash(小猫咪)免费节点订阅链接每天更新
- 【心想事成】2月6日|20.1M/S,V2ray/SSR/Clash(小猫咪)免费节点订阅链接每天更新
- 【福纳八方】2月5日|22.7M/S,Clash(小猫咪)/V2ray/Shadowrocket(小火箭)免费节点订阅链接每天更新
- 【万象更新】2月11日|22.8M/S,Clash(小猫咪)/V2ray/SSR免费节点订阅链接每天更新
- 【大吉大利】2月1日|21.4M/S,Shadowrocket(小火箭)/Clash(小猫咪)/V2ray免费节点订阅链接每天更新
- 【蒸蒸日上】2月8日|22.2M/S,V2ray/Clash(小猫咪)/SSR免费节点订阅链接每天更新
- 【欢聚一堂】2月10日|21.9M/S,Shadowrocket(小火箭)/V2ray/Clash(小猫咪)免费节点订阅链接每天更新
- 【六畜兴旺】2月9日|18.9M/S,Clash(小猫咪)/SSR/V2ray免费节点订阅链接每天更新
- 【大富大贵】2月12日|23M/S,Clash(小猫咪)/SSR/V2ray免费节点订阅链接每天更新
- 1月26日|22.8M/S,SSR/V2ray/Clash(小猫咪)免费节点订阅链接每天更新
最新文章
- 2月20日|20.9M/S,SSR/Clash(小猫咪)/V2ray免费节点订阅链接每天更新
- 2月19日|22.2M/S,SSR/Clash(小猫咪)/V2ray免费节点订阅链接每天更新
- 2月18日|18.5M/S,V2ray/Clash(小猫咪)/Shadowrocket(小火箭)免费节点订阅链接每天更新
- 2月17日|21.8M/S,SSR/Clash(小猫咪)/V2ray免费节点订阅链接每天更新
- 2月16日|22.5M/S,V2ray/Clash(小猫咪)/SSR免费节点订阅链接每天更新
- 2月15日|18.5M/S,Clash(小猫咪)/Shadowrocket(小火箭)/V2ray免费节点订阅链接每天更新
- 2月14日|20.9M/S,V2ray/Shadowrocket(小火箭)/Clash(小猫咪)免费节点订阅链接每天更新
- 2月13日|18.6M/S,V2ray/Clash(小猫咪)/SSR免费节点订阅链接每天更新
- 【大富大贵】2月12日|23M/S,Clash(小猫咪)/SSR/V2ray免费节点订阅链接每天更新
- 【万象更新】2月11日|22.8M/S,Clash(小猫咪)/V2ray/SSR免费节点订阅链接每天更新