首页 » SEO优化 » phpfrm重启技巧_面试官当你误删某张数据库表的frm和ibd文件时该若何恢复

phpfrm重启技巧_面试官当你误删某张数据库表的frm和ibd文件时该若何恢复

访客 2024-12-03 0

扫一扫用手机浏览

文章目录 [+]

二、手动删除frm和ibd文件

rm -rf t.frm t.ibdrm -rf t2.frm t2.MYD t2.MYI

三、在没关闭数据库且会话窗口没关闭的情形下查看

select from t;select from t2;

phpfrm重启技巧_面试官当你误删某张数据库表的frm和ibd文件时该若何恢复 phpfrm重启技巧_面试官当你误删某张数据库表的frm和ibd文件时该若何恢复 SEO优化

四、新开会话窗口(未关闭数据库)

以下ERROR 29 (HY000): File './test/t2.MYD' not found (Errcode: 2 - No such file or directory)提示表明t2数据库文件破坏了

phpfrm重启技巧_面试官当你误删某张数据库表的frm和ibd文件时该若何恢复 phpfrm重启技巧_面试官当你误删某张数据库表的frm和ibd文件时该若何恢复 SEO优化
(图片来自网络侵删)

测试在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 mysqldmysql> select from t;ERROR 1146 (42S02): Unknown error 1146mysql> 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 -pmysql> select from t;ERROR 1017 (HY000): Unknown error 1017

拷贝后创造还是没有规复成功

十、数据库升级

升级后还是没有规复成功

mysql_upgrade -uroot -p --forcemysql> 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方面的内容,感兴趣的朋友可以关注下~

标签:

相关文章

单调栈php技巧_算法单调栈理解

而所谓 单调栈 则是在栈的 前辈后出 根本之上额外添加一个特性:从栈顶到栈底的元素是严格递增(or递减)。详细进展过程如下:对付单...

SEO优化 2024-12-05 阅读0 评论0

介绍假模板设计网站的陷阱与应对步骤

随着互联网技术的飞速发展,网络平台日益丰富,人们的生活和工作也变得越来越便捷。在享受便利的我们也应警惕那些潜藏在网络中的陷阱。其中...

SEO优化 2024-12-05 阅读0 评论0

介绍切纸机程序,智能高效背后的技术奥秘

在纸张加工行业,切纸机作为提高生产效率的关键设备,其程序代码的编写至关重要。本文将深入探讨切纸机程序代码的编写过程,揭示其背后的技...

SEO优化 2024-12-05 阅读0 评论0