db2查看表结构_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.ibdrm -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 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方面的内容,感兴趣的朋友可以关注下~
db2查看表结构_mysql误删数据库表的frm文件和ibd文件?试试这样恢复相关推荐
- php mysql 查询数据库表结构_mysql查询数据库下的表结构?
方法:1.使用DESCRIBE命令以表格的形式展示表结构,语法"DESCRIBE 表名;":2.使用"SHOW CREATE TABLE"命令以SQL语句的形式 ...
- MySQL授权修改表结构_MySQL创建修改表结构
一.数据库的概述 1.什么是数据库 DB,DataBase 数据库:依照某种数据模型进行组织并存放到存储器的数据集合 DBMS,DataBase Management System 数据库管理系统:用 ...
- mysql的teqcher表结构_Mysql之库表操作(胖胖老师)
SQL 概念:结构化查询语言(SQL = Structured Query Language), 也是一种编程语言(数据库查询和程序设计语言),可以用于数据的存取及查询,更新,管理关系型数据库系统 p ...
- 更新mysql表结构,同步数据库表结构
按照某个库的表结构,更新其他库的表结构 #找到你们需要更新表结构修改的库/或者你自己定义个数组,把名字都列出来 master_db=($(mysql -h 127.0.0.1 -uroot -p123 ...
- mysql查询数据库结构_mysql查询数据库下的表结构
mysql查询数据库下的表结构 方法:1.使用DESCRIBE命令以表格的形式展示表结构,语法"DESCRIBE 表名;":2.使用"SHOW CREATE TABLE& ...
- java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...
- MySQL笔记创建表结构_mysql笔记
mysql端口号:3306 mysql默认管理员:root 进入本机mysql的命令:mysql -u 用户名 -p密码,例如:mysql -u root -p123 远程访问mysql的指令:mys ...
- ECMALL目录结构设置与数据库表
[Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛 ...
- 第100篇博文纪念 | C# 根据数据库表结构生成DOC数据库文档
一.目标 下图是我们要实现的目标: 二.实现 原理非常简单,首先制作样式模版,可以参照文章2,将排版好的Word另存为html,然后复制粘贴到aspx页面中,然后从数据库读取表以及字段信息,动态的插入 ...
最新文章
- 《几何与代数导引》例1.4——定比分点
- ASP.NET MVC:4 Ways To Prevent Duplicate Form Submission(转载)
- UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢
- Spring事务配置的五种方式 说明
- Linq 数据库操作(增删改查)
- 【高校宿舍管理系统】第七章 机构管理和功能菜单权限分配
- java 不写this_还没弄明白Java中的this关键字吗,那来看这篇就够了!
- Eclipse导出Java文件为.exe可执行文件
- layui 弹出框改变按钮颜色样式 自定义皮肤
- MVC之在实例中的应用
- nicescroll参数
- ML笔记 - 自然语言处理常用技术
- Tableau——通过数据透视表实现多表关联
- 图片显示的优化以及blit
- Navicat 15注册时报错“Rsa Public key not find“的解决办法
- Python3寻找相同图片
- 分享一个免费的计算机书籍资料网站(含有编程语言,算法,人工智能,游戏开发等书籍资料)
- 海上平台作业三维虚拟仿真
- Exynos_4412——WDT实验
- 云堡垒机的作用_阿里云堡垒机详解
热门文章
- linux 邮件客户端 n1,N1:下一代开源邮件客户端
- html 距离上边缘,HTML - CSS边缘恐怖; 边距在父元素之外添加空格
- c语言第四章作业,大学C语言第四章作业答案
- 一篇blog带你了解java中的锁
- Selenium之定位及切换frame(iframe)
- 动手写 framebuffer 画点、划线程序 (七)
- 简评file_get_contents与curl 效率及稳定性
- php中的函数调简单 传入参数即可,php函数与传递参数的简单示例
- spring mvc后端代码实现弹出对话框_Spring(3)——事务管理和MVC
- 计算机二级msoffice操作题如何评分,2017年计算机二级MSOffice操作题及答案解析