前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程

MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程

作者头像
业余草
发布2019-10-25 09:28:45
2.6K0
发布2019-10-25 09:28:45
举报
文章被收录于专栏:业余草业余草

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/xmt1139057136/article/details/93812537

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

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

640
640

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

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

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png
640
640

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

640
640

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

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

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

640?wx_fmt=png
640?wx_fmt=png

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

表创建出来之后,我们就可以到 /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 电脑,安装命令如下:

640?wx_fmt=png
640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档