• 使用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;

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

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

  • 相关阅读:
    springboot 梳理2--配置druid数据源
    springboot 梳理1--简单整合mybatis
    springmvc 梳理13--@RequestBody 和 @ResponseBody
    springmvc 梳理12--拦截器
    springmvc 梳理11--restful
    如何快速成长为技术大牛?阿里资深技术专家的总结亮了
    一句话+一张图理解——数据结构与算法
    .net 开发人员的瓶颈和职业发展
    c# 对象相等性和同一性
    c# 连等的写法都做了什么?
  • 原文地址:https://www.cnblogs.com/difs/p/13496377.html
Copyright © 2020-2023  润新知