Answers:
该文件ibdata1
是InnoDB基础结构的系统表空间。
它包含几个对InnoDB至关重要的信息类
请注意ibdata1在InnoDB Universe中的位置(在右侧)
您可以ibdata1
通过启用innodb_file_per_table来将数据页和索引页分开。这将导致任何新创建的InnoDB表将数据和索引页存储在外部.ibd
文件中。
例
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
,创建 /var/lib/mysql/mydb/mytable.frm
/var/lib/mysql/mydb/mytable.ibd
无论InnoDB表存储在何处,InnoDB的功能都需要查找表元数据,并存储和检索MVCC信息以支持ACID合规性和事务隔离。
这是我过去有关从ibdata1分离表数据和索引的文章
Oct 29, 2010
:我在StackOverflow中的原始帖子Nov 26, 2011
: 文件和表user_analysis中的第6308行的错误1114(HY000)已满Feb 03, 2012
:MySQL InnoDB中表的计划优化Mar 25, 2012
:为什么InnoDB将所有数据库存储在一个文件中?Apr 01, 2012
:建议使用innodb_file_per_table吗?您可以继续让ibdata1存储所有内容,但这会使LVM快照真正繁琐(我个人认为)。
您需要使用My 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清理后可以回收多少浪费的空间。
SpaceToReclaim
。这是兆字节吗?百分?字节?
94
用ibdata1
文件大小(以GB 为单位)替换该数字,这样SpaceToReclaim
就会给您以GB为单位的大小。
该文件ibdata1
不是ibdatal
,并且包含您的所有InnoDB数据库。如果删除它,则会丢失所有数据。
有关如何处理它的一些想法,请参见如何在MySQL中收缩/清除ibdata1文件。
如果您将innodb用作MySQL引擎,则默认情况下会将所有数据库存储到ibdata1中。另外还有日志文件ib_logfile0和ib_logfile1。不要删除这些文件。