MySQL数据库崩溃恢复
Posted 悟能的师兄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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才找到的这个方式,大家如果开启了自动备份,什么问题都没有了,同志们。
以上是关于MySQL数据库崩溃恢复的主要内容,如果未能解决你的问题,请参考以下文章