宕机的 MySQL 5.7,用 dbsake 和 ibd2sql 抢救回来了!

贺春旸 2024-09-30 09:34:00
作者介绍

贺春旸,dbaplus社群金牌专家,凡普金科和爱钱进DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一&二版、《MySQL运维进阶指南》作者,曾任职于中国移动飞信、安卓机锋网。五次荣获dbaplus年度MVP,致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。

 

数据安全是企业的生命线,数据库一旦意外宕机将不堪设想,试想一下如果你遇到了这样一个棘手的情况: 

  • MySQL 未进行备份

  • MySQL 采用单点部署

  • MySQL 突然崩溃且无法启动

 

面对这种危机,如何抢救 MySQL 5.7 的数据?以下是一套不用递交辞呈的应急方案。

 

对于 MySQL 5.7 的数据恢复,我们可以借助两个强大的工具—— dbsake 和 ibd2sql 。这个方法不仅能还原表结构,更能恢复数据,堪称一个全面的拯救方案。接下来,让我们一步步探讨详细的操作流程。

 

第一步:使用 dbsake 恢复表结构

 

1、安装 dbsake:

  •  
  •  
# curl -s get.dbsake.net > dbsake# chmod 755 dbsake

 

2、使用 dbsake 从 frm 文件恢复表结构:

  •  
# ./dbsake frmdump /data/mysql/mysql57_1/data/test/t2.frm

 

frm文件恢复表结构

 

这一步将为我们提供完整的表结构 SQL。

 

第二步:使用 ibd2sql 恢复数据

 

1、在全新的 MySQL 8.0 实例中,创建我们刚刚恢复的表结构。

 

2、获取并配置 ibd2sql 工具:

  •  
  •  
  •  
  •  
  •  
  •  
# wget https://github.com/ddcw/ibd2sql/archive/refs/heads/main.zip# unzip main.zip# cd ibd2sql-main# python3 main.py /data/mysql/mysql57_1/data/test/t2.ibd  \--sdi-table /data/mysql/mysql8/data/recover/t2.ibd      \--sql --ddl --complete-insert --mysql5

 

ibd文件数据恢复

 

参数解释(以下指的是ibd2sql):

 

  • /data/mysql/mysql57_1/data/test/t2.ibd:指定需要恢复数据的 .ibd 文件路径。该文件位于 MySQL 5.7 数据目录下,属于 test 数据库中的 t2 表。

 

  • --sdi-table /data/mysql/mysql8/data/recover/t2.ibd:指定 dbsake 工具生成的中间文件(SDI 文件)的存放路径。SDI 文件包含了从 .ibd 文件中提取的表结构和数据信息。

 

  • --sql:指示 dbsake 工具生成 SQL 语句,用于重建表结构和插入数据。

 

  • --ddl:指示 dbsake 工具生成创建表的 DDL 语句(CREATE TABLE)。

 

  • --complete-insert:指示 dbsake 工具生成完整的 INSERT 语句,包含所有列的值。

 

  • --mysql5:指定源数据库的版本为 MySQL 5,这有助于 dbsake 工具正确解析 .ibd 文件格式。

 

回车后,MySQL 5.7 的 ibd 文件就会转化为可执行的 SQL 语句,至此我们的数据抢救行动画上圆满的句号,不仅挽救了宝贵的数据,更是拯救了自己的职业生涯!

 
最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告