login到我的Webmin控制面板,我注意到几乎所有的磁盘空间都已满。 我search了我系统中十个最大的文件/目录,发现一个名为ibdata1的文件占用了大约94GB的空间。 它驻留在我的/ var / lib / mysql目录中。
ibdata1做什么? 我可以安全地删除它吗? 我的假设是这是某种倾销,但这只是一个疯狂的猜测。
文件ibdata1
是InnoDB基础结构的系统表空间。
它包含了几个对InnoDB至关重要的信息类
请注意ibdata1在InnoDB Universe中的位置(右侧)
您可以通过启用innodb_file_per_table将数据和索引页面从ibdata1
分离出来。 这将导致任何新创build的InnoDB表将数据和索引页存储在外部.ibd
文件中。
例
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
,创build/var/lib/mysql/mydb/mytable.frm
/var/lib/mysql/mydb/mytable.ibd
数据/索引页 无论InnoDB表存储在哪里,InnoDB的function都需要查找表元数据并存储和检索MVCC信息,以支持ACID合规性和事务隔离 。
这里是我过去的关于从ibdata1分离表数据和索引的文章
Oct 29, 2010
: 我在StackOverflow中的原始文章 Nov 26, 2011
: 错误1114(HY000)6308行中的文件&表user_analysis已满 Feb 03, 2012
: 计划在MySQL InnoDB中优化表 Mar 25, 2012
: 为什么InnoDB将所有数据库存储在一个文件中? Apr 01, 2012
: innodb_file_per_table是可取的吗? 您可以继续让ibdata1存储所有内容,但是这使得执行LVM快照成为难题(我个人认为)。
您需要使用我的StackOverflow后,并永久收缩该文件。
请运行此查询:
SELECT ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim FROM (SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes FROM information_schema.tables WHERE engine='InnoDB') A;
这将告诉您在应用InnoDB清理后可以回收多less浪费的空间。
该文件是ibdata1
,而不是ibdatal
,它包含了所有的InnoDB数据库。 如果删除它,则会丢失所有数据。
有关如何处理它的一些想法,请参阅如何收缩/清除MySQL中的ibdata1文件 。
如果你使用innodb作为默认的MySQL引擎将把你所有的数据库存储到ibdata1中。 还有日志文件ib_logfile0和ib_logfile1。 不要删除这些文件。