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中类似,不做赘述)
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/l10n/p/13502738.html
Copyright © 2011-2022 走看看