我正在尝试运行以下查询:
alter table about_member discard tablespace;但是,当我这样做时,我的错误日志将输出以下内容:
InnoDB:错误:表
diskise.about\_memberInnoDB:在不能丢弃的系统表空间0中
我能做什么,这样我就可以放弃这个表空间,这样我就可以导入我拥有的备份了?
发布于 2013-11-26 04:53:15
请参阅这页手册
默认情况下,所有InnoDB表和索引都存储在系统表空间中。作为替代,您可以将每个InnoDB表及其索引存储在自己的文件中。此特性称为“多个表空间”,因为在此设置生效时创建的每个表都有自己的表空间。 表空间的优点 在截断或删除表时,可以回收磁盘空间。对于关闭文件/表模式时创建的表,截断或删除它们会在ibdata文件内部创建空闲空间。这个空闲空间只能用于新的InnoDB数据。
听起来,您在默认的表空间中创建了表,因此不能丢弃表空间。也就是说,您应该能够导入数据而不首先丢弃表空间,除非您刚刚用完了磁盘空间。
发布于 2016-07-05 07:45:43
当我试图从.ibd文件中恢复一个表时,我遇到了同样的问题。我知道已经很长时间了,所以我在这里为那些仍然遇到同样问题的人写了这篇文章。
继续使用@Ed的答案,您需要更改mysql全局变量innodb_file_per_table,让mysql将.ibd存储在自己的文件中,而不是使用系统表空间。
要实现这一点,您可以这样做(也请参阅官方文件):
在此生效之前,您可能需要放下您的表。完成此操作后,您将能够看到.ibd目录中的PATH/TO/MYSQL/DB_NAME文件(例如,/var/lib/mysql/DB_NAME)。
https://stackoverflow.com/questions/20208476
复制相似问题