使用frm,ibd文件恢复数据库文件共有3步,安装数据库,恢复表结构,恢复表数据
我实操的软件版本,mysql5.7.31,centos7.5,20200813,数据库展开597MB
一,安装数据库
此步略,
可以参照此篇文章
二,恢复表结构
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)
SELECTCONCAT('ALTER TABLE', table_name, 'DISCARD TABLESPACE;')FROMinformation_schema.TABLESWHERETABLE_SCHEMA= 'database_name';
生成形如以下的sql语句
ALTER TABLEQRTZ_BLOB_TRIGGERS DISCARD TABLESPACE;ALTER TABLEQRTZ_CALENDARS DISCARD TABLESPACE;ALTER TABLEQRTZ_CRON_TRIGGERS DISCARD TABLESPACE;ALTER TABLEQRTZ_FIRED_TRIGGERS DISCARD TABLESPACE;ALTER TABLEQRTZ_JOB_DETAILS DISCARD TABLESPACE;ALTER TABLEQRTZ_LOCKS DISCARD TABLESPACE;ALTER TABLEQRTZ_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)
SELECTCONCAT('ALTER TABLE', table_name, 'IMPORT TABLESPACE;')FROMinformation_schema.TABLESWHERETABLE_SCHEMA= 'database_name';
生成形如以下的sql语句
ALTER TABLEQRTZ_CALENDARS IMPORT TABLESPACE;ALTER TABLEQRTZ_CRON_TRIGGERS IMPORT TABLESPACE;ALTER TABLEQRTZ_FIRED_TRIGGERS IMPORT TABLESPACE;ALTER TABLEQRTZ_JOB_DETAILS IMPORT TABLESPACE;ALTER TABLEQRTZ_LOCKS IMPORT TABLESPACE;ALTER TABLEQRTZ_PAUSED_TRIGGER_GRPS IMPORT TABLESPACE;ALTER TABLEQRTZ_SCHEDULER_STATE IMPORT TABLESPACE;ALTER TABLE QRTZ_SIMPLE_TRIGGERS IMPORT TABLESPACE;
复制粘贴以上语句,批量执行
至此,完成数据库数据导入