我有一些大的InnoDB数据库,接近1TB。
为了腾出一些空间上的备用存储工作时,我删除了一些不使用的InnoDB的指标,希望它会释放一些空间。
它释放什么。
由于这是InnoDB中,将发动机用于进一步的插入和索引空分配的空间?
谢谢
我有一些大的InnoDB数据库,接近1TB。
为了腾出一些空间上的备用存储工作时,我删除了一些不使用的InnoDB的指标,希望它会释放一些空间。
它释放什么。
由于这是InnoDB中,将发动机用于进一步的插入和索引空分配的空间?
谢谢
在表空间的InnoDB存储数据。 默认情况下,有一个单独的表空间,并且所有数据库的数据存储在一个文件中。 这个文件有数据字典表,以及在它的索引。 有一个全局参数innodb_data_file_path
定义此表空间文件。 它就像一个语法ibdata1:256M:autoextend
,这意味着在开始大小为256 MB将被创建,然后每当数据大小超过这一点,该文件将自动扩展的文件。 该innodb_autoextend_increment
变量以MB为单位的,通过每个增量应该是多少定义。
怎么你会得到你的索引空间?
你应该先备份所有InnoDB表和更改设置my.ini/my.cnf
为innodb_file_per_table
,并重新启动MySQL服务器。 现在,导入这些表现在每个表都会有它自己的表空间,可以在删除表缩小尺寸。
这些是可能的解决方法:
如果你不使用innodb_file_per_table,回收磁盘空间是可能的,但相当繁琐,需要停机的显著量。
“如何”可以在这里找到: http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html
此外,请务必保留您的架构的副本转储。
目前,您无法从系统中删除表空间的数据文件。 为了减少系统表空间的大小,使用此过程:
使用mysqldump转储所有InnoDB表。
停止服务器。
删除所有现有的表空间文件,包括ibdata和ib_log文件。 如果你想保留的信息进行备份,然后将所有IB *文件复制到其他位置,MySQL安装在删除文件之前。
删除所有.FRM文件InnoDB表。
配置新的表空间。
重新启动服务器。
导入转储文件。
你应该重新组织InnoDB的基础设施。 为什么? 由于ibdata1中永远不会收缩。 随着innodb_file_per_table禁用,将在匆忙臃肿ibdata1中? 除了数据和索引,什么住在ibdata1中?
话虽这么说,你需要迁移的数据出来,删除所有InnoDB的传递文件,并与两件事情重装:
我写了如何做到这一点回到2010年10月29日: HOWTO:清洁MySQL的InnoDB存储引擎?
展望未来,你可以alwsy收缩个人InnoDB表。 例如,缩小mydb.mytable:
ALTER TABLE mydb.mytable ENGINE=InnoDB;