MySQL通过frm 和 ibd 文件恢复数据过程 mysql数据库修复数据库

时间:2022-09-20 13:06:26

网上大部分的步骤是,经实测部分步骤是对的,下方详细说明。

1、停止mysql服务,添加innodb_force_recovery=1 ,启动mysql服务
2、创建新数据库,创建相同表结构的表(表结构必须相同)
3、执行alter table tb discard tablespace;
4、删除表的ibd文件(上方命令执行后会自动删除)
5、跨服务器复制表ibd文件
6、修改ibd文件权限

7、执行alter table tb import tablespace;

 

历程:

  阿里云服务器mysql进程cpu占用很高,导致数据库几乎无法连接。使用了kill 杀掉mysql进程后,启动的时候出现了问题。

  The server quit without updating PID file (/data/mysql/mysql.pid).

       error日志里面大致如下:

2018-06-27 18:59:10 31816 [ERROR] Plugin 'InnoDB' init function returned error.
2018-06-27 18:59:10 31816 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2018-06-27 18:59:10 31816 [ERROR] Unknown/unsupported storage engine: InnoDB
2018-06-27 18:59:10 31816 [ERROR] Aborting

启动不了,客户又急着用项目,你懂得,急坏了!  已是下班时间,客户一直催不能走啊......晚上8点了,还没搞定.................12点........................凌晨2点......饿坏了。

也不是没有进展,重命名,下图文件,mysql服务终于启动了。但是一些表,打开提示“table doesnt exist!”,难道数据库损坏了,吓坏了,怎办??

MySQL通过frm 和 ibd 文件恢复数据过程 mysql数据库修复数据库

保险起见,备份了mysql数据文件的整个文件夹。

 

然后把数据文件下载到本地的linux服务器中,启动mysql,报表不存在或表空间不存在等。反正还是有问题。

140410533292800 [ERROR] InnoDB: Could not find a valid tablespace file for

 

按照其他博客指示,执行了如下相关命令。

innodb_force_recovery= 4   还原级别

chown -R mysql:mysql /data/mysql     文件夹用户组

chmod -R 0777 /var/lib/mysql   读写权限

mysqladmin -u root -p flush-tables  刷新权限

 

还是有问题,还出现,table is readonly,表里面内容编辑不了了,同事解决了3小时没搞定。

后来得知,报table is readonly是因为 /etc/my.cnf 里面加了这个属性,innodb_force_recovery= *
注释掉就可以编辑表内容。
 
 
但是执行执行alter table tb import tablespace; 会报 table  not exist 等错误信息,还是不成功,甚是崩溃。
 
 
 
继续奋战中...........................................
 
天快亮了,受不了了,睡会吧........................
 
后来硬是通过在线的网站,手动复制粘贴导入了几张表。
 
还有3张表,几十万条数据,怎办,不可能手动操作。
 
 
缓了口气,想着用windows的mysql试试。 果不其然,三步走
 
  1. 创建表(注意ROW_FORMAT=compact     or ROW_FORMAT=DYNAMIC;)
  2. ALTER TABLE user_subscribe_app_info DISCARD TABLESPACE;

  3. 复制问题数据库的ibd文件到新建的数据库目录中
  4. ALTER TABLE user_subscribe_app_info IMPORT TABLESPACE;

全程不用重启mysql,即可打开表看到数据。 此时,数据回来了,松了一口气!

 

 恢复数据过程中有问题可联系 238611804@139.com

 

 版权所有,请勿转载!

 

更多mysql、mariadb数据库文件损坏,修复方法及思路,请查看:

MySQL通过frm 和 ibd 文件恢复数据过程 mysql数据库修复数据库