MySQL数据库崩溃恢复

前置条件:重要的事情说三遍,免得误操作!

不是你删了数据,是系统断电或者硬盘坏点导致的启动失败!!!

不是你删了数据,是系统断电或者硬盘坏点导致的启动失败!!!

不是你删了数据,是系统断电或者硬盘坏点导致的启动失败!!!

MySQL坏点恢复不了,ibdata1 文件损坏,数据库已经无法启动,并且你的数据库备份无法使用!

一:MySQL数据库恢复

因为我们既无法从备份恢复,也无法从ibdata1 启动恢复,这个时候我们需要将我们的数据库表以及数据库表数据恢复。

首先我们需要安装一个新的数据库哈,记住了新装一个数据库:

准备工作:

记住了,老的崩掉的数据库得任何文件都先别删除

在执行任何操作之前,请将老数据库“ \bin\mysql\mysql5.6.12\data”的完整副本复制备份

我们的恢复需要做的事:是将每个表以及每个表的数据恢复:
   
    你有文件夹 \bin\mysql\mysql5.6.12\data\mydb
    在该文件夹中,您有
        mytable.frm
        mytable.ibd

.frm    表结构
.ibd    实际表数据

二:开始恢复数据库

1:新安装的数据库,新建管理员账号,新建数据需要导入的数据库

#创建数据库的用户信息
CREATE USER 'spllier'@'%' IDENTIFIED BY 'spllier_2021';
#创建一个新的数据库
CREATE DATABASE spllier_zjz DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
#把新增库的所有权限赋值给 :spllier 用户 
GRANT ALL ON spllier_zjz.* TO 'spllier'@'%' WITH GRANT OPTION;
#刷新新加入的数据信息
FLUSH privileges;

2:开始安装表结构识别的环境,这里是Linux操作方式

[root@izwz99z5o9dc90keftqhlrz ~]# cd /
[root@izwz99z5o9dc90keftqhlrz ~]# mkdir download
[root@izwz99z5o9dc90keftqhlrz ~]# cd /download
[root@izwz99z5o9dc90keftqhlrz ~]# wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
[root@izwz99z5o9dc90keftqhlrz ~]# tar xvf mysql-utilities-1.6.5.tar.gz
[root@izwz99z5o9dc90keftqhlrz ~]# cd mysql-utilities-1.6.5
[root@izwz99z5o9dc90keftqhlrz ~]# python setup.py build
[root@izwz99z5o9dc90keftqhlrz ~]# python setup.py install
[root@izwz99z5o9dc90keftqhlrz ~]# mysqldiff --version

3:通过 .frm 文件识别表结构


把 .frm 文件上传至linux路径,识别表结构命令如下

[root@izwz99z5o9dc90keftqhlrz ~]# mysqlfrm --diagnostic /download/data/sys_menu.frm

4:开始创建新表,并且将老数据表数据导入

以下命令用MySQL数据库连接工具即可,Navicat 什么的都可以。

1:恢复表结构
CREATE TABLE `my_db`.`sys_menu` (
  `menu_id` bigint(20) NOT NULL AUTO_INCREMENT comment '菜单ID', 
  `menu_name` varchar(150) NOT NULL comment '菜单名称', 
  `parent_id` bigint(20) DEFAULT NULL comment '父菜单ID', 
  `order_num` int(4) DEFAULT NULL comment '显示顺序', 
  `path` varchar(600) DEFAULT NULL comment '路由地址', 
  `component` varchar(765) DEFAULT NULL comment '组件路径', 
  `is_frame` int(1) DEFAULT NULL comment '是否为外链(0是 1否)', 
  `is_cache` int(1) DEFAULT NULL comment '是否缓存(0缓存 1不缓存)', 
  `menu_type` char(3) DEFAULT NULL comment '菜单类型(M目录 C菜单 F按钮)', 
  `visible` char(3) DEFAULT NULL comment '菜单状态(0显示 1隐藏)', 
  `status` char(3) DEFAULT NULL comment '菜单状态(0正常 1停用)', 
  `perms` varchar(300) DEFAULT NULL comment '权限标识', 
  `icon` varchar(300) DEFAULT NULL comment '菜单图标', 
  `create_by` varchar(192) DEFAULT NULL comment '创建者', 
  `create_time` datetime DEFAULT NULL comment '创建时间', 
  `update_by` varchar(192) DEFAULT NULL comment '更新者', 
  `update_time` datetime DEFAULT NULL comment '更新时间', 
  `remark` varchar(1500) DEFAULT NULL comment '备注', 
PRIMARY KEY `PRIMARY` (`menu_id`) USING BTREE
) ENGINE=InnoDB ROW_FORMAT = 5, COMMENT '菜单权限表';

2:删除新表的表空间
ALTER TABLE my_db.sys_menu DISCARD TABLESPACE;

3:将崩溃数据库的表 sys_menu.ibd 文件挪到新数据库 \data\my_db\ 里面
这一步是将崩溃数据库得表空间数据挪到新数据库,后面做表空间的新挂钩

4:将刚刚放入 my_db 里面的表空间导入到表:sys_menu 
ALTER TABLE my_db.sys_menu IMPORT TABLESPACE;

5:查一下我们的数据恢复了没有
SELECT * FROM my_db.sys_menu LIMIT 10;

 5:当你的表与数据都恢复了之后,你数据库就找回了,恭喜你!!!

三:数据库开启自动备份

数据库不开启备份就是害自己,我就是一个刚刚开发一个月的系统崩溃,没有管自动备份的问题,搞得恢复数据库用了一天,还是问BDA才找到的这个方式,大家如果开启了自动备份,什么问题都没有了,同志们。

CentOS7 MySQL定时自动备份实现https://blog.csdn.net/yexiaomodemo/article/details/103655159icon-default.png?t=L892https://blog.csdn.net/yexiaomodemo/article/details/103655159

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值