本次数据库灾难目前原因由于猜测是由于短时间内大量数据写入导致的数据库异常关闭,部分数据文件损坏,此恢复操作必须基于frm和idb文件没有受损的情况下尽可能的恢复数据,当然,mysql服务也必须能正常启动后,如果还无法正常启动mysql服务,请先转到mysql服务重启频道;

第一步:

一定要把数据库的frm文件和ibd文件第一时间建立备份,然后再执行后面的恢复操作,因为这是数据恢复最后的希望,如果再丢失,那就回天乏力了;

第二步:

再创建一个数据库(数据库配置尽量保持一致,编码设置等…),然后将之前之前挂掉的数据库的表及结构恢复到这个新建的数据库中,如果有表结构备份sql直接运行,如果没有备份sql那就需要用到之前我们提到的frm文件,据我理解,frm文件保存的是表结构信息(包括字段,键及索引),idb文件才是保存的具体数据(表空间),所以这两个文件缺一不可,frm文件不支持直接读取,所以我们需要借助工具
https://download.csdn.net/download/qq_40986512/34799416
这个是windows版本,直接将frm文件读取成sql,然后直接运行,但是这个windows版本不能读取出视图的frm文件(视图的sql也是一个frm文件,但是视图没有idb文件),但是视图的frm文件可以用notepad++直接读取;
linux的frm读取工具(可以直接读取所有frm,包括视图的)

安装命令:

curl -s http://get.dbsake.net > dbsake
chmod u+x dbsake
./dbsake --version
安装路径/dbsake frmdump frm文件路径/***.frm

这一步必须要做的,而且要保证表结构要保持跟之前挂掉的必须是一模一样的,用工具的原因就是为了保证表结构一致,如果不一致会导致后面的操作步骤出现问题或者数据乱码

第三步

调整innodb的参数
修改/etc/my.cnf文件,增加一个强制恢复相关的参数:
innodb_force_recovery=1
//此参数网上搜了一下大体意思好像是暴力恢复级别,有0-6个级别

第四步

现在新建的表也会生成新的frm和ibd文件了,frm文件如果是读取的之前数据库的frm文件那一般情况下表结构应该就是一致的了,但是ibd文件肯定是空的,然后让现在的这些新的空表的
表结构和表空间脱离

执行sql

alter table 要恢复的表名 discard tablespace;

这个sql会删除表明对应的.ibd文件

第五步

文件拷贝和赋予权限
将之前备份的挂掉的数据库的.ibd文件拷贝到这个新的数据库目录下(其实意思就是将.ibd文件替换成原来的)
拷贝完成后要将文件的访问权限修改成mysql,这里要## 注意,(赋权命令是在linux执行,可不是SQL)

chown -R mysql.mysql 对应表名的.ibd

mysql只认权限为mysql的ibd文件和frm文件,就算改成777,mysql也是不认的!!

导入表空间(即恢复数据)
执行SQL(在linux还是navicat自行选择)

alter table 要恢复的表名 import tablespace

然后打开表查看是表内数据是否恢复

在执行import tablespace的时候如果发生了报错问题报错信息为Lost connection xxxxxx,有以下几点原因

1:数据表结构不正确,再自己看看sql是否在复制的时候出现了问题;
2:尝试把建表语句中的索引语句删除后再执行建表,因为mysql会把每一个索引保存在mysql的系统表innodb_index_status表中,如果系统表没有恢复可能会发生报错;
以上方法仅仅一个表一个表的恢复,比较费事费力

批量恢复

1.批量脱离表空间sql

SELECT concat('alter table ', table_name, ' discard tablespace;')FROM information_schema.tablesWHERE table_schema = '新建的数据库的名字';

2.批量拷贝.ibd文件到新数据库下

3.批量导入表空间

SELECT concat('alter table ', table_name, ' import tablespace;')FROM information_schema.tablesWHERE table_schema = '新建的数据库的名字';

批量赋mysql文件权限
chown -R mysql.mysql *

最后

mysql的配置文件
innodb_force_recovery=1这个配置用完了记得改为0或者删除了,否则也会有问题。

这样恢复以后查看一下mysql的日志,可能会有报错的问题,基本也是因为系统表丢失的原因,感觉可以重装mysql,然后将恢复的数据直接迁移到最新的mysql中去

最后的最后,最方便快速的恢复方法还是备份数据库,赋sqlDump的恢复脚本一个,自行定义定时任务

保留7天备份,基本够用了

数据库备份脚本下载链接

感谢此次灾后重建工作的重要技术支持CSDN博主「奔跑吧人生」的原创文章。
原文链接:https://blog.csdn.net/ywg_1994/article/details/102692017

Mysql数据库数据恢复,mysql灾后数据重建,linux环境下mysql数据恢复相关推荐

  1. 在Linux环境下mysql的root密码忘记解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 2.修改MySQL的登录设置: # vi /etc/my.c

    在Linux环境下mysql的root密码忘记解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 2.修改MySQL的登录设置: # vi /etc/my.cnf ...

  2. 在Linux环境下mysql的root密码忘记解决方法(三种)

    这篇文章主要介绍了在Linux环境下mysql的root密码忘记解决方法,详细的介绍了3种解决办法,具有一定的参考价值,有兴趣的可以了解一下. MySQL密码的恢复方法之一 1.首先确认服务器出于安全 ...

  3. 在Linux环境下mysql的root密码忘记解决方法

    在Linux环境下mysql的root密码忘记解决方法 参考文章: (1)在Linux环境下mysql的root密码忘记解决方法 (2)https://www.cnblogs.com/hgj123/p ...

  4. Linux环境下mysql的日志

    MySQL日志 一.日志概述 1.日志作用 ​ MySQL日志记录了MySQL数据库日常操作和错误信息.MySQL有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MySQL数据库 ...

  5. mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042

    如果你跟我一样,有个25个G的.sql文件,想要导入到某个数据库取,而这个数据库有安装在windows上的,有安装在linux上的,你可以看看. 首先,如果你用Navicat这个工具去导入的话,太慢了 ...

  6. 基于Linux环境下MySQL数据库的建立

    文章目录 前言 数据库基本概念 数据组成 数据(DATA) 表 数据库 数据库类型 关系型数据库(SQL) 非关系型数据库(NoSQL) 时序型数据库(TSDB) MySQL数据库 概述 日志 安装数 ...

  7. linux环境下mysql主从数据库配置(maser-slave-replication)

    Mysql master/slave replication这个架构既可以支持高可用性双机备份系统的建立,也可以支持通过读写分离提高数据库写入和读出性能. Master slave replicati ...

  8. Linux环境下Mysql的安装教程及安装过程常见问题的解决方法

    最近安装mysql时看到一篇不错的文章 1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6 ...

  9. Linux环境下MySQL报Table ‘xxx‘doesn‘t exist错误解决方法

    问题:程序报Table 'xxx' doesn't exist 的错误,但是查看数据库发现该表已经存在且字母也没有拼错.原因:Linux 上的mysql默认是区分大小写导致的. 解决:改动mysql的 ...

最新文章

  1. C#时间(DateTime)格式化
  2. 基于OpenCV完成离散傅里叶变换
  3. ARM1176JZF-S/S3C6410 内存地址转换
  4. java学习与总结:索引
  5. (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现
  6. Python PyInstaller 安装 和 使用教程( 打包生成 exe )
  7. Java虚拟机栈详解
  8. Intel Skylake (Client) 架构/微架构/流水线 (5) - PAUSE指令时延
  9. Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)
  10. python去重计数_Python list去重及找出,统计重复项
  11. 【bzoj 2461】[BeiJing2011]符环(高维dp+记忆化搜索)
  12. 构建多基因的系统发育树
  13. 单片机及开发板介绍(学习笔记)
  14. python的or的用法_python中or和and的用法
  15. 【HTPC】第一期jellyfin windows版使用显卡硬件转码
  16. 0640-6.1.1-Hue上SQL查询结果显示不全异常分析-补充
  17. 早期的Twitte蠕虫
  18. 台达c语言,台达PL C通信协议ModbusASCII(DVP).pdf
  19. 三星android 5.0升级名单,三星可升级Android 7系统机型名单曝光
  20. ACM训练日记—1月20日

热门文章

  1. SD-WAN|跨境网络专线
  2. 使用下标给string类型赋值之后,cout输出变量为空的问题。
  3. Mybatis出现空指针异常解决方法
  4. potoshop基础入门-张敏-专题视频课程
  5. web窗体中连接按钮随心所欲放
  6. 使用iso制作qcow2镜像
  7. 机器学习故事汇-决策树算法
  8. 三类建筑物防雷检测 中小学防雷接地检测 河南万佳防雷验收报告
  9. 自己写个C++版本Handler来理解Android的Handler机制
  10. (三)趣谈软件需求分析