文件ibdata1是InnoDB基础结构的系统表空间.
它包含几个对InnoDB至关重要的信息类
>表数据页面
>表索引页面
>数据字典
> MVCC控制数据
>撤消空间
>回滚段
>双写缓冲区(后台编写的页面,以避免操作系统缓存)
>插入缓冲区(对二级索引的更改)
请注意ibdata1在InnoDB Universe(右侧)的位置
您可以通过启用innodb_file_per_table将数据和索引页与ibdata1分开.这将导致任何新创建的InnoDB表将数据和索引页存储在外部.ibd文件中.
例
> datadir是/ var / lib / mysql
> CREATE TABLE mydb.mytable(…)ENGINE = InnoDB;,创建/var/lib/mysql/mydb/mytable.frm
> innodb_file_per_table已启用,数据/索引页面存储在/var/lib/mysql/mydb/mytable.ibd中
> innodb_file_per_table已禁用,数据/索引页存储在ibdata1中
无论InnoDB表存储在何处,InnoDB的功能都需要查找表元数据并存储和检索MVCC信息以支持ACID compliance和Transaction Isolation.
以下是我过去关于从ibdata1分离表数据和索引的文章
接下来做什么
你可以继续让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清理后可以回收多少浪费的空间.