mysql删除了ibdata1后恢复数据库

不小心删除了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;导入表空间。
    

    

你可能感兴趣的:(数据库,mysql,服务器)