学新通技术网

Mysql 升级失败,导致表打不开,根据frm 和 ibd进行恢复

原创 107 124

最近升级MySQL5.7,  升级失败了,然后数据库中的表全部打不开了,还好有 frm ibd 文件可以进行恢复, 接下来记录下自己恢复的步骤,安心,安心,挺简单的

一、下载工具

    1. mysql-utilities

      #下载地址:
      wget https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5.tar.gz
      #解压 
      tar -zxvf mysql-utilities-1.6.5.tar.gz
      #进入 
      cd mysql-utilities-1.6.5
      编译
      python ./setup.py build
      python ./setup.py install
    2. Mysql链接工具

请使用任意工具, 只要能执行SQL就可以

二、备份  table data数据

       备份 MySQL数据集的文件夹, 请根据自己mysql的位置自己查, 备份要恢复的 表, 文件夹名称就是表名,里面的 frm 是表结构 ibd 是数据

三、开始操作

1. 进行你备份的表文件夹, 执行以下语句,将获的表结构

mysqlfrm --diagnostic 你表的名称

2. 然后使用获取的表结构进行创建表的时候,会出现错误,需要删除以下内容, 注意, 字段大小可能会有点不一样, 需自己修改, 如果使用了 JSON字段, 将会被工具替换成decimal(6,16), 记得自己修改成 json

 修改 decimal(6,16) -》 json

 删除 CHARACTER

 删除 SET

3. 创建完表后, 执行以下语句进行解锁 frm 和 ibd 的数据解绑

alter table 你表的名称 discard tablespace;

4. 解锁完成后,关闭MYSQL,

5. 关闭mysql后, 打开你刚创建的数据库,把原来要恢复的表 ibd 复制进行,进行替换,  注意, frm 不要复制进入

6 .复制进行以后,开启MYSQL,执行以下语句,进行 idb 和 frm 的绑定,然后重启mysql

alter table 你表的名称 import  tablespace;

7. 这时可以看到,数据已经恢复了

四、结束,已恢复

    直接查看表,数据都恢复了,并且能正常使用

 

本文出至:学新通博客

标签: