问题发现

前段时间,数据库莫名其妙G了,然后起了很久也起不来,于是决定重新安装mysql(以mariadb为例),好再原数据库的文件还在,准备把数据库装好后,执行原数据库.ibd文件进行数据恢复。

问题解决

第一步:查找mysql数据目录

如果是普通安装,可以使用mysql命令查看数据库目录位置:

show global variables like "%datadir%";

如果是docker安装,使用docker命令查看资源路径:

docker ps

在这里插入图片描述
查看容器详细信息:

docker inspect mariadb

找到红线标记处,为资源目录地址
在这里插入图片描述

第二步:创建表

这里不做演示,可以手动创建或者把其他服务器的表结构复制进来。

注意:创建的表结构和.ibd文件结构保持一致。

比如:Row_format保持一致,查询表属性,执行命令:

show table status like '<table_name>'\G

在这里插入图片描述

第三步:解除表空间

登录mysql数据库,执行命令(无需关闭数据库):

ALTER TABLE <table_name> DISCARD TABLESPACE;

在这里插入图片描述
执行完后,数据库文件下的.ibd文件会消失。

如果涉及数据库较多建议使用脚本执行。

第四步:复制原数据库.ibd文件

找到原数据库目录,将需要恢复的.ibd文件复制到新数据库目录中。

第五步:导入表空间

执行命令(无需关闭数据库):

ALTER TABLE <table_name>  IMPORT TABLESPACE;

在这里插入图片描述
执行完,刷新数据库,可看到数据已经恢复。

再执行的过程中,可能会有突发情况。

ERROR 1030 (HY000): Got error 194 “Tablespace is missing for a table“ from storage engine InnoDB

解决:ERROR 1030 (HY000): Got error 194 “Tablespace is missing for a table“ from storage engine InnoDB

更多推荐