zoukankan      html  css  js  c++  java
  • 使用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;

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

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

  • 相关阅读:
    C++中的名字重整技术
    Linux下C++开发常用命令
    《Effective C++(第三版)》 的55条建议
    我也介绍下sizeof与strlen的区别
    POJ
    HDU
    HDU-1754-I Hate It(单点更新+区间查询)
    HDU多校1003-Divide the Stones(构造)
    Just an Old Puzzle(2019多校1007)
    Idiomatic Phrases Game(最短路+注意坑点)
  • 原文地址:https://www.cnblogs.com/difs/p/13496377.html
Copyright © 2011-2022 走看看