zoukankan      html  css  js  c++  java
  • 数据文件物理误删除frm文件处理方法

    数据文件物理误删除frm文件处理方法
    
     
    需要注意的是MySQL 8.0的新特性中弃用了将表定义元数据文件.frm存储在文件系统上(8.0开始存放在数据字典表),原因是易受文件系统相关错误的影响(例如被误删除)、减少文件扫描的性能消耗等。所以本例误删除frm文件场景将用MySQL 5.7来演示。
    
    排查方法
    表的.frm文件被删除后,数据库将看不到该表,表也无法被操作
    mysql> create table scott_tab(name varchar(200));
     
    mysql> insert into scott_tab SELECT CONCAT(table_schema,'_',table_name) FROM  information_schema.TABLES;
    
    
    
    # rm -f scott_tab.frm
    
    # 数据库中无法被show查看
    mysql> show tables like 'scott_tab'G
    Empty set (0.01 sec)
    
    # 相关操作也无法被执行
    mysql> select * from scott_tab ;
    ERROR 1146 (42S02): Table 'sbtest.scott_tab' doesn't exist
    mysql> delete from scott_tab ;
    ERROR 1146 (42S02): Table 'sbtest.scott_tab' doesn't exist
    
    
     
    表.frm文件被删除后有两种方式进行修复:
    方法1,知道表结构情况下,在其它实例或测试库新建表后拷贝frm文件到故障实例
    方法2,忘记表结构情况下,需要利用备份文件还原到测试库然后再拷贝frm到故障实例
    
    方法1大致步骤如下
    ## 测试库中新建原样的表
    mysql> create table scott_tab(name varchar(20));
    
    ## 文件系统层拷贝测试库中建好的表结构到指定目录,注意 scott_tab.frm  所属的用户如果不是MySQL,需要改正过来
    # ls scott_tab*
    scott_tab.ibd
    # cp ../test/scott_tab.frm .
    # ls scott_tab*
    scott_tab.frm  scott_tab.ibd
    
    ## 数据库中验证
    mysql> use sbtest;
    mysql> show tables like 'scott_tab'G                                                                                               
     
    mysql> select * from scott_tab   G
     
    
    方法2 大致步骤如下:
    ## 以存在逻辑备份文件为例,将数据恢复到测试实例
    # mysql -P3307 -uroot -proot < all_db_with_data.sql
    
    ## 然后再将测试实例中恢复完成的frm文件拷贝到故障实例相应目录
    (操作步骤与方法1中类似,不做赘述)
  • 相关阅读:
    从发布订阅模式到redux(一)
    swipper的一个小坑
    代码精进之路读后感(二)
    代码精进之路读后感(一)
    编译提示没有对应的构造函数
    静态成员函数里面不能使用非静态的成员变量
    越精简越好
    MediaTypeListWidget->insertItem 添加的label没有填充单元格
    避免代码后期过分改动的方法
    Qt的index 用方法static_cast<CTableItem*>(index.internalPointer())取出来的值的成员都未初始化
  • 原文地址:https://www.cnblogs.com/l10n/p/13502738.html
Copyright © 2011-2022 走看看