点击上方“业余草”,选择“置顶公众号”

第一时间获取技术干货和业界资讯!

昨天,微信群里一位网友问到:“备份的 frm文件恢复,有的提示表不存在为什么”。关于这个问题,今天我们一起讨论一下!

根据网友的截图得知是他在恢复数据文件 .frm 时,报出的异常。error: 1146: Table ‘xxx’ doesn’t exist

error: 1146: Table ‘xxx’ doesn’t exist

这个的原因其实很简单,我先从头给你说起。

MySQL 数据库是具有持久化能力的。也就是说它的所有数据,其实最终都是存储在文件中的。如果你用的是 MyIsAM,则一张表数据文件有 3 个。

如果是 InnoDB,则一张表有 2 个数据文件。

且这些文件,一般在你安装 MySQL 目录中的 Data 目录中。

如果你忘记了安装的位置,或者忘记了配置的 Data 目录在哪里,则可以根据下面的语句,找出数据文件的存放目录。


上面这个截图,就是我的测试数据库对应的数据文件的存放目录。进入到我的 /usr/local/var/mysql/ 目录后,可以看到我的 xttblog 和 test 数据库目录。


根据列表文件中的后缀名都可以判断出,我使用的是 InnoDB 存储引擎。下面我们就以 InnoDB 为例,来说说数据文件的恢复教程。

首先,我们可以在其他测试环境,创建一个 test 数据库,并在里面创建 test_2019 数据表。里面插入一些测试数据,包含建立的索引等。然后,我们将 test_2019.ibd 和 test_2019.frm 两个文件复制到本地的其他目录。

要恢复 test_2019 这张表,我们先要用 SQL 创建出这种表。

主要是创建出一个同名的表,方便接下来的替换。字段内容无所谓。

表创建出来之后,我们就可以到 /usr/local/var/mysql/test/ 替换 test_2019.ibd 和 test_2019.frm 两个文件了。

接着重启 MySQL 服务即可了。

有些人可能少了,上面创建表这一步。直接复制表数据文件进行替换。结果就会导致上面的这个错误。虽然,你能通过 show tables 看到这张表,但是当你 select 这张表的时候,确报这张表不存在,error: 1146: Table ‘xxx’ doesn’t exist。

这也说明了针对 InnoDB 存储引擎,这样的直接 copy 复制的方式不能恢复数据表。但如果是 MyIsAM 存储引擎的话,直接复制是可以的(当然数据库版本必须要兼容)。这也是为什么一些文章说可以,一些文章说不可以。那是因为针对的存储引擎不对!

但是,我也很纳闷啊,数据文件都存在,为啥就提示表不存咋呢?

其实是可以通过 mysql-utilities 工具来恢复表结构!我是 Mac 电脑,安装命令如下:

恢复表结构的 SQL 就很简单了,看下面的命令:

注意,上面有两个端口。–port=3309 这个指定的端口是你本地未被占用的端口。–user=root 表示以 root 用户运行。tail -n +12 表示跳过文件开头的前 12 行。因为前 12 行都是注释。

最后,我要提示的一点是,注意数据库的版本。如果版本不一致,也有可能导致恢复失败!

mysql导入frm文件_MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程相关推荐

  1. mysql 导入.sql文件_MySQL导入.sql文件及常用命令

    MySQL导入.sql文件及常用命令 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令: mysql> so ...

  2. mysql 导入8msql文件_MySQL导入大容量SQL文件数据问题

    mysql在通过导入sql文件可能会出现下面二个问题: 1.如果sql文件过大,会出现"MySQL server has gone away"问题; - 2.如果sql文件数据有中 ...

  3. mysql导入ibdata文件_MySQL ibdata1文件迁移

    目的:主机系统/var目录快满了,经查询最大的文件是mysql的ibdata1文件,有17G大小,故需要迁移这个文件到其他目录下,以释放/var目录空间. 1.先备份下数据库是个好习惯 # mysql ...

  4. 快速mysql导入sql文件_mysql肿么快速从sql文件导入数据库

    我的个人实践是:phpmyadmin 导出 utf-8 的 insert 模式的 abc.sql ftp abc.sql 到服务器 ssh 到服务器 mysql -u abc -p use KKK(数 ...

  5. mysql导入dat文件_MySql导入和抽取大数量级文件数据

    一.情况介绍 需要处理的文件是一个3.41G的csv格式文件,现在需要把它导入数据库,进行后续处理和分析. 二.导入数据 该文件数据量庞大,无法用excel或者editplus++之类普通软件打开,于 ...

  6. mysql导入本地文件_Mysql透过txt文件导入本地数据_mysql

    有些时候可能需要从本地文件中导入数据到数据库中.mysql跟oracle一样也提供了相应的导入方式. 这几天刚好遇到过这样的需求,翻阅了一下文档找到相应的方法,记录一下: 数据库结构: mysql&g ...

  7. mysql导入csv文件_Mysql——将CSV文件导入表中

    本教程展示如何用LOAD DATA INFILE 将 CSV 文件导入MySQL表中. LOAD DATA INFILE 语句可以读取文本文件并导入数据库中. 在导入文件之前,你需要做如下准备:导入文 ...

  8. mysql 导入tsv文件_MySQL导出TSV格式文件

    可以使用mysqldump, 也可以使用mysql -e 使用mysqldump 因为要使用到 -T / --tab 参数, 需要先查看mysql设置的secure_file_priv mysql&g ...

  9. MySQL导入selectclass文件_MySQL执行Select语句将结果导出到文件的方法 – 疯狂的蚂蚁...

    然而也会遇到的场景是,需要执行一个SQL语句,然后将SQL语句的结果输出到文件: 方法一:使用MySQL的select * into outfile '/tmp/rs.txt' from tb_nam ...

最新文章

  1. Mysql常用函数之Concat函数
  2. 【BZOJ2797】[Poi2012]Squarks 暴力乱搞
  3. VTK:单元格内部对象CellsInsideObject用法实战
  4. QT的QRadioTuner类的使用
  5. 14、java中的集合(1)
  6. sqlite3的sql语句用法总结与SQLite生成.db-journal文件问题【原创】
  7. 【kafka】kafka duplicate brokers in replica assignment
  8. 嘿,我这里有一个 Survey!
  9. Avalon and Indigo CTP- March 2005提供公开下载!
  10. 软件方法上竞赛自测题答案
  11. IE主页简单篡改修复
  12. 如何批量压缩图片大小?教你3个批量压缩图片的方法
  13. 92-Kafka详解
  14. 中国的美女为什么这样少的原因
  15. 【Linux】嵌入式Linux系统的移植(上篇:交叉编译器、连接方式)
  16. 面试前夕,我建议你还是先来看看阿里和京东面试都问些啥?
  17. 探索AI助手ChatGPT实际应用场景
  18. 《游戏学习》| 3d网页小游戏 | 公路赛车 源码
  19. mac备忘录html,mac备忘录怎么备份与恢复|mac备忘录的使用方法
  20. opcclient源码OPC客户端DA源码(c#开发)

热门文章

  1. Day_04-数组,元组,列表
  2. html基本标签结构
  3. Android分包方案multidex
  4. PC-如何提高计算机的启动和关机的速度?
  5. XML、集合、JSP综合练习
  6. css 中 border 断线解决,简单实用
  7. 谷歌量子霸权论文;13项NLP任务夺冠的小模型ALBERT
  8. Windows10系统Python语言利用Pywin32模块模拟鼠标点击
  9. 详解C中volatile关键字
  10. python中numeric_Python中的Numeric