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中类似,不做赘述)
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/l10n/p/13502738.html
Copyright © 2011-2022 走看看