我有一些大型的InnoDB数据库,接近1TB。
为了在使用替代存储时释放一些空间,我删除了一些未使用的InnoDB索引,希望它能腾出一些空间。
它没有释放任何东西。
由于它是InnoDB,引擎会使用空的分配空间来进一步插入和索引吗?
发布于 2012-08-01 05:10:23
InnoDB将数据存储在表空间中。默认情况下,只有一个表空间,所有数据库的数据都存储在一个文件中。该文件具有数据字典、表以及其中的索引。有一个全局参数innodb_data_file_path定义了这个表空间文件。它具有类似于ibdata1:256M:autoextend的语法,这意味着在开始时将创建一个大小为256 MB的文件,然后每当数据大小超过此值时,该文件将自动扩展。innodb_autoextend_increment变量在MB中定义了每个增量应该是多少。
如何获得索引空间?
您应该首先备份所有InnoDB表,并将my.ini/my.cnf中的设置更改为innodb_file_per_table并重新启动MySQL服务器。现在导入这些表,每个表都有自己的表空间,可以在删除表时缩小大小。
--这些是可能的解决办法:
发布于 2013-09-04 21:11:14
答:https://stackoverflow.com/a/8932289/82114
如果您不使用innodb_file_per_table,那么回收磁盘空间是可能的,但是非常繁琐,并且需要大量的停机时间。
“如何”可以在这里找到:http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html
请确保在转储中保留模式的副本。
当前,无法从系统表空间中删除数据文件。若要减小系统表空间大小,请使用以下过程: 使用mysqldump转储所有InnoDB表。 停止服务器。 删除所有现有的表空间文件,包括ibdata和ib_log文件。如果希望保留信息的备份副本,则在删除MySQL安装中的文件之前,将所有ib*文件复制到另一个位置。 删除.frm表的任何InnoDB文件。 配置新的表空间。 重新启动服务器。 导入转储文件。
发布于 2012-08-15 15:14:33
您应该重新组织InnoDB基础设施。为什么?因为ibdata1从不收缩。在innodb被禁用后,它会在匆忙中膨胀ibdata1吗?除了数据和索引之外,ibdata1中还有什么?
尽管如此,您需要迁移您的数据,删除所有InnoDB中继文件,并用两件事重新加载:
2010年10月29日,我写下了如何做到这一点:Howto: Clean a mysql InnoDB storage engine?
接下来,您可以很好地缩小单个InnoDB表。例如,要收缩mydb.mytable:
ALTER TABLE mydb.mytable ENGINE=InnoDB;https://stackoverflow.com/questions/11751792
复制相似问题