2

我启用了 innodb_file_per_table 选项,因此每个表都有一个 .frm 和一个 .ibd 文件。不寻常的是,还有一些文件似乎来自文件系统上的临时表:

/db/mysql$ ls
<snip>
 #sql2-25fe-5.frm
 #sql2-25fe-5.ibd
 #sql2-55f4-73.frm
 #sql2-55f4-73.ibd
 #sql-55f6_13b626.ibd
 #sql-6abe_e3.ibd
</snip>

其中一个相当大,所以如果安全的话,我想摆脱它们。我尝试将它们像常规表和临时表一样删除,但无论哪种方式都不起作用。

drop table `#sql2-25fe-5`;
drop temporary table `#sql2-25fe-5`;

有任何想法吗?谢谢

4

1 回答 1

1

只是为了清除这一点:

转储和重新加载所有表释放了我想要的空间(innobackupex 备份和恢复不起作用)。我相信这些永久临时表是 mysql 中已修复的两个错误之一的结果:

InnoDB:如果在为 InnoDB 表重建聚集索引的 ALTER TABLE 操作期间服务器在某个精确时刻崩溃,则之后可能无法访问原始表。这种操作的一个示例是 ALTER TABLE ... ADD PRIMARY KEY 如果服务器在此操作期间停止,则修复保留原始表。您可能仍需要手动重命名 .ibd 文件以恢复原始表内容:在 MySQL 5.6 及更高版本中,将数据库目录中的 #sql-ib$new_table_id.ibd 重命名为 table_name.ibd;在 MySQL 5.6 之前,要重命名的临时文件是 table_name#1 或 #2。(错误 #14669848)

https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-30.html

或者

InnoDB:对于发生错误的 UPDATE 语句,在更新期间打开的临时文件可能不会被关闭。(错误 #15978766)

https://dev.mysql.com/doc/relnotes/mysql/5.5/en/news-5-5-32.html

于 2013-08-23T01:56:42.230 回答