我认为我的 MySQL 表已损坏。在数据库中,我只能看到一个.frm
文件,而没有文件.mdi
或.mdy
文件。我该如何从这个.frm
文件中恢复数据?
我认为我必须从ibdata1
文件中获取数据?
答案1
文件中没有数据.frm
;该文件仅包含表定义。但是,如果您没有运行 MyISAM 表,则预计不会有.MYD
或.MYD
文件,因为它们仅用于 MyISAM 表。相反,数据将位于其他地方 — — 例如,对于 InnoDB 表,它将位于您的ibdata*
文件中(或者,如果您已打开,则可能位于每个表的文件中file_per_table
)。
答案2
.frm 文件实际上不包含任何数据——它只是表定义。您可以阅读具体内容这里。
答案3
使用工具数据库。
- 使用下载
curl -s get.dbsake.net > dbsake
- 使其可执行
chmod u+x dbsake
- 从 .frm 文件中检索信息
./dbsake frmdump path/to/frm/file.frm
,将输出类似以下内容:
--
-- Table structure for table `mytable`
-- Created with MySQL Version 5.7.28
--
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(1000) DEFAULT NULL,
`url` varchar(1000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
选项 2
您还可以通过以下方式启动 mysql 沙盒实例:
dbsake sandbox -D mysql-backup-dir/
~/sandboxes/sandbox_20200621_192450/sandbox.sh start
~/sandboxes/sandbox_20200621_192450/sandbox.sh mysql