首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表位于无法丢弃的系统表空间0中。

表位于无法丢弃的系统表空间0中。
EN

Stack Overflow用户
提问于 2013-11-26 04:25:07
回答 2查看 1.5K关注 0票数 3

我正在尝试运行以下查询:

代码语言:javascript
复制
alter table about_member discard tablespace;

但是,当我这样做时,我的错误日志将输出以下内容:

InnoDB:错误:表diskise.about\_member InnoDB:在不能丢弃的系统表空间0中

我能做什么,这样我就可以放弃这个表空间,这样我就可以导入我拥有的备份了?

EN

回答 2

Stack Overflow用户

发布于 2013-11-26 04:53:15

请参阅这页手册

默认情况下,所有InnoDB表和索引都存储在系统表空间中。作为替代,您可以将每个InnoDB表及其索引存储在自己的文件中。此特性称为“多个表空间”,因为在此设置生效时创建的每个表都有自己的表空间。 表空间的优点 在截断或删除表时,可以回收磁盘空间。对于关闭文件/表模式时创建的表,截断或删除它们会在ibdata文件内部创建空闲空间。这个空闲空间只能用于新的InnoDB数据。

听起来,您在默认的表空间中创建了表,因此不能丢弃表空间。也就是说,您应该能够导入数据而不首先丢弃表空间,除非您刚刚用完了磁盘空间。

票数 1
EN

Stack Overflow用户

发布于 2016-07-05 07:45:43

当我试图从.ibd文件中恢复一个表时,我遇到了同样的问题。我知道已经很长时间了,所以我在这里为那些仍然遇到同样问题的人写了这篇文章。

继续使用@Ed的答案,您需要更改mysql全局变量innodb_file_per_table,让mysql将.ibd存储在自己的文件中,而不是使用系统表空间

要实现这一点,您可以这样做(也请参阅官方文件):

  • 更改my.cnf文件,添加以下行并重新启动mysql服务器 mysqld innodb_file_per_table=1
  • 在mysql命令中设置全局变量(有时由于安全问题而不能工作) 设置全局innodb_file_per_table=1;

在此生效之前,您可能需要放下您的表。完成此操作后,您将能够看到.ibd目录中的PATH/TO/MYSQL/DB_NAME文件(例如,/var/lib/mysql/DB_NAME)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20208476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档