• 恢复删除了数据文件的表<MyISAM>


    在实际工作中,数据文件被RM -RF掉的情况比较少见,常见的是DROP TABLE ,TRUNCATE TABLE,DELETE FROM TABLE WHERE 1=1;

    如果遇到了RM掉数据文件时,千万不要慌张,HOLD住,停止所有的操作,保留现场。下面的方法可以找回丢失的数据文件。

    1:创建测试表,写入数据

    mysql>  create table tt(a int) engine=myisam;
    Query OK, 0 rows affected (0.13 sec)
     
    mysql>  insert into tt values(10),(20),(30);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
     
    mysql>  select * from tt;
    +------+
    | a    |
    +------+
    |   40 |
    |   50 |
    |   60 |
    +------+
    3 rows in set (0.00 sec)

    2:删除表数据文件,APP继续往表里写数据,写入是可以成功的(文件句柄依然存在)

    [root@brucetest6 fd]# rm -fr /var/lib/mysql/test/tt*

    mysql>  insert into tt values(400),(500),(600);
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
     
    mysql>  select * from tt;
    +------+
    | a    |
    +------+
    |   40 |
    |   50 |
    |   60 |
    |  400 |
    |  500 |
    |  600 |
    +------+
    6 rows in set (0.00 sec)

    3:找到MYSQL的进程PID

    [root@brucetest6 ~]# netstat -ntlp | grep mysqld 
    tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      31559/mysqld

    4:到/proc/PID/fd下找到被删除的文件

    [root@brucetest6 ~]# ll /proc/31559/fd|grep a.MY
    lrwx------ 1 root root 64 Oct 17 15:46 39 ->  (deleted)/var/lib/mysql/test/tt.MYI
    lrwx------ 1 root root 64 Oct 17 15:46 40 ->  (deleted)/var/lib/mysql/test/tt.MYD

    5:把文件拷贝回去

    [root@brucetest6 fd]# cp 39 /var/lib/mysql/test/tt.MYI
    [root@brucetest6 fd]# cp 40 /var/lib/mysql/test/tt.MYD
    [root@brucetest6 fd]# ll /var/lib/mysql/test/
    total 12
    -rw-rw---- 1 mysql mysql   65 Aug  7 17:12 db.opt
    -rw-r----- 1 root  root    42 Aug 21 15:14 tt.MYD
    -rw-r----- 1 root  root  1024 Aug 21 15:14 tt.MYI

    6:此时,还缺少一个tt.frm,这个好办,在另外的库里建一个表结构完全一样的表,把FRM文件拷贝过来就是,修改拷贝过来的文件属主信息。

    [root@brucetest6 fd]# ll /var/lib/mysql/test/
    total 24
    -rw-rw---- 1 mysql mysql   65 Aug  7 17:12 db.opt
    -rw-r----- 1 mysql mysql 8554 Aug 21 15:21 tt.frm
    -rw-r----- 1 mysql mysql   42 Aug 21 15:14 tt.MYD
    -rw-r----- 1 mysql mysql 1024 Aug 21 15:14 tt.MYI

    7:数据恢复。

    需要注意的是,在RM掉数据文件之后,不要做FLUSH TABLES或者重启数据库操作。

    相关博文:

    1:http://hcymysql.blog.51cto.com/5223301/1004810

    2:http://www.mysqlperformanceblog.com/2012/08/10/recovery-deleted-ibdata1/

  • 相关阅读:
    【ShardingSphere】ShardingSphere-JDBC 快速入门
    【Java】Java8新特性之重复注解与类型注解
    【Java】Java8新特性之时间和日期API
    【Java】Java8新特性之接口默认方法与静态方法
    【数据结构】堆
    【数据结构】二叉树
    JavaFx 创建快捷方式及设置开机启动
    【开源库推荐】#2 AndroidUtilCode Android常用工具类大全(附API使用说明)
    谈谈Android中的消息提示那些坑
    Android CheckBox控件去除图标 样式改造
  • 原文地址:https://www.cnblogs.com/zuoxingyu/p/2727843.html
Copyright © 2020-2023  润新知