程序报错表空间没有了

mjava.sal .SQLException: Tablespace is missing for table ***

但查看mysql表已经不存在了,直接创建这个表又提示表空间已存在。

-Tablespace'gateway,recipe info''exists.

到mysql安装目录看/data目录下有.frm文件,没有.ibd文件

和运维确认后直接手动删除.frm文件,再重新创建表,还是提示表空间已存在

最后和运维确认,删错了frm文件,我删的user/local下的,实际上3月28日进行了数据库恢复,恢复后的数据文件目录再home/下,home下有ibd没有frm,local下有frm但没ibd,不知道数据库经历了怎么个坎坷, 运维继续操作删除.idb后,创建表还是不行

ERROR 1030 (HY000): Got error 168 from storage engine  最终是运维框框一顿操作,加了数据库名成功了,但还没来得及了解到底为啥。

.frm 文件

        这种文件类型是用于存储表的结构定义的。每当您在 MySQL 中创建一个表时,系统就会为该表生成一个对应的 .frm 文件。.frm 文件包含了表的结构信息,比如列的名称、数据类型、默认值等,但它并不包含表中的实际数据。即使在老版本的 MySQL 中,不同的存储引擎(比如 MyISAM 和 InnoDB)都会使用 .frm 文件来存储表结构信息。


.ibd 文件:

        这种文件类型是 InnoDB 存储引擎特有的文件,用于存储表的数据和索引。
InnoDB 是 MySQL 默认的存储引擎,它支持事务处理、行级锁定和外键等功能。每个使用 InnoDB 存储引擎的表,可以选择将数据和索引存储在单独的 .ibd 文件中,也可以统一存储在共享表空间文件(ibdata1)中。

        从 MySQL 5.6 版本开始,推荐使用“文件-每表”模式(file-per-table mode),在这种模式下,每个表的数据和索引被存储在独立的 .ibd 文件中。这样做的好处包括更好的性能、更容易的数据恢复和更灵活的空间管理。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐