解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程)

一、引言

因本人服务器物理迁移,而在迁移过程中没有把ibdata1共享表空间文件做备份。。。(下次一定要记得删除操作前要备份!!),部分数据文件损坏,此恢复操作必须基于frm和idb文件没有受损的情况下尽可能的恢复数据,当然,mysql服务也必须能正常启动后,所以需要手动恢复数据,此篇文章记录一下通过dbsake,依据mysql的 .frm 文件和 .ibd 文件恢复数据库接口 + 数据。一定要把数据库的frm文件和ibd文件第一时间建立备份,然后再执行后面的恢复操作,因为这是数据恢复最后的希望,如果再丢失,那就回天乏力了;

解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程)插图

二、安装dbsake

curl -s http://get.dbsake.net > dbsake
chmod u+x dbsake
./dbsake --version
安装路径/dbsake frmdump frm文件路径/***.frm

注:如果没有配置环境变量的话,那就是哪里执行的此命令,默认安装到当下,别处用需要指定安装路径;

调整innodb的参数
修改/etc/my.cnf文件,增加一个强制恢复相关的参数:
innodb_force_recovery=1
 //此参数网上搜了一下大体意思好像是暴力恢复级别,有0-6个级别;

 

三、依据 .frm 文件 恢复表结构

./dbsake frmdump /var/lib/mysql/test/*.frm  >>  /root/recover/test.sql

注: ./dbsake 代表我dbsake我安装到了此目录下

/var/lib/mysql/ 这个是my.conf 里面配置的datadir test 是数据库

/root/recover/ 这个存放是恢复生成的建表语句

1. 创建一个空的数据库 test2

2. 执行上面恢复的 .sql 文件,创建新的表

3. 释放表空间(discard),因为执行建表语句,mysql 的 datadir(my.conf中指定)下面会自动生成新的 .frm 文件和 .ibd 文件,所以要删除默认生成的 .ibd 文件,这个文件就是存放数据的文件,恢复数据依靠它;

SELECT concat('alter table ', table_name, ' discard tablespace;') FROM information_schema.tables	WHERE table_schema = 'test';

以上sql会生成批量的释放表空间的sql,拷贝出来执行,以此释放表空间

解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程)插图1

例如: alter table user discard tablespace; 执行完之后,datadir文件下的 user.ibd文件就被删除了。

安全起见,每个表执行单独一次如下sql命令

alter table table_name discard tablespace;

解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程)插图2

解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程)插图3

四、依据 .ibd 文件 恢复表数据

1. 把备份文件下面的 .ibd 文件 拷贝到 新创建的数据库文件下面,并且授权对应的权限都是 mysql     chown -R mysql:mysql 新的文件

[root@db01 world]# cp  *.ibd  /data/mysql/xxx_com/
[root@db01 world]# chown  -R  mysql. /data/

 

2. 重新加载表空间(import)

SELECT concat('alter table ', table_name, ' import tablespace;') FROM information_schema.tables	WHERE table_schema = 'test';

以上sql会生成批量的加载表空间的sql,拷贝出来执行,以此加载表空间

例如:alter table user import tablespace; 执行完之后刷新数据库,就可以看到备份数据了。

解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程)插图4

最后刷新数据库:flush privileges;

mysql的配置文件
innodb_force_recovery=1这个配置用完了记得改为0或者删除了,否则也会有问题。

至此,ibdata1文件已经完全恢复,MySQL Innodb数据库里面的各个数据表都可以正常打开了。

版权声明 1. 本网站名称:稻草人笔记   永久网址:https://www.facekun.com
2. 本文链接:解决 linux系统因误删ibdata1文件,导致MySQL Innodb数据库无法启动(恢复流程): https://www.facekun.com/arts/788.html
3. 部分文章内容来源于网络,仅作为学习展示之用,版权归原作者所有
4. 因部分文章网络流转次数较多,已无法追溯至原作者,若遗漏导致侵犯了您的权益,请您来信告知我,确认后会尽快删除。
5. 本站禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6. 如无特别声明本文即为原创文章仅代表个人观点,版权归《稻草人笔记》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
< <上一篇
下一篇>>