前言
由于项目地址经常断电,导致数据库频繁断开。最终,整个库都打不开了,最终的方案是建立新的库,将原来的ibd文件覆盖新的文件,达到数据恢复的效果,数据库版本都是8.0。
操作步骤:
1、找到原数据库的ibd文件存放地址,一般在mysql的data目录下,将其保存好。
2、 创建新的数据库(数据库编码格式要和之前的统一)。
3、 创建表,表结构的话必须要和之前的表结构一致。
4、 表创建好之后,找到mysql目录下的data目录,里面有每个库的名称,找到你创建的库文件夹,进去将原数据库的ibd文件复制到当前库文件夹下,覆盖现在的表的ibd文件,在这过程中,你可能弹出以下提示。这时候,你需要先停止mysql的运行,点击重试即可覆盖原文件。
5、覆盖之后,你需要启动mysql服务,这时候你在Navicat打开新创建的数据库,打开表的时候,会弹出以下提示:
6、建立查询面板,执行sql,如果显示执行成功的话,再次点击表即可看到数据了。
alter table 表名 IMPORT TABLESPACE;
如果报错以下提示的话
建议每次在执行前带上
-- 修改SQL_MODE
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));alter table 表名 IMPORT TABLESPACE row_format=DYNAMIC;
7 、如果出现以下报错的话
Error Code: 1808. Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, <table_name>.ibd file has ROW_TYPE_COMPACT row format.)
这是由于mysql 5.6的文件恢复到mysql 5.7版本导致的错误,需要在建表语句后面添加ROW_FORMAT=COMPACT,如下所示:
create table test(id int, name varchar(10)) row_format=compact;