当前位置: 首页 > 科技观察

MariaDB通过物理文件进行数据恢复

时间:2023-03-18 11:07:02 科技观察

1。引发时间:2022.03.1210:10。事件:网站mariadb数据库服务器突然宕机,尝试各种方法启动无果。过程:不幸的是,数据库没有备份。幸运的是,可以通过数据库的物理文件恢复数据。结果:数据恢复,特此记录整个过程,以备不时之需。2.数据库和数据文件众所周知,数据库中的数据会以文件的形式存储(这些文件是以特定格式存储的,不是文本格式,如果你尝试用文本编辑器打开它,你会看到乱码)。在数据库中,每个数据库都是一个单独的文件夹,文件夹下存放着每个表的相关文件(不同存储引擎生成的表文件可能不同,这里使用的是innodb引擎)。比如笔者的网站数据库叫ivansli,有一个用户表——user。脱敏后的数据文件布局大致如下:?/usr/local/datatree-L2.├──aria_log.00000001├──aria_log_control├──ib_buffer_pool├──ibdata1├──ib_logfile0├──ibtmp1├────iZuf63yp8w5ku4znrskda8Z.err├──iZuf63yp8w5ku4znrskda8Z.pid├──multi-master.info├──mysql-bin.000001├──0mysql-bin2.00├──mysql-bin.000003├──mysql-bin.index├──mysql-slow.log├──performance_schema│└──db.opt└──ivansli├──db.opt├──用户。frm├──user.MYD└──user.MYI数据库存放数据的/usr/local/data目录。在ivansli文件夹下,可以看到有三个同名不同格式的文件。功能是:user.frm,存储数据表的元数据user.MYD,存储数据表的具体数据user.MYI,存储数据表的索引。除了每个表的几个文件外,还有一个重要的数据库服务器的ibdata1文件(位于数据库服务器存储数据的根目录下)。3.ibdata的作用ibdata(InnoDB基础设施的系统表空间)包含了几个对InnoDB至关重要的信息:表数据页。表索引页。数据字典。MVCC控制数据。撤消空间,回滚段双写缓冲区(在后台写入页面以避免操作系统缓存)。插入缓冲区(对二级索引的更改)。笔者这里innodb_file_per_table=0,使用的是共享表空间ibdata1,所以恢复数据的时候需要复制这个文件。关于这个文件的详细信息,可以参考相关资料。对于笔者来说,虽然数据库服务器宕机了,但是这些关键文件依然完好无损。那么,就有办法通过这些文件来恢复相应的数据。举个不恰当的例子:这里的数据恢复有点像器官移植,器官捐献者可能已经脑死亡。但捐献者的心脏等器官都还活着,如果找到合适的靶受体,这些器官还能继续发挥作用。4、恢复过程这里以ivansli数据库恢复为例,整个恢复过程大致如下:(1)查看当前数据所在服务器(这里称为源数据库服务器)的类型和版本恢复位于。笔者这里使用的是mariadb-10.7.0。为什么要查看崩溃的数据库服务器的类型和版本?主要是寻找数据恢复的匹配环境(类似器官移植,也需要找到相同相似的匹配接受者,否则会出问题)。(2)其他服务器建立了与源数据库服务器(这里简称目标数据库服务器)相同或相似版本的数据库服务器后,先停止目标数据库服务器,暂时停止启动,准备复制数据之后。(3)将源数据库服务器上要恢复的文件夹(这里是ivansli文件夹)和ibdata1文件复制到目标数据库服务器数据目录下。目标数据库服务器数据库存储数据目录下不存在ivansli文件夹,直接复制即可。ibdata1文件在目标数据库服务器数据库存储数据目录下有同名文件,直接覆盖即可。(4)修改目标数据库服务器数据库存储数据目录下的相关文件权限。chmod-R660ivansliibdata1chown-Rmysql:mysqlivansliibdata1chmod+xivansli(5)启动目标数据库服务器。(6)以root帐号登录目标数据库服务器,查看数据恢复情况。(7)在目标数据库服务器上可以看到要恢复的数据,并可以对数据进行备份、导出和保存。(8)在源数据库服务器上新建数据库服务器,导入恢复后的数据。5.总结对于开发者来说,经常会听到删库跑路、删库坐牢之类的话。对于企业来说,最重要的是用户的数据信息,尤其是金融等行业,与其服务不可用,不如保证数据安全。本文介绍存在数据文件的特定情况下的简单数据恢复。对于数据文件被删除的情况,可能需要扫描磁盘等更专业的操作。一句话:善待每一行代码,用心输入每一条命令。还有:做好数据备份,做好数据备份,做好数据备份。