美文网首页
记一次MySQL数据库恢复(附方案)

记一次MySQL数据库恢复(附方案)

作者: 码农突围 | 来源:发表于2022-01-04 17:51 被阅读0次

    恢复步骤概要

    • 备份frm、ibd文件
    • 如果mysql版本发生变化,安装回原本的mysql版本
    • 创建和原本库名一致新库,字符集都要保持一样
    • 通过frm获取到原先的表结构,通过的得到的表结构创建一个和原先结构一样的空表。
    • 使用“ALTER TABLE DISCARD TABLESPACE;”命令卸载掉表空间
    • 将原先的ibd拷贝到mysql的仓库下
    • 添加用户权限 “chown . .ibd”,如果是操作和mysql的使用权限一致可以跳过
    • 通过“ALTER TABLE IMPORT TABLESPACE;”命令恢复表空间
    • 完成

    实际操作

    1)备份文件

    mkdir /usr/local/backup
    cp * /usr/local/backup
    

    2)安装原本版本的数据库

    3)创建和原本一致的库

    创建和原本库名一致新库,字符集都要保持一样

    4)frm获取到原先的表结构

    这里使用dbsake读取frm的表结构

    (1)dbsake安装

    #下载
    curl -s get.dbsake.net > dbsake
    #添加执行权限
    chmod u+x dbsake
    

    (2)使用dbsake读取表结构

    #基础使用
    ./dbsake frmdump [frm-file-path]
    
    #将所有读取结果输入到文件中
    ./dbsake frmdump [frm-file-path] > <文件名>
    例如:
    ./dbsake frmdump student.frm teacher.frm > school.txt
    

    (3)恢复表结构

    文件中存放的是frm对应表结构的sql,直接复制出来运行就行了,此时数据库中所有的结构都恢复了,就是还没有数据

    5)卸载表空间

    在mysql中执行命令,卸载掉表空间

    ALTER TABLE <tabelName> DISCARD TABLESPACE;
    
    例如:
    ALTER TABLE student DISCARD TABLESPACE;
    ALTER TABLE teacher DISCARD TABLESPACE;
    

    6)拷贝原本的ibd,到新的库中

    (1)确定新数据库的数据存放位置

    在mysql中执行命令

    show variables like 'datadir';
    

    进入对应文件夹中,会有一个和需要恢复的数据库名完全一样的文件夹,进入文件夹

    (2)将ibd文件复制过来

    cp命令直接复制过来就行了

    7)命令恢复表空间

    在mysql执行命令,恢复表空间

    ALTER TABLE <tabelName> IMPORT TABLESPACE;
    
    例如:
    ALTER TABLE student IMPORT TABLESPACE;
    ALTER TABLE teacher IMPORT TABLESPACE;
    

    8)完成

    如果mysql有什么特别配置,还需要在添加一下,比如:原本的用户账户、原先配置的sql_mode等等

    来源:blog.csdn.net/qq_34886352/article/details/112469998

    相关文章

      网友评论

          本文标题:记一次MySQL数据库恢复(附方案)

          本文链接:https://www.haomeiwen.com/subject/zztccrtx.html