只有.frm和.ibd文件时如何批量恢复InnoDB的表---发表到爱可生开源社区

发表到爱可生开源社区 技术分享 | 只有.frm和.ibd文件时如何批量恢复InnoDB的表

背景

很多时候因为MySQL数据库不能启动而造成数据无法访问,但应用的数据通常没有丢失,只是系统表空间等其它文件损坏了,或者遇到MySQL的bug。这个时候如果没有备份,很多人就以为数据丢失了,但实际上大部分时候数据还是有救的。对于MyISAM引擎的表空间,直接把对应的数据文件拷贝到一个新的数据库就行了,数据就可以恢复了。对于InnoDB引擎的数据库表空间可以采用传输表空间的方式把数据救回来。

创建已经丢失的表结构

先要安装mysql-utilities。

yum -y install mysql-server mysql-utilities
apt install mysql-utilities

使用mysqlfrm从.frm文件里面找回建表语句。
分析一个.frm文件生成建表的语句:

mysqlfrm --diagnostic /var/lib/mysql/test/t1.frm

分析一个目录下的全部.frm文件生成建表语句:

root@infokist:~# mysqlfrm --diagnostic /var/lib/mysql/ds_db/bk/ >createtb.sql
root@infokist:~# grep "^CREATE TABLE" createtb.sql |wc -l
124

可以看到一共生成了124个建表语句。
有很多时候也可以从其它库里面生成建表语句,例如同一个应用的其它数据库或不同的测试环境的库,可以采用下面的mysqldump生成建表语句:

mysqldump --no-data --compact ds_db>createtb.sql

登录mysql,生成表

mysql> create database ds_db;
mysql> use ds_db
Database changed
mysql> source createtb.sql
Query OK, 0 rows affected (0.07 sec)
......

导入旧的数据文件

将新建的没有包括数据的.ibd文件抛弃

root@infokist:/var/lib/mysql/ds_db# ll *.ibd|wc
    124    1116    7941
root@infokist:/var/lib/mysql/ds_db# mysql -e "show tables from ds_db" |grep -v  Tables_in_ds_db  |while read a; do mysql -e "ALTER TABLE ds_db.$a DISCARD TABLESPACE"; done
root@infokist:/var/lib/mysql/ds_db# ll *.ibd|wc
ls: cannot access '*.ibd': No such file or directory
      0       0       0

可以看到所有的.idb文件都已经被抛弃了。然后把旧的有数据的.ibd文件拷贝到这个ds_db目录下面,别忘了把属主改过来:chown mysql. *,再把这些数据文件import到数据库中。

root@infokist:/var/lib/mysql/ds_db# mysql -e "show tables from ds_db" |grep -v  Tables_in_ds_db  |while read a; do mysql -e "ALTER TABLE ds_db.$a import TABLESPACE"; done

导入完成后检查表

使用mysqlcheck对数据库ds_db下的所有表进行检查:

root@infokist:/var/lib/mysql/ds_db# mysqlcheck -c ds_db
ds_db.cdp_backup_point                             OK
......

所有的表都导入成功。

姚远ACE CSDN认证博客专家 ACE 华为云 MVP
Oracle ACE,华为云 MVP,Oracle10g,12c OCM; MySQL 5.6,5.7,8.0 OCP;CCNA; EMC Certified; IBM P Certified; RHCE; SQLServer 764; DB2 Certified; TOEIC 890;获得过两次国家部级科技进步奖;发明过两项计算机专利。微信:yaoyuanace 邮箱:yaoyuanace(at)qq.com
已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页