1.背景
由于某开发人员维护线上数据库,不小心执行了删除操作,将sys_menu,sys_role,sys_user,业务数据表数据全部删除。
下面开始恢复
2.找到data目录下的文件
数据库因为使用的InnoDB存储引擎,该项目下只有frm和ibd文件,frm文件存储数据结构,idb存储数据。
如果使用MyISAM存储引擎,则有三个文件 ①frm文件存储表定义;②.MYD(MYData)文件是存储数据的文件;③.MYI(MYIndex)是索引文件
3.数据结构
如果不知道数据表的结构,需要还原表结构才能进行数据恢复
下载 MySQL Utilities MySQL :: Download MySQL Utilities (Archived Versions)
进入.frm目录中执行获取表结构命令
mysqlfrm --diagnostic ./table.frm
执行完mysqlfrm命令之后
以其中sys_user示例
CREATE TABLE `sys_user` (
`id` bigint(20) UNSIGNED NOT NULL,
`org_id` bigint(20) NULL DEFAULT NULL COMMENT '所属机构',
`role_id` bigint(20) NULL DEFAULT NULL COMMENT '角色ID',
`type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '用户类型:1管理员0操作员',
`login_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户账号(登录账户)',
`login_pwd` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电子邮箱',
`mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机',
`skin_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录界面样式',
`menu_style` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单栏样式',
`last_login_time` bigint(20) NULL DEFAULT 0 COMMENT '最后登录时间',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态:\n 0:停用\n 1:启用',
`creator` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建人',
`creator_type` int(11) NULL DEFAULT 0,
`modifier` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '修改人',
`remark` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注(描述等)',
`created_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '记录创建时间,存储格式为整型时间戳',
`modified_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '记录最后一次修改时间,存储格式为整型时间戳',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统用户,抽象意义的用户' ROW_FORMAT = COMPACT;
SET FOREIGN_KEY_CHECKS = 1;
如果拥有表结构,可不进行上面步骤。
4.修改数据库配置
数据库配置文件通常是my.cnf或者是my.ini
innodb_file_per_table=1###保证每个表拥有独立的idb文件
wait_timeout=600 #数据量大,配置时间可以更长
5.创建表
根据第三个步骤产生的sql创建新表,如果已经有表,可以略过
6.恢复数据
在新库里面恢复:
需要先将表的idb文件释放
alter table table_name DISCARD TABLESPACE;
释放完成后,需要将恢复的idb文件和frm文件拷贝到mysql的data目录下
执行恢复操作
alter table table_name IMPORT TABLESPACE;
在原库中恢复:
直接执行恢复操作:
alter table table_name IMPORT TABLESPACE;