什么是mysql中的iblog文件


15

我想了解这些ibdata文件,因为它们在崩溃恢复过程中起着至关重要的作用。我在网上找不到合适的资源。

Answers:


17

ibdata1

文件ibdata1是InnoDB基础结构的系统表空间。

它包含几个对InnoDB至关重要的信息类

  • 表格数据页
  • 表索引页
  • 数据字典
  • MVCC控制数据
    • 撤消空间
    • 回滚段
  • 双重写入缓冲区(在后台写页面以避免操作系统缓存)
  • 插入缓冲区(对二级索引的更改)

单击此处查看图片表示

您可以通过启用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合规性事务隔离

这是我过去有关从ibdata1中分离表数据和索引的文章

iblog文件(又名 ib_logfile0ib_logfile1

如果您想知道ib_logfile0ib_logfile1的用途,它们就是InnoDB重做日志。在完全关闭mysqld之前,切勿擦除或调整它们的大小。如果mysqld崩溃,则只需启动mysqld。它将读取ib_logfile0ib_logfile1检查未发布到中的双写缓冲区的任何数据更改ibdata1。它将重播(重做)这些更改。一旦它们被重播和存储,mysqld就可以进行新的数据库连接了。


如何在这些日志文件中保留空间?我的意思是问...“对于新的innodb事务,如果这些日志文件完全填满,将如何使用相同的日志文件。...”
Uday 2012年

我之前的评论是关于ib_log文件的。...– 2012
Uday

1
@ Uday在日志缓冲区变空之前,该空间将不会保留在iblog文件上。这是一个动态过程,其中日志空间基于记录在日志缓冲区中的停滞事务更改而被占用和释放。这些日志文件会在您执行一些巨大的数据负载时被完全占用,这会导致Innodb错误,指出“ InnoDB:超出了日志组的容量”。这意味着日志文件的大小应该更大。希望我的解释消除您的疑问。
Gopinath 2012年

innodb_file_per_table disabled, Data/Index Pages Stored in /var/lib/mysql/mydb/mytable.ibdinnodb_file_per_table enbled, Data/Index Pages Stored in ibdata1应该是反过来的,不应该吗?
rabudde16年

1
@rabudde现在已修复。再次感谢你 !!!
RolandoMySQLDBA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.