脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页数据库Mysql→ mysql恢复数据表

mysql如何根据.frm和.ibd文件恢复数据表

  更新时间:2023年07月28日 08:27:26  作者:peachyy 
这篇文章主要介绍了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恢复数据表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

    • 这篇文章介绍了MySQL高效分页解决方案集,有需要的朋友可以参考一下
      2013-11-11
    • 这篇文章主要介绍了MySQL组合索引(多列索引)使用与优化,主要包括多列索引,测试案例及过程以及多列索引的使用顺序,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
      2022-07-07
    • 主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询,本文就将带大家底搞清楚MySQL的主键、外键、约束和各种索引,感兴趣的小伙伴可以跟着小编一起来学习
      2023-06-06
    • 这篇文章主要介绍了MySQL 5.0.16乱码问题的解决方法,需要的朋友可以参考下
      2015-10-10
    • 这篇文章主要介绍了解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated问题,需要的朋友可以参考下
      2019-10-10
    • 这篇文章主要介绍了MySQL的表空间是什么,帮助大家更好的理解和使用MySQL表的相关知识,感兴趣的朋友可以了解下
      2020-11-11
    • MySQL Innodb 的锁可以说是执行引擎的并发基础了,有了锁才能保证数据的一致性。但你知道什么时候会用表锁,什么时候会用行锁吗?本文就来和大家一起详细聊聊
      2022-09-09
    • 这篇文章主要介绍了MySql视图与触发器使用过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
      2022-12-12
    • 这篇文章主要为大家详细介绍了Windows8下mysql 5.6.15 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2018-09-09
    • 这篇文章主要介绍了在Windows环境下安装MySQL 的教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
      2019-07-07

    最新评论