使用frm,ibd文件恢复数据库文件,mysql5.7.31,centos7.5,20200813

使用frm,ibd文件恢复数据库文件共有3步,安装数据库,恢复表结构,恢复表数据

我实操的软件版本,mysql5.7.31,centos7.5,20200813,数据库展开597MB

 

 

一,安装数据库

此步略,

可以参照此篇文章

CentOS7 64位下MySQL5.7安装与配置

https://www.cnblogs.com/hello-/articles/9061836.html

 

二,恢复表结构

2.1如果你是数据库完好想迁移数据库数据的,

直接导出表结构sql文件,到新库运行就行了,我就是这种情况

 

2.2数据库损坏,只有frm文件

在恢复模式下导出表结构sql文件

1.创建一个新数据库,然后创建一个和需要恢复的表的同名表,且引擎必须为InnoDB(即引擎为InnoDB的t_user表,其结构无所谓,字段数量相同就行),
2.关闭数据库服务(service mysqld stop),然后拿原来的desktop_document2.frm替换新建的数据库中的desktop_document2.frm(/var/lib/mysql/hue/desktop_document2.frm)
3.接着对配置文件(my.cnf)设置innodb_force_recovery = 6,重启数据库,desc desktop_document2查看表结构
导出表结构: mysqldump -uroot -pxxx -d hue desktop_document2>db.sql;
如果出现权限问题,记得 chmod 700 /var/lib/mysql/hue;chown -R mysql:mysql /var/lib/mysql

 

通过以上任意一步,得到表结构sql文件,在新数据库执行该sql文件,即可导入数据库结构,

继续往下执行

 

三,恢复表数据

我们此时已经导入所有表的完整的表结构,并且重启数据库,将数据库调整回正常模式,

此时innodb_force_recovery=0

往下进行分离表空间的操作

3.1分离表空间

执行以下语句,批量生成可供执行的sql语句(修改database_name)

SELECT
    CONCAT( 'ALTER TABLE ', table_name, ' DISCARD TABLESPACE;' ) 
FROM
    information_schema.TABLES 
WHERE
    TABLE_SCHEMA = 'database_name';

  生成形如以下的sql语句

ALTER TABLE QRTZ_BLOB_TRIGGERS DISCARD TABLESPACE;
ALTER TABLE QRTZ_CALENDARS DISCARD TABLESPACE;
ALTER TABLE QRTZ_CRON_TRIGGERS DISCARD TABLESPACE;
ALTER TABLE QRTZ_FIRED_TRIGGERS DISCARD TABLESPACE;
ALTER TABLE QRTZ_JOB_DETAILS DISCARD TABLESPACE;
ALTER TABLE QRTZ_LOCKS DISCARD TABLESPACE;
ALTER TABLE QRTZ_PAUSED_TRIGGER_GRPS DISCARD TABLESPACE;
ALTER TABLE QRTZ_SCHEDULER_STATE DISCARD TABLESPACE;

复制粘贴以上语句,批量执行

 

可能会提示外键问题,

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails

在第一行放上以下语句解决

SET foreign_key_checks = 0;

 

 

3.2导入表空间

参照分离空间时的操作,先使用以下语句批量生成执行语句(修改database_name)

SELECT
    CONCAT( 'ALTER TABLE ', table_name, ' IMPORT TABLESPACE;' ) 
FROM
    information_schema.TABLES 
WHERE
    TABLE_SCHEMA = 'database_name';

 生成形如以下的sql语句

ALTER TABLE QRTZ_CALENDARS IMPORT TABLESPACE;
ALTER TABLE QRTZ_CRON_TRIGGERS IMPORT TABLESPACE;
ALTER TABLE QRTZ_FIRED_TRIGGERS IMPORT TABLESPACE;
ALTER TABLE QRTZ_JOB_DETAILS IMPORT TABLESPACE;
ALTER TABLE QRTZ_LOCKS IMPORT TABLESPACE;
ALTER TABLE QRTZ_PAUSED_TRIGGER_GRPS IMPORT TABLESPACE;
ALTER TABLE QRTZ_SCHEDULER_STATE IMPORT TABLESPACE;
ALTER TABLE QRTZ_SIMPLE_TRIGGERS IMPORT TABLESPACE;

复制粘贴以上语句,批量执行

至此,完成数据库数据导入

 

posted @ 2020-08-13 14:49  MoreJewels  阅读(475)  评论(0编辑  收藏  举报