您的位置 首页 数据库

利用表空间迁移功能实现数据损坏恢复 实战

利用表空间迁移功能实现数据损坏恢复 实战

说明:操作系统突然断电了,启动完成后 / 变为只读了,fsck修复文件系统,系统再次重新启动后,mysql启动不了了

结果:造成confulence库在、jira库不见了(备份没有 日志也没开)

服务:jira(bug追踪)、confluence(内部知识库) 、mysql 5.6.33(innodb引擎 使用独立表空间) -- LNMT架构

硬件:联想服务器(8核 16G内存 500G存储空间 没有raid),centos 6.8系统

对话描述:

学生:这种情况怎么恢复?

老师:有备份吗?

学生:连二进制日志都没有,没有备份,没有主从

老师:jira数据库数据没什么办法了,只能进行硬盘数据恢复了

学生:jira数据库数据先不用关注,数据磁盘已经拉到中关村处理了

主要是confulence库还想使用,但将生成中的库目录,导入到其他主机上(var/lib/mysql),无法直接访问数据库中数据?

老师有没有工具能直接读取数据库目录中的ibd文件内容

老师:我查查,最后发现没有

我们可以尝试下独立表空间迁移

create table xx

alter table coufulence.t1 discard tablespace;

alter table coufulence.t1 import tablespace;

虚拟环境测试可行

问题:confulence库中总共有107张表

困惑:如何创建107张和原来一模一样的表

解决:学生环境中有2016年的历史库,让学生利用mysqldump命令备份confulence历史库

mysqldump -uroot -ppassw0rd -B confulence --no-date > test.sql 只获取所有表结构信息

如果是自研数据库,没有备份怎么办

mysql工具包中,拥有mysqlfrm工具也可以读取frm文件获取表结构

 

操作步骤一:备份历史数据库的所有表结构信息,并进行恢复

[root@xiaoQ-01 ~]# mysqldump -uroot -ppassw0rd -B confulence --no-date > test.sql 
mysql > create database confulence
mysql > source test.sql

操作步骤二:删除空表的独立表空间

select concat("alter table ",table_schema,".",table_name," discard tablespace;") from information_schema.tables where table_schema='confulence'; into outfile '/tmp/discard.sql';
source /tmp/discard.sql

实际执行过程发现,有20-30张表无法成功,主外键关系问题,如果一个表一个表分析表结构,处理外键关系很痛苦

set foreign_key_checks=0
-- 跳过外键检查,从而把有问题的20-30张表的独立表空间也删除了

操作步骤三:拷贝生成中confulence库下的所有表的ibd文件到准备好的环境中并加载识别

select concat("alter table ",table_schema,".",table_name," discard tablespace;") from information_schema.tables where table_schema='confulence' into outfile '/tmp/import.sql';
source /tmp/import.sql

操作步骤四:进行数据信息验证

表都可以访问了,数据挽回了出现问题时刻的状态


Innodb 升级为 TokuDB 存储引擎企业案例 : 连接 

MyISAM 升级为 Innodb引擎企业案例 : 连接 

独立表空间数据迁移实战 :连接 

利用表空间迁移功能实现数据损坏恢复 实战 : 连接 

mysql 5.7中误删除了ibdata1数据文件,导致数据库服务无法启动  :   连接

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章