从ibd文件恢复MySQL数据

从ibd文件恢复MySQL数据

  • 1.背景
  • 2.操作步骤
    • 2.1 备份源数据库的ibd文件
    • 2.2 准备数据库建表语句
    • 2.3 重新安装新数据库
    • 2.4 新数据库恢复数据具体步骤
  • 3.常见错误
    • 3.1 权限问题
    • 3.2 报错不存在CFG文件
    • 3.3 通过ibd文件恢复数据后自增主键问题报冲突

1.背景

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

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

MySQL数据库数据的恢复的过程中,踩了一些坑,下文给出具体的恢复的操作过程。

2.操作步骤

2.1 备份源数据库的ibd文件

整个MySQL数据库数据的恢复都是基于ibd文件的,所以最重要的自然是将源数据库的ibd文件保存下来。

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

如果你的MySQL之前安装的时候是自己手动指定的安装目录,可以使用下面的命令查询mysql的安装目录,然后备份的操作同上。

find / -name mysql

2.2 准备数据库建表语句

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

2.3 重新安装新数据库

在新的系统上安装好新数据库,默认安装会安装到地址/var/lib/mysql下。

2.4 新数据库恢复数据具体步骤

1、创建数据库schema

比如我们创建数据库test,并切换到test数据库。在MySQL中执行如下SQL。

create database test;
use test;

2、创建表

这里直接把前面准备好的数据库建表语句全部执行,在MySQL中执行如下SQL。

create table xxx ...

3、移除表空间

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

alter table xxx discard tablespace;

其中xxx为具体的表名,做完这一步的现象就是在/var/lib/mysql/test目录下,刚才因为我们创建表所生成的ibd文件被删除了。

4、上传源数据库ibd文件

前面我们已经备份了源数据库中表的ibd文件,现在将文件使用SFTP工具上传到刚才的/var/lib/mysql/test目录下。(注意:这里的/var/lib/mysql是我本地数据库的安装目录,而test是我数据库的名称,各位具体情况需要根据自己数据库的情况而定)

5、修改ibd文件权限

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

chown mysql:mysql /var/lib/mysql/test/*.ibd

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

6、重导表空间

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

alter table xxx import tablespace;

3.常见错误

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

3.1 权限问题

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

3.2 报错不存在CFG文件

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

后续查阅官方文档,是因为我在最开始建表以后,使用ALTER操作新增了列,导致表结构的存储发生了变化,这被官方称为DDL INSTANT,所以无法恢复。面对这种问题,建议大家平时对数据库数据多多备份,减少数据丢失。

3.3 通过ibd文件恢复数据后自增主键问题报冲突

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

弱智吧”,人类抵御AI的最后防线

“写遗嘱的时候错过了deadline怎么办?” “怀念过去是不是在时间的长河里刻舟求剑?” “英语听力考试总是听到两个人在广播里唠嗑,怎么把那两个干扰我做题的人赶走?” 以上这些饱含哲学但好像又莫名其妙的问题,出自…

【简单学习一下卷积神经网络】-基于肆十二的高考例子

前言一、白话卷积神经网络总结 前言 【参考】 主要是P2⇨手把手教你用tensorflow2训练自己的数据集 -------2024/5/4 一、白话卷积神经网络 高考前需要大量的做题训练---->相当于数据集。 做题过程中【于标准答案进行比对】产生的错题⇨loss(误差) 回…

SkyWalking之P0核心业务场景输出调用链路应用

延伸扩展:XX核心业务场景 路由标签打标、传播、检索 链路标签染色与传播 SW: SkyWalking的简写 用户请求携带HTTP头信息X-sw8-correlation “X-sw8-correlation: key1value1,key2value2,key3value3” 网关侧读取解析HTTP头信息X-sw8-correlation,然后通过…

C++九州控制地址结构else 陈述

else如同英文字义,九州qa98錪cc否则的意思,通常放在if的后面,若if的条件为真,就执行if底下大括弧围起来的程式区块,若为假,就执行else底下大括弧围起来的程式区块。 形式如下: 这个概念用于二选…

JavaWeb期末知识点复习

th表头(会居中加粗而已&#xff0c;别的和td一样 ) tr表格行 td单元格 <caption>标题</...> <table> <tr>行 <th> </th> <td align"center" valign"middle">每列</td> <td> <tr> <table&…

imx93 系统烧录

1. 硬件环境 iMX 93 evk 开发板 ubuntu 20.04 系统&#xff0c;x86_64 2. 交叉编译可能需要的软件包 配置交叉编译器的前提&#xff0c;我的配置如下&#xff1a; export ARCHarm64 export CROSS_COMPILEaarch64-none-linux-gnu- export PATH$PATH:/opt/work/sdk/arm-gnu-…

盲盒小程序推广与运营策略的挑战

随着盲盒经济的兴起&#xff0c;越来越多的商家开始关注并尝试开发盲盒小程序。然而&#xff0c;在推广和运营盲盒小程序的过程中&#xff0c;我们也不可避免地会遇到一些挑战。下面&#xff0c;我将就用户获取、留存以及活跃度提升等方面&#xff0c;探讨这些挑战及可能的应对…

LayerNorm和RMSNorm实现代码

下面是详细实现的LayerNorm和RMSNorm代码&#xff0c;并附有详细注释。 LayerNorm 实现 LayerNorm的主要思想是对每个样本的每一层进行归一化。具体的实现如下&#xff1a; import torch import torch.nn as nnclass LayerNorm(nn.Module):def __init__(self, d_model, eps1…

动态内存管理<C语言>

导言 在C语言学习阶段&#xff0c;指针、结构体和动态内存管理&#xff0c;是后期学习数据结构的最重要的三大知识模块&#xff0c;也是C语言比较难的知识模块&#xff0c;但是“天下无难事”&#xff0c;只要认真踏实的学习&#xff0c;也能解决&#xff0c;所以下文将介绍动态…

镜舟科技与千丁数科开展战略洽谈,探索智慧空间与数据的深度融合

数据作为当下最重要的生产要素之一&#xff0c;数据分析与智慧空间科技的结合正成为推动企业发展的新引擎 。 5 月 15 日&#xff0c;镜舟科技与千丁数科在北京开展战略合作洽谈。本次会议旨在探索双方在智慧空间科技和数据分析领域的合作潜力&#xff0c;共同推进数字经济的新…

Gartner发布企业人工智能治理指南:以企业通用治理框架为基础,确定针对框架六大支柱的AI特定因素

人工智能&#xff08;AI&#xff09;不仅发展迅速而且可能会放大人类的偏见&#xff0c;如何对其实施有效的治理是数据和分析领导者面临的一个挑战。本文提供了一种全面的方法&#xff0c;可用于扩展企业的治理框架&#xff0c;引入信任、透明度和多样性等AI特定的考虑因素。 主…

3_1 Linux网络基础

3_1 Linux网络基础 文章目录 3_1 Linux网络基础[toc]1. 网络基础1.1 网络的功能&#xff1a;1.2 网络的发展1.3 广域网与局域网1.4 网络中的重要设备1.5 网络中的常用的网络拓扑结构1.6 Tcp/Ip五层参考模型1.7 网络中传输数据的过程1.8 网络设备控制方式1.9 网络的地址1.10 主机…

CMDB是什么实践案例分享

CMDB是什么&实践案例分享 腾讯蓝鲸CMDB通过集中化管理、自动化发现、灵活的模型定义和开放的API&#xff0c;帮助企业高效管理IT资产和配置项&#xff0c;提升运维效率和服务质量&#xff0c;同时支持与其他系统的无缝集成&#xff0c;适用于金融、制造、互联网等多个行业…

WeTrade 在印度尼西亚井里汶成功举办研讨会

端午安康!在这欢乐的假日里&#xff0c;WeTrade和各位投资者分享一则喜事!如果有意参加的&#xff0c;可以联系小编! 5 月底&#xff0c;我们在印度尼西亚井里汶成功举办了一场精彩研讨会&#xff0c;聚集了来自印度尼西亚各地交易社区的100多名交易者。 此次研讨会由经验丰富…

SpringBoot快速部署(2)—不使用docker的常规方法

一、软件下载和部署前准备 安装软件 获取软件安装包 然后上传到服务器的 /tmp 目录下。 软件&#xff1a;nginx、jdk、mysql 下载 X-shell 和 Xftp 注意&#xff1a;这个页面下载安装的才可以免费使用。家庭/学校免费 - NetSarang Website 安装jdk 1.8 tar -zxvf /tmp/jdk-…

徐州服务器租用的费用如何?

对于租用徐州服务器大概需要多少费用呢&#xff1f;服务器租用的价格会根据多种因素而不断变化&#xff0c;其中包括服务器的硬件配置、租用所在地区的数据中心和IDC服务商所提供的服务器等级&#xff0c;所以服务器租用的费用是不固定的&#xff0c;那么小万来详细谈一谈这个问…

服务器数据恢复—热备盘未完全启用导致raid5阵列崩溃的数据恢复案例

服务器存储故障&#xff1a; 一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃&#xff0c;由于数据涉密&#xff0c;需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测&#xff0c;经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。…

云端之上的边缘:解读云计算与边缘计算的战略融合

目录 一、引言 二、云计算的详细解释 云计算的概念 云计算的特点 一、引言 二、虚拟化技术 &#xff08;一&#xff09;虚拟化技术的原理 &#xff08;二&#xff09;虚拟化技术的优势 三、动态可扩展 &#xff08;一&#xff09;动态可扩展的原理 &#xff08;二&a…

Web前端开发学习资料:深度探索与开发实践

Web前端开发学习资料&#xff1a;深度探索与开发实践 Web前端开发作为互联网时代的核心技能之一&#xff0c;日益受到广泛关注。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对Web前端开发的学习资料进行详细解析&#xff0c;旨在帮助初学者和进阶者更好地掌握…

Web前端开发交流群:深度探索、实践与创新的集结地

Web前端开发交流群&#xff1a;深度探索、实践与创新的集结地 在数字时代的浪潮中&#xff0c;Web前端开发扮演着举足轻重的角色。为了促进前端技术的交流与发展&#xff0c;Web前端开发交流群应运而生&#xff0c;成为众多开发者学习、分享、创新的集结地。本文将从四个方面、…