使用.ibd文件恢复Mysql数据库数据
- 问题发现
- 问题解决
- 第一步:查找mysql数据目录
- 第二步:创建表
- 第三步:解除表空间
- 第四步:复制原数据库.ibd文件
- 第五步:导入表空间
- ERROR 1030 (HY000): Got error 194 “Tablespace is missing for a table“ from storage engine InnoDB
问题发现
前段时间,数据库莫名其妙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