Innodb和Ibdata1:您需要知道的事情
#mysql #innodb #ibdata1

IBDATA1是InnoDB存储引擎的国王 - 该文件保留了来自InnoDB存储引擎的数据,索引和元数据。它是如何工作的?我们可以为使用存储引擎的工作做什么,以尽可能有效?在此博客中查找。

如果您至少在数据库空间旁边呆了一会儿,并且知道您的MySQL或其任何口味,那么您肯定会知道Innodb是什么 - 这是主要存储空间之一自MySQL 5.5.5于2010年发行以来,MySQL提供的引擎也是默认存储引擎。InnoDB具有许多独特的怪癖和自身独特的功能,但也许最有趣的一个是主要文件。存储引擎ibdata1。

什么是ibdata1?

ibdata1是整个InnoDB基础架构的国王 - 该文件通常称为tabrespace数据文件,这是一个很好的原因:该文件存储与InnoDB相关的所有内容,包括,但不限于:

  • 基于InnoDB的表的数据和索引(如果启用了设置innodb_file_per_table,则此事实不适用,即设置为1)
  • 的值
  • doubleWrite和插入缓冲区的双重缩写缓冲区由InnoDB数据文件中尚未中的页面组成,并且插入缓冲区大多用于与索引更改一起使用。
  • 回滚片段 - 这些段允许无办事交易的回滚操作完成。
  • 撤消空间 - 该空间包含记录,告诉MySQL如何扭转交易所做的最新更改的影响。

就MySQL而言,IBDATA1是其旗舰存储引擎独有的 - 使用Percona XtradB时(存储引擎也是默认引擎。)InnoDB以支持酸性交易的能力而广为人知。酸是一个非常重要的功能,即使出现问题也可以保证数据完整性和一致性 - 例如,如果我们运行查询并且电力熄灭,我们的数据就不会受到影响。但是,有一个警告 - 虽然每当我们想要的InnoDB中存储的数据可以删除,但存储在ibdata1中的数据不能。虽然可以通过执行简单的Drop Table命令来随时删除基于InnoDB的表(请参见下文),但IBDATA1文件的大小只能在my.cnf文件中定义。

Dropping a table in a database using DbVisualizer

图像1-使用dbvisualizer
将表放入数据库中

IBDATA1的问题

询问与MySQL合作的任何经验丰富的DBA,您可以确定他会建议您最好让Ibdata1独自离开并去做其他事情。该答案的一部分隐藏在iBdata1首先构建的核心背后 - 在这段之前阅读了几段,请记住我们如何告诉您ibdata1存储所有相关的数据到InnodB?

IBDATA1的问题是,当我们使用较大的数据集时,该文件可能会变得不可思议,并且如果我们将innodb_file_per_table选项设置为1(这是默认选项启动从mysql 5.6.6),它不能收缩。

解决问题

如果我们没有启用innodb_file_per_tab
le
选项,或者如果我们运行了较旧版本的MySQL,我们仍然可以做一些事情来确保我们的MySQL实例即使在压力下也像蜜蜂一样工作,也可以按照以下步骤操作:< /p>

  1. 我们需要对MySQL基础架构中的所有数据进行备份。
  2. 我们需要删除/var/lib/mysql/mysql/mysql*.< em> < em> /data文件夹(替换*。。****。 *使用您的MySQL版本)目录除外,MySQL和``performance_schema''文件夹(MySQL都是正确功能所必需的。)
  3. 我们需要确保停止MySQL并删除IBDATA1和IB_LOGFILE0和IB_LOGFILE1文件。这些文件对InnoDB至关重要,因为它们都存储所有重做日志,而MySQL重新启动后可以通过它们读取它们,但是如果合适的数据库在MySQL最后关闭时与它们完全相同的位置,则MySQL将启动问题。
  4. 最后,我们需要重新启动MySQL。

最后,我们需要在步骤1期间重新填充转储(应始终事先测试备份),如果我们回到数据文件夹,我们很可能会看到两个代表一个代表一个的文件表(在此示例中,我们的表称为demo_table):

  1. 一个称为demo_table.ibd的文件存储与表相关的所有数据。
  2. 一个称为demo_table.frm的文件存储所有必要的其他信息(与表相关的元数据。)

问题从现在开始解决,即使我们无法通过删除相关文件相关的文件访问mysql,删除基于InnoDB存储引擎的表也将是一块蛋糕从现在开始,借助表将有能力解决问题,IBDATA1只能存储与运行InnoDB或XtradB存储引擎的表相关联的元数据,而不是数据本身。



The tables in DbVisualizer and their associated files

图像2- dbvisualizer中的表格及其关联的文件

我们几乎完成了 - 我们需要做的最后一件事是确保我们的IBDATA1文件永远不会太大,无法处理我们的系统。我们可以通过完成这些步骤来做到这一点:

  1. 我们需要通过发出df -h命令来找出磁盘上有多少空间。此命令将以人类可读格式(-h.
  2. 为我们提供磁盘上的自由空间数量(df
  3. 回到my.cnf并将设置Innodb-data-file-path设置为一个值,该值在确定要在特定用例中要分配给mySQL的磁盘上有多少空间(请参阅图像)下面。)
  4. 重新启动mysql以进行更改。



The innodb-data-file-path Setting in my.cnf

图像3- my.cnf

在我们的示例中,IBDATA1最初设置为10GB,但可以扩展(autoextend),并且该文件的最大尺寸(max)不得超过20GB。由于在上一步中,我们确保文件仅存储与表相关的元数据,而不是数据本身,因此20GB的空间应足够。

The Initial Size of ibdata1

图片4 ibdata1的初始大小

概括

在本文中,我们带您浏览了整个MySQL基础架构中最重要的文件。我们教您如何确保该文件从长远来看不会引起任何问题,并在此过程中证明了DBVisualizer的某些功能。如果您喜欢阅读这篇文章,keep an eye on our blog要找到与DBVisualizer和数据库工程艺术有关的各种文章,以帮助释放数据库的力量并帮助您的公司成功,我们将在下一个中看到您。<<<<<<<<<<<<<<<<<< /p>

dbvisualizer是highest rated MySQL clientdownload DbVisualizer for free,找出它必须提供的!

关于作者

卢卡斯·维利基斯(Lukas Vileikis)是一个道德的黑客,也是频繁的会议演讲者。他经营着世界上最大,最快的数据泄露搜索引擎之一-BreachDirectory.com,经常在多个地方的会议和博客上讲话,包括他在lukasvileikis.com上的博客。