美文网首页mysql
mysql5.6.29利用frm与ibd恢复数据

mysql5.6.29利用frm与ibd恢复数据

作者: WFF_FFW | 来源:发表于2019-01-28 17:19 被阅读18次

    环境

    系统:CentOS release 6.10
    mysql版本:5.6.29

    数据库因断电后,重启数据库后,打开表报错
    报错信息:ERROR 1008 (HY000): Can't drop table 'WFF_FFW'; database doesn't exist


    命令行输入.png
    navicat查看表数据.png

    判断:表损坏,但数据还在,恢复数据可以按以下方法解决:

    0).先备份下data目录下你所需要的数据库中表的信息。例如:数据库:WFF 表:WFF_FFW,数据库目录:/usr/local/mysql/data/WFF/

    mkdir /opt/backup/
    cp -a /usr/local/mysql/data/WFF/* /opt/backup/
    cd /usr/local/mysql/data/WFF/
    有两个文件:WFF_FFW.frm WFF_FFW.ibd

    1).删除表(如果存在).

    DROP TABLE IF EXISTS WFF_FFW; #此时,data/WFF库的目录下WFF_FFW.frm就不存在了;

    2).删除表的ibd文件

    rm -rf WFF_FFW.ibd

    3).执行sql文件(新建表结构,不含数据)

    CREATE TABLE WFF_FFW (
    level tinyint(1) NOT NULL,
    position varchar(255) NOT NULL,
    sort tinyint(3) unsigned DEFAULT '50' COMMENT '排序',
    )

    4).丢弃现有的表空间

    ALTER TABLE WFF_FFW DISCARD TABLESPACE; #Discard的意思就是从数据库detached,会删除ibd文件,保留frm文件。

    5).将之前备份中的文件覆盖至新的数据库中的表;

    \cp /opt/backup/WFF_FFW.* /usr/local/mysql/data/WFF/

    6).对覆盖后的表添加mysql用户赋权限

    chown -R mysql.mysql WFF_FFW.*

    7). 导入数据

    ALTER TABLE WFF_FFW IMPORT TABLESPACE;

    8)查看表数据;

    select * from WFF_FFW;

    随笔1:

    1.cp /usr/local/mysql/data/WFF/WFF_FFW.* /opt/backup/

    1. DROP TABLE IF EXISTS WFF_FFW;
    2. rm -rf WFF_FFW.ibd
    3. CREATE TABLE WFF_FFW (
      area_id varchar(10) NOT NULL COMMENT 'ID',
      lng varchar(20) DEFAULT NULL,
      lat varchar(20) DEFAULT NULL,
      level tinyint(1) NOT NULL,
      position varchar(255) NOT NULL,
      sort tinyint(3) unsigned DEFAULT '50' COMMENT '排序',
      PRIMARY KEY (area_id)
      )';
    4. ALTER TABLE WFF_FFW DISCARD TABLESPACE;
    5. \cp /opt/backup/WFF/WFF_FFW.* /usr/local/mysql/data/WFF/
    6. chown -R mysql.mysql WFF_FFW.*
    7. ALTER TABLE WFF_FFW IMPORT TABLESPACE;
      9.select * from WFF_FFW;
    随笔2

    mysql -uroot -p --skip-column-names -e "use WFF;show tables" > /opt/Script/tables #获取表名至tables文件中

    #!/bin/bash
    #本脚本只包含随笔1中5678的实现,1234目前还需要手动
    for tablename in `cat /opt/Script/tables`;do
        mysql -uroot -proot -e "use WFF;ALTER TABLE $tablename DISCARD TABLESPACE;"
        \cp /root/data/WFF/$tablename.* /opt/App/mysql/data/WFF/
        chown -R mysql.mysql /opt/App/mysql/data/WFF/$tablename.*
        mysql -uroot -proot -e "use WFF;ALTER TABLE $tablename IMPORT TABLESPACE;"
        done
    
    

    以上只是个人想法,如有更好的实现方式,可以留言分享下喽^v^
    参考地址:http://www.ywnds.com/?p=9354

    相关文章

      网友评论

        本文标题:mysql5.6.29利用frm与ibd恢复数据

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