一、前言


前段时间在服务器部署java项目时为了兼容项目把MySQL5.7数据库换成了MySQL8.0,但是在删除MySQL5.7时,忘记备份原数据库文件了。但是我并没有删除数据文件,于是我需要根据mysql的data中保存的.frm、.ibd文件来恢复原数据库数据。


二、遇到问题


2.1 MySQL数据库的每张表都会以.frm和.ibd文件格式(InnoDB引擎)或.frm、.MYI和.MYD文件格式(MyISAM引擎)保存在data中,如果数据表使用的是MyISAM引擎,则恢复非常简单,只需要将包含数据文件的文件夹放到对应的位置即可,如果是InnoDB引擎,会复杂很多。我要恢复的数据库中两种结构都有。。。


2.2 网上教学的方法基本都适用于MySQL5.7,而MySQL8.0会遇到很多麻烦,就算是更简单的MyISAM引擎,也没有成功。包括后面使用MySQL Utilities 也会遇到问题,因此,我的建议是:1.使用MySQL5.7来恢复数据,备份sql文件,再重新安装MySQL8.0。2.如果你有另外一台电脑或服务器或虚拟机,或者你会使用docker,则可以在另一个系统中下载MySQL5.7进行操作。其中我比较推荐使用docker进行操作。(如果你有linux基础,可以稍微入门docker即可)


三、MyISAM引擎恢复数据


3.1 准备MySQL5.7的环境,根据我上面说的几种条件,符合一个即可。我这里介绍使用docker的方式。


3.11 拉取MySQL5.7镜像

$ docker pull mysql:5.7

3.12 创建一个数据库实例 挂载容器卷 设置端口号 设置root密码

$ docker run -d -p 3308:3306  -v /yune/mysql/log:/var/log/mysql -v /yune/mysql/data:/var/lib/mysql -v /yune/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql:5.7

3.13 将要恢复文件夹放到msyql的data中,3.12中我给容器挂载了容器卷,因此我的目录就是宿主机的 /yune/mysql/data 下。

$ sudo cp 要恢复的文件地址 /yune/mysql/data

3.14 完成之后可以进入MySQL查看,发现你的数据库已经恢复了

$ docker exec -it mysql /bin/bash
# mysql -uroot -p123456
  show databases;

四、InnoDB引擎恢复数据


4.1 如果你的数据库中既包含MyISAM引擎的表也包含InnoDB引擎的表,就会发现通过上面的方式只能恢复MyISAM那部分表,而InnoDB的表只有表名而没有表结构和数据。如果想要恢复InnoDB的表,需要借助工具MySQL Utilities,如果没有可以去官网下载。接下来的操作借助可视化工具会简单,因此下面使用navicat + windows命令行的方式操作。


4.2 使用navicat远程连接数据库,根据数据库名创建要恢复的数据库,比如我这里要恢复apiadmin


打开数据库表,发现没有成功恢复的表只有表名,没有结构和数据。



4.3 找到需要恢复表的镜像文件 复制.frm文件路径

在这里插入图片描述
4.4 windows命令行执行下面代码,将frm文件转成sql文件。

mysqlfrm --server=root:123456@192.168.2.29:3309 frm文件路径\unit.frm > sql文件路径\unit.sql --diagnostic --port=3307

如果提示mysqlfrm是未知命令说明MySQL Utilities 没有安装或环境变量没有配好。


–server连接你的数据库 如果是msyql8这里会因为加密方式报错。


4.5 打开转成的sql文件,发现里面是数据库表的创建语句,其实.frm文件就是保存数据库表结构的文件。

4.6 将创建语句复制到navicat中执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jMlmBen-1689844150150)(C:\Users\13248\AppData\Roaming\Typora\typora-user-images\image-20230720165356456.png)]

4.7 删除因为创建语句生成的.ibd文件

alter table `unit` discard tablespace;


执行完发先文件夹中的unit.ibd文件重新生成。


4.9 打开unit表,发现数据已经成功恢复。




文章知识点与官方知识档案匹配,可进一步学习相关知识

InnoDB 和 MyISAM 引擎恢复数据库,使用 .frm、.ibd文件恢复数据库的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. js中‘!.’是什么意思

  3. InnoDB 和 MyISAM 引擎恢复数据库,使用 .frm、.ibd文件恢复数据库

  4. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  5. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  6. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  7. 宝塔Linux的FTP连接不上的解决方法

    宝塔Linux的FTP连接不上的解决方法常见的几个可能,建议先排查。1.注意内网IP和外网IP2.检查ftp服务是否启动 (面板首页即可看到)3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 (如是腾讯云/阿里云等还需检查安全组)4.是否主动/被动模式都不能连接5.新建一个用户看是否能连接6.修改ftp配置文件 将ForcePassiveIP前面的#去掉 将19

  8. 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

  9. 微信小程序canvas实现水平、垂直居中效果

    这篇文章主要介绍了小程序中canvas实现水平、垂直居中效果,本文图文实例代码相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  10. 使用HTML5做的导航条详细步骤

    这篇文章主要介绍了用HTML5做的导航条详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. InnoDB 和 MyISAM 引擎恢复数据库,使用 .frm、.ibd文件恢复数据库

  2. mysql备份数据库脚本

  3. Linux环境下mysql数据库备份操作说明

    如下: 一、 编写数据库备份shell脚本 1、登录服务器,进入mysql安装目录。例:cd /usr/local/mysql 2、创建目录 dbBakShell和 dbbak,用于放置数据

  4. mysqldump备份以及定时任务生成备份文件内容为空解决方法

    1、备份命令格式:mysqldump-h主机名-P端口-u用户名-p密码--database数据库名>文件名.sql例如:mysqldump-h192.168.1.100-p3306-uroot-ppassword--databasecmdb>/data/backup/cmdb.sql2、备份压缩导出的数据有可能比较大,不好备份到远程,这时候就需要进行压缩格式:mysqldump-h主机名-P端口

返回
顶部