mysql根据.frm和.ibd文件恢复数据表
忠人之事受人之托 起因是因为一位朋友的数据库服务器被重装了,只剩下一个zbp_post.frm和zbp_post.ibd文件。咨询我能不能恢复,确实我只用过mysqldump这种工具导出数据 然后进行恢复到数据库。这种直接备份物理存储文件还没有尝试过。
前提是需要历史ibd文件的所属数据库版本 需要和还原新库数据库版本保持一致,这样才能少踩坑。
创建表结构
要想恢复数据,表结构需要和.ibd里面的结构保持一致,如果不一致将恢复不成功 可能会报如下错误。或者其他异常。
[ERROR] InnoDB: Trying to access page number 426442752 in space 24, space name test1/zbp_post, which is outside the tablespace bounds. Byte offset 0, len 16384, i/o type read. If you get this error at mysqld startup, please check that your my.cnf matches the ibdata files that you have in the MySQL server.
获取表结构
如果明确知道表结构 这一步可跳过。不知道表结构可从这一步操作中获取到表结构。
借助了mysql utilities工具来查看表结构。
安装mysql utilities
这里我适用window 其他系统也是类似的操作 下载后安装好。
https://downloads.mysql.com/archives/get/p/30/file/mysql-utilities-1.6.5-winx64.msi
其他系统下载地址 https://downloads.mysql.com/archives/
进入zbp_post.frm目录中执行获取表结构命令。
cd zbp_post
mysqlfrm --diagnostic ./zbp_post.frm
执行完mysqlfrm命令后 输出如下表结构
CREATE TABLE `zbp_post` (
`log_ID` int(11) NOT NULL AUTO_INCREMENT,
`log_CateID` int(11) NOT NULL,
`log_AuthorID` int(11) NOT NULL,
`log_Tag` varchar(1000) NOT NULL,
`log_Status` tinyint(4) NOT NULL,
`log_Type` int(11) NOT NULL,
`log_Alias` varchar(1000) NOT NULL,
`log_IsTop` tinyint(4) NOT NULL,
`log_IsLock` tinyint(4) NOT NULL,
`log_Title` varchar(1000) NOT NULL,
`log_Intro` text,
`log_Content` longtext,
`log_CreateTime` int(11) NOT NULL,
`log_PostTime` int(11) NOT NULL,
`log_UpdateTime` int(11) NOT NULL,
`log_CommNums` int(11) NOT NULL,
`log_ViewNums` int(11) NOT NULL,
`log_Template` varchar(1000) NOT NULL,
`log_Meta` longtext,
`log_BdPush` int(11) NOT NULL,
PRIMARY KEY `PRIMARY` (`log_ID`),
KEY `zbp_log_TPISC` (`log_Type`,`log_PostTime`,`log_IsTop`,`log_Status`,`log_CateID`),
KEY `log_CateID` (`log_CateID`),
KEY `log_AuthorID` (`log_AuthorID`),
KEY `log_PostTime` (`log_PostTime`),
KEY `log_CommNums` (`log_CommNums`),
KEY `log_ViewNums` (`log_ViewNums`),
KEY `log_Title` (`log_Title`)
) ENGINE=InnoDB;
数据库配置修改
编辑MySQL的配置文件,通常是my.cnf或my.ini文件,在[mysqld]部分添加以下行:
这将确保每个表有单独的.ibd文件。
[mysqld]
innodb_file_per_table=1
wait_timeout=600 #600秒(10分钟)
wait_timeout=600 这个配置可以不加 访问还原数据比较大。执行超时的情况。需要根据场景酌情配置。
开始恢复数据
创建新数据库
创建一个数据库 任意数据库名。
create database test1;
创建表
进入到新创建的数据库中(use test1),复制上一步中的表结构SQL。执行创建表结构操作。
使用.ibd文件恢复数据到新表
卸载表空间 执行此步会自动删除新表对应的.ibd文件
ALTER TABLE zbp_post DISCARD TABLESPACE;
拷贝备份的.ibd文件到新创建数据库对应的目录中。
一般目录在mysql保存数据库的目录。如我当前的服务器mysql数据保存的目录在/usr/local/mysql/data,数据库名 test1 ,表名 zbp_post。
那么拷贝.ibd文件的目录为 /usr/local/mysql/data/zbp_post/test1中。
装载表空间
ALTER TABLE zbp_post IMPORT TABLESPACE;
完成以上步骤后,您应该能够成功还原.ibd文件。请注意,这种方法仅适用于InnoDB引擎的表。如果.ibd文件损坏或不匹配,可能需要使用MySQL的数据恢复工具来修复数据库。
验证
果然完美
mysql> select count(1) from zbp_post;
+----------+
| count(1) |
+----------+
| 785216 |
+----------+
1 row in set (0.15 sec)
如果有朋友遇到类似问题可以和我联系。
mysql根据.frm和.ibd文件恢复数据表的更多相关文章
- MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据
数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...
- 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- mysql5.7根据.frm和.ibd文件恢复表结构和数据
一.恢复表结构 1.环境:Windows .mysql5.7:首先创建一个数据库,可以通过navicat来创建: 2.使用当前创建的数据库:use ww; 3.随意创建一张表,但是这张表的名字 ...
- 通过.frm表结构和.ibd文件恢复数据
整个恢复过程其实可以总结为下面几步: (1):恢复表结构 (2):复制出来创建表的sql语句 (3):恢复表数据(在恢复表数据的时候,首先需要解除当前创建的表与默认生成的.ibd文件间的关系,接着将要 ...
- 【转&参考】MySQL利用frm和ibd文件进行数据恢复
MySQL利用frm和idb文件进行数据恢复 源MySQL现状: 版本:5.6.* 存储引擎:innodb存储引擎 要恢复数据库:skill 重点要恢复表:slot_value 已有的文件: 备份了所 ...
- MySQL表结构为InnoDB类型从ibd文件恢复数据
客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...
- 亲測Mysql表结构为InnoDB类型从ibd文件恢复数据
客户的机器系统异常关机,重新启动后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,仅仅能想办法从数据库文件其中恢复,查找资料,试验各种方法,确认以下步骤 ...
- ubuntu下面mysql,通过载入txt文件初始化数据表
环境:ubuntu12.04 mysql(通过apt安装) (1)根据数据表中的属性列,对应在txt中构造记录(一行对应一条记录),不同属性之间通过tab键(以/root目录下构建的init.tx ...
- mysql数据恢复:.frm和.ibd,恢复表结构和数据
mysql数据恢复:.frm和.ibd,恢复表结构和数据 一.恢复表结构 二.恢复表数据 相关内容原文地址: CSDN:她说巷尾的樱花开了:mysql根据.frm和.ibd文件恢复表结构和数据 博客园 ...
随机推荐
- sklearn数据预处理中fit(),transform()与fit_transform()的区别
1 概述 注意这是数据预处理中的方法: Fit(): Method calculates the parameters μ and σ and saves them as internal objec ...
- 网络编程之java简易聊天室实现
最近浅学习了一些关于网络编程方面的知识,视频是跟着狂神学习的,可能学习的不是很深 说到网络,相信大家都对TCP.UDP和HTTP协议这些都不是很陌生,学习这部分应该先对端口.Ip地址这些基础知识有一定 ...
- 聊一聊 GDB 调试程序时的几个实用命令
一:背景 1. 讲故事 用惯了宇宙第一的 Visual Studio 再用其他的开发工具还是有一点不习惯,不习惯在于想用的命令或者面板找不到,总的来说还是各有千秋吧,今天我们来聊一下几个在调试中比较实 ...
- pytest常用断言
如上官网所说,pytest使用python中的assert来比较实际值与预期值,实现断言功能 1 常用的断言方式 assert xxx assert a == b assert a!=b assert ...
- 如何理解 Spring Boot 中的 Starter ?
假如 没有 Spring Boot Starter,我们有两种方式来创建 Spring Bean. spring xml 模式 (远古模式,并不推荐) spring API 来创建 Spring Be ...
- 2022-11-04:给定一个正数n,表示有多少个节点 给定一个二维数组edges,表示所有无向边 edges[i] = {a, b} 表示a到b有一条无向边 edges一定表示的是一个无环无向图,也
2022-11-04:给定一个正数n,表示有多少个节点 给定一个二维数组edges,表示所有无向边 edges[i] = {a, b} 表示a到b有一条无向边 edges一定表示的是一个无环无向图,也 ...
- vb.net 数据库连接字符串
'设置数据库连接字符串 Dim connString As String = "Data Source=.\SQLEXPRESS;Initial Catalog=YourDatabaseNa ...
- Django-5:前端模板路径设定TEMPLATES DIRS和调用
前端模板路径设定:'DIRS': [BASE_DIR / 'templates'] TEMPLATES = [ { 'BACKEND': 'django.template.backends.djang ...
- Vue全局公共服务类mixin
首先,简单介绍下mixin: Mixin是面向对象程序设计语言中的类,提供了方法的实现.其他类可以访问mixin类的方法而不必成为其子类 Mixin类通常作为功能模块使用,在需要该功能时"混 ...
- 【GiraKoo】面向对象开发系列之【封装】
[技术分享]面向对象开发系列之[封装] 理解 封装是面向对象程序开发的基石. 程序开发,最核心价值,是数据. 程序其实是读取数据,操作数据,保存数据等一系列操作. 那么经过良好组织过的数据,将使编程事 ...