[MYSQL]mysql8.0数据库崩溃后只有.ibd怎么还原?最好的还原.ibd数据库方式教程

来源:原创 浏览:1706次 时间:2021-05-24
做网站找雨过天晴工作室

[MYSQL]mysql8.0数据库崩溃后只有.ibd怎么还原?最好的还原.ibd数据库方式教程

这几天非常难过,服务器奔溃了,只能下载到mysql8.0下的.ibd文件,尝试的复制到数据库data目录下,发现不识别,这个不能像mysql5.6那样直接把数据库复制过去就行了。网上找了很多教程,尝试了很多次,终于实现了还原最新数据库。

这里我把具体操作教程贴出来,方便大家使用。

第一步:导入备份的老的数据库,这一布是为了获取数据表,至于数据库里面的数据没有关系,因为后面都会删除;

第二步:用phpmyadmin或者adminer:mysql数据库管理工具登录数据库,在SQL命令里面运行:alter table 你的数据表名 discard tablespace; 这一步是为了把ibd文件解除绑定。这时候看下数据库文件物理路径 为空了

第三步:把下载下来的.ibd文件全部复制到对应的数据库路径下,这里是指data目录下的物理路径;

第四步:在SQL命令里运行:alter table 你的数据表名 IMPORT tablespace; 这一步是为了ibd文件绑定. 打开数据库,数据恢复可以了。看看数据库是不是最新的。


这里参考了以下文章:

1,第一步创建一个数据库,
在这里插入图片描述
2,创建表结构
CREATE TABLE bearshop_user (
user_id int(11) NOT NULL AUTO_INCREMENT,
nickname varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
wxaccount varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
mobile varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
avatar varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
openid varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
price decimal(10, 2) NOT NULL DEFAULT 0.00,
freezeprice decimal(10, 2) NOT NULL DEFAULT 0.00,
signature varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
userintro varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
useredittime int(11) NULL DEFAULT NULL,
paypasswd varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
cardname varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
cardid varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
access_token varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
contract varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
spoints int(11) NOT NULL DEFAULT 0,
upoints int(11) NOT NULL DEFAULT 0,
spassword varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
city varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
province varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
country varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
is_company tinyint(1) NULL DEFAULT 0 COMMENT ‘0.未认证 1.已认证’,
is_company_type tinyint(1) NULL DEFAULT 0 COMMENT ‘0.个人 1.企业’,
company_valid int(11) NULL DEFAULT NULL,
qunfa_time varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
qunfa_num tinyint(1) NOT NULL DEFAULT 0,
isauth tinyint(1) NOT NULL DEFAULT 0 COMMENT ‘0.未认证 1.认证’,
authcode int(5) NOT NULL,
subscribe tinyint(1) NOT NULL DEFAULT 0 COMMENT ‘0.未关注 1.已关注’,
subscribe_time int(11) NOT NULL,
platform_pingbi tinyint(1) NULL DEFAULT 0 COMMENT ‘0.未屏蔽 1.屏蔽’,
is_btwoc tinyint(1) NULL DEFAULT 0 COMMENT ‘0.不是 1.是’,
recommend_store tinyint(1) NULL DEFAULT 0 COMMENT ‘0.否 1.是’,
discoverid int(11) NOT NULL DEFAULT 0,
auto_guanzhu tinyint(1) NOT NULL DEFAULT 0 COMMENT ‘0.未自动 1.自动’,
ziying tinyint(2) NULL DEFAULT 0,
vip_order_sn varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
islock tinyint(2) NULL DEFAULT 0,
registrationid varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
gzhopenid varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (user_id) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT=83 DEFAULT ChARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

其中 ENGINE = INNODB AUTO_INCREMENT=83 DEFAULT ChARSET=utf8mb4 ROW_FORMAT=DYNAMIC; 之前到处的再次导入的时候有点问题。所以必须一样。创建表找到文件物理路径,成功进入下一步。
3, 执行 alter table bearshop_user discard tablespace; ibd文件解除绑定。这时候看下数据库文件物理路径 为空了
4,net stop mysql; mysql 停止服务,把备份的 ibd文件 复制到之前的物理路径, net start mysql; mysql 启动服务。在这里插入图片描述
5 alter table bearshop_user IMPORT tablespace; ibd文件绑定. 打开数据库,数据恢复可以了。