京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

从ibd文件恢复MySQL数据的操作步调及常见错误

2024-11-3 05:53| 发布者: 2ae29| 查看: 73| 评论: 0

摘要: 目次1.背景2.操作步调2.1 备份源数据库的ibd文件2.2 预备数据库建表语句2.3 重新安装新数据库2.4 新数据库恢复数据详细步调3.常见错误3.1 权限题目3.2 报错不存在CFG文件3.3 通过ibd文件恢复数据后自增主键题目报辩
目次

1.背景

前段时间,我的云服务器被病毒木马入侵了,导致服务器所有服务全部下线,且[code]22[/code]端口被侵,远程无法登录,[code]VNC[/code]模式也无法登录。实验备份镜像和云硬盘,并用原来的镜像重装体系,仍旧无法登录。

遂只能采用xx云服务器上的救援模式,挂载一下原来的硬盘,把关键的文件导出到本地,再重装体系将文件重新上传。

在[code]MySQL[/code]数据库数据的恢复的过程中,踩了一些坑,下文给出详细的恢复的操作过程。

2.操作步调

2.1 备份源数据库的ibd文件

整个MySQL数据库数据的恢复都是基于[code]ibd[/code]文件的,以是最紧张的天然是将源数据库的ibd文件生存下来。

这里要留意的是,MySQL默认的数据生存地点在[code]/var/lib/mysql[/code]目次下,这个目次下会有你创建的详细的[code]schema[/code]的文件夹,以及这个[code]schema[/code]中所有表的[code]ibd[/code]文件,我们直接使用[code]SFTP[/code]导出整个文件夹即可,后续的恢复操作都会基于[code]ibd[/code]文件来展开。

如果你的[code]MySQL[/code]之前安装的时间是本身手动指定的安装目次,可以使用下面的命令查询mysql的安装目次,然后备份的操作同上。

[code]find / -name mysql [/code]

2.2 预备数据库建表语句

这里大概有些人没有备份建表语句的习惯,大家可以先断开本身本地的网络连接,然后使用本身平常常用的数据库连接工具,直接查看DDL语句,一样平常数据库连接工具里面都有缓存的数据库的建表语句。

2.3 重新安装新数据库

在新的体系上安装好新数据库,默认安装会安装到地点[code]/var/lib/mysql[/code]下。

2.4 新数据库恢复数据详细步调

1、创建数据库schema

比如我们创建数据库[code]test[/code],并切换到[code]test[/code]数据库。在[code]MySQL[/code]中实行如下SQL。

[code]create database test; use test; [/code]

2、创建表

这里直接把前面预备好的数据库建表语句全部实行,在[code]MySQL[/code]中实行如下SQL。

[code]create table xxx ... [/code]

3、移除表空间

这一步是直接把刚才建好的表空间移除,实行命令如下,在[code]MySQL[/code]中实行如下SQL。

[code]alter table xxx discard tablespace; [/code]

其中[code]xxx[/code]为详细的表名,做完这一步的现象就是在[code]/var/lib/mysql/test[/code]目次下,刚才因为我们创建表所天生的[code]ibd[/code]文件被删除了。

4、上传源数据库ibd文件

前面我们已经备份了源数据库中表的[code]ibd[/code]文件,如今将文件使用[code]SFTP[/code]工具上传到刚才的[code]/var/lib/mysql/test[/code]目次下。(留意:这里的[code]/var/lib/mysql[/code]是我本地数据库的安装目次,而[code]test[/code]是我数据库的名称,各位详细情况需要根据本身数据库的情况而定)

5、修改ibd文件权限

上一步通过[code]SFTP[/code]上传的[code]ibd[/code]文件正常应该是[code]root[/code]用户上传的,我们需要使用[code]mysql[/code]用户来完成剩下的操作,在[code]Linux[/code]中[code]Shell[/code]的命令行中实行下面的命令。

[code]chown mysql:mysql /var/lib/mysql/test/*.ibd [/code]

同理,上述的[code]/var/lib/mysql/test[/code]是我本机的数据库位置,各位现实操作的时间需要根据本身本机情况进行相应的修改,而[code]*.ibd[/code]表示给所有的[code]ibd[/code]文件都修改权限。

6、重导表空间

上一步我们已经上传好[code]ibd[/code]文件,并修改了文件权限,这一步要做的就是让[code]MySQL[/code]识别到刚才上传的数据,重新导入表空间。这一步可以一个表一个表的进行导入表空间,原因是因为有些表的[code]ibd[/code]文件大概已经不支持导入了,导入的时间会报错,我们先把可以恢复的表恢复了,在[code]MySQL[/code]中实行如下SQL。

[code]alter table xxx import tablespace; [/code]

3.常见错误

在操作恢复数据库的过程中,我遇到了一些错误,并且导致了部门表无法恢复成功,在这里总结几种。

3.1 权限题目

由于上传的[code]ibd[/code]文件是[code]root[/code]用户上传的,导致在[code]MySQL[/code]中实行SQL会报错,这个时间通过[code]Shell[/code]工具修改[code]ibd[/code]文件的权限即可,详细参考[code]2.4[/code]节第5步。

3.2 报错不存在CFG文件

这个报错我网上查了一下,有的文章说,在数据库[code]ibd[/code]文件同级目次下存在CFG文件,需要和[code]ibd[/code]文件一起导入新的数据库,但是我的[code]MySQL[/code]版本是[code]8.0.31[/code]并没有相干的CFG文件。

后续查阅官方文档,是因为我在最开始建表以后,使用[code]ALTER[/code]操作新增了列,导致表结构的存储发生了厘革,这被官方称为[code]DDL INSTANT[/code],以是无法恢复。面对这种题目,建议大家平常对数据库数据多多备份,淘汰数据丢失。

3.3 通过ibd文件恢复数据后自增主键题目报辩论

我有一些表使用了数据库的自增主键,在恢复完数据以后,重新摆设了应用,在使用自增主键的表中出现了主键辩论的情况。

原因是通过原来的[code]ibd[/code]文件导入数据并没有同步相应的体系表的结构,以是新的[code]MySQL[/code]以为自增主键还是从1开始算,现实上数据库中的数据自增列早已增长到一定数目了。针对这个题目,我如今没有想到好的方法,只能先将恢复好的数据库数据导出到SQL,然后删除原表重新建表以后,再重新导入。

固然如果没有使用到体系能力(比如自增主键)的表,是无需删除表再重新导入数据的。

总结

到此这篇关于从ibd文件恢复MySQL数据的操作步调及常见错误的文章就先容到这了,更多相干从ibd文件恢复MySQL数据内容请搜刮脚本之家以前的文章或继承浏览下面的相干文章希望大家以后多多支持脚本之家!


来源:https://www.jb51.net/database/3260635m1.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 22:31 , Processed in 0.030483 second(s), 19 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部