Answers:
文件ibdata1是InnoDB基础结构的系统表空间。
它包含几个对InnoDB至关重要的信息类
您可以通过启用innodb_file_per_table将 ibdata1的数据页面和索引页面离婚。这将导致任何新创建的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是否明智?ib_logfile0
,ib_logfile1
)如果您想知道ib_logfile0
和ib_logfile1
的用途,它们就是InnoDB重做日志。在完全关闭mysqld之前,切勿擦除或调整它们的大小。如果mysqld崩溃,则只需启动mysqld。它将读取ib_logfile0
并ib_logfile1
检查未发布到中的双写缓冲区的任何数据更改ibdata1
。它将重播(重做)这些更改。一旦它们被重播和存储,mysqld就可以进行新的数据库连接了。
innodb_file_per_table disabled, Data/Index Pages Stored in /var/lib/mysql/mydb/mytable.ibd
而innodb_file_per_table enbled, Data/Index Pages Stored in ibdata1
应该是反过来的,不应该吗?