网站之家技术交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1356|回复: 0

mysql数据库MYI文件丢失,innodb、myisam通过frm文件恢复表结构

[复制链接]
发表于 2014-5-19 07:10:22 | 显示全部楼层 |阅读模式
MySQL数据库中常用的两中引擎:有时候我们对数据库升级或者是迁移的时候,不小心导致数据结构的破坏。
mysql> desc tempinnodb;
ERROR 1146 (42S02): Table 'cmcchr.tempinnodb' doesn't exist

我们从自己以前的数据库拷贝过来的数据竟然提示不存在此表。这种情况其实是可以恢复的,下面来详细看看


Innodb表结构的恢复:
创建一个新的库;
create database cmcchr charset utf8;


use cmcchr;


create table tempinnodb (id int(11) not null) engine=innodb charset utf8;
//这条语句中的engine是必须使用innodb引擎,因为我们恢复的是innodb引擎,设定相应的字符集和以前的表一致。


ok,到现在为你在你的data文件目录中的cmcchr中找到有一个tempinnodb.frm的文件,比如说你以前的库中要恢复的也是一个叫tempinnodb.frm的文件,你只需要把tempinnodb.frm文件拷贝到cmcchr中覆盖,就可以恢复其表结构。




myisam表结构的恢复


mysql> USE tmp;mysql> SHOW CREATE TABLE test;ERROR 1017 (HY000): Can't find file: 'test' (errno: 2)
提示找不到文件,下面我们来处理错误,在tmp数据目录下建立 test.MYI 和 temp.MYD 文件,然后我们使用mysql自带
的修复表命令
1mysql> repair TABLE test USE_FRM;
+
------------------+--------+----------+----------+
| TABLE            | Op     | Msg_type | Msg_text |
+------------------+--------+----------+----------+|
test
.test_myisam | repair | STATUS   | OK      
|
+------------------+--------+----------+----------+
1 row INSET(0.00 sec) mysql>SHOWCREATETABLE test \G;*************************** 1. row **********TABLE: testCREATETABLE: CREATETABLE`test`(`dd` varchar(1)NOTNULL,`cc` varchar(1)NOTNULL) ENGINE=myisam DEFAULT CHARSET=utf81 row INSET(0.00 sec)ERROR:No query specifiedmysql>INSERTINTO test (dd,cc) value(1,2);Query OK,1 row affected (0.00 sec)mysql>SELECT*FROM test;+------+| dd   | cc+------+|    1 |2+------+1 row INSET(0.00 sec


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|网站之家技术交流论坛 ( 粤ICP备09092995号 )

GMT+8, 2024-5-16 23:02 , Processed in 0.110858 second(s), 9 queries , File On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表