不小心删除了ibdata1且清空回收站。网上各种搜索恢复数据库的方法,这是整理下来的东西.
windows系统下,mysql5.6版本
思路:
1. 数据库的表格文件存在且完整无损。
2. MyISAM、InnoDB两种类型的表结构恢复。
3. 创建同结构的空数据表。
4. MyISAM/InnoDB两种类型的数据恢复。
一:恢复表结构。
如果已知表结构,可以跳过此过程。
mysql中的表格数据存储引擎分为两种:MyISAM和IonnDB两种。不知道的同学可以看data文件夹下数据库文件夹下的表格文件。
同一种文件名后缀有:frm、MYD和MYI三种的是MyISAM类型表格。frm记录表结构,MYD存储表里的数据,MYI保存的索引。
同一种文件名后缀有:frm和ibd两种的是InnoDB类型表格。frm记录表结构,idb存储表里的数据.
1. MyISAM表格恢复表结构。(没有具体操作过)
a. 创建相同名称的表。表格engine=myisam,只创建一个数据列,数据可以是空。
create table test_myisam(id int(11) default)engine=myisam;
b. 停止mysql服务:net stop mysql
c. 将正常数据库中的test_myisam.frm文件复制一份副本,以备后用。将要恢复的表格test_myisam.frm复制正常数据目录下,替换现有的.frm文件。
d. 启动mysql数据库:net start mysql
e. 到相应的数据库下show tables;如果能看到表格继续下一步。
f. 执行desc test_myisam;会报错。
g. 创建和表名称一样的2个文件:.MYD和.MYI。文件可以是空内容。放在和.frm同一目录下。
h. 运行恢复数据命令:repair table test_myisam USE_FRM;
i. 再次运行:desc test_myisam;就可以看到表结构了。但表格依然不是正常数据。
j. 在cmd中将表结构导出:命令格式:mysqldump -h hostname -uroot -p database_name
2. InnoDB表格恢复表结构。(具体操作过)
a. 创建相同名称的表。表格engine=innodb,只创建一个数据列,数据可以是空。
create table test_innodb(id int(11) default)engine=innodb;
b. 停至mysql服务:net stop mysql
c. 修改mysql安装目录下的my.ini配置文件。修改恢复配置:innodb_force_recovery = 6保存。如果没有就添加一个,这个配置的值默认是0。
d. 将正常数据库中的test_innodb.frm文件复制一份副本,后面还要用的。将要恢复的表格test_innodb.frm复制正常数据库目录下,替换现有的.frm文件。
e. 启动mysql数据库:net start mysql
f. 到相应的数据库下show tables;如果能看到表格继续下一步。
g. 执行desc test_myisam;会报错。接下来要去查看日志。
h. 用记事本打开data文件夹下的.err文件,这个是日志文件。在文件中搜索“column”,大概在文件的倒数第3个[ERROR]中,大意是这个表只有1列,mysql中有5列之类的。
####重点是这个5。当然每个人的表格是不一样的,要根据自己的实际情况####
i. 停止mysql服务。恢复第c和第d个步骤。在innodb_force_recovery = 6前加注释符号#并保存。将.frm文件恢复正常。
j. 启动mysql服务。修改表格test_innodb表格添加到5列。
k. 停止mysql服务。重复第c到f步骤。
l. 执行desc test_myisam;就可以看到表结构了。但表格依然不是正常数据。
m. 在cmd中将表结构导出:命令格式:mysqldump -h hostname -uroot -p database_name
二、恢复数据。
1. MyISAM表格恢复数据。
a. 创建与要恢复的表格同结构的表。数据可以是空。
b. 停止mysql服务。将要恢复的表格的.MYD和.MYI,2个文件复制到正常数据库目录下,替换已有的文件。
c. 启动mysql服务。执行命令:repair table test_myisam use_frm;
2. InnoDB表格恢复数据
a.创建与要恢复的表格同结构的表。数据可以是空。
b.执行命令:alter table test_innodb discard tablespace;移除表空间。
c.停止mysql服务。将要恢复的表格的.ibd文件复制到正常数据库下。
e.启动mysql服务。执行命令:alter table test_innodb import tablespace;导入表空间。