建议使用innodb_file_per_table吗?


19

我们有一个应用程序,其中只有一个表将增长到一百万行,而其余表将不足一百万。那么,我们应该使用innodb_file_per_table还是保留一个.ibd的建议呢?我读过一些文章说不要使用它,因为执行连接时需要更多磁盘访问权限?我们将在此表和其他表之间建立联接,以生成报告。

Answers:


24

您必须使用innodb_file_per_table,并且需要做一些如何使用InnoDB的当前基础结构进行清理。

我已经看到许多数据库托管客户端设置MySQL并将InnoDB保留为默认状态。这导致系统表空间(更好地称为ibdata1)疯狂增长。

即使切换到innodb_file_per_table,也必须从ibdata1中提取.ibd文件,并且ibdata将永远不会收缩。例如,如果您有一个名为mydb.mytable的表位于ibdata1内,占用了2GB,则要提取该表,您必须执行以下操作:

步骤01)将其添加到/etc/my.cnf

[mysqld]
innodb_file_per_table

步骤02) service mysql restart

步骤03) ALTER TABLE mydb.mytable ENGINE=InnoDB;

这将使文件/var/lib/mysql/mydb/mytable.ibd

不幸的是,更改之前表占用的2GB空间无法回收。我过去写过有关如何以及为何清理InnoDB基础架构的文章:

做出重大更改后,请不要忘记增加innodb_open_files(默认为300)。否则,磁盘访问将非常有限。

关于联接,请确保您具有支持联接条件的正确索引。

更新2012-04-02 11:30 EDT

在全新安装中使用innodb_file_per_table会导致ibdata1增长非常缓慢,因为所有DDL都在ibdata外部完成。您可以像我之前提到的那样收缩任何InnoDB表,如下所示:

ALTER TABLE mydb.mytable ENGINE=InnoDB;

更新2012-04-02 16:50 EDT

关于备份,请非常小心地复制.ibd文件。为什么?

每个.ibd文件中都有一个特殊的值,称为tablespace_id。ibdata1中有一个tablespace_id值列表。如果执行过需要删除和重新创建表的表维护,则tablespace_id将变得不同。如果还复制ibdata1,则只能将这样的.ibd文件的副本重新集成到数据库中以供使用。这危及所有其他InnoDB表的tablespace_id。鉴于此,最好执行mysqldump备份,因为mysqldumps是数据的逻辑副本。换句话说,备份与ibdata1的时间点无关,您可以自由地重新加载而不会出现可操作性问题。


这将是一台全新的服务器。那我该怎么办?为什么说与innodb_file_per_table一起使用是件好事?加班一张桌子会越来越长,应该看到什么类型的极限误差?
newbie14'4

7

同意@RolandoMySQLDBA,但他没有提到:备份。

如果您已经制定了MySQL备份方案,并且没有在文件系统备份策略中包括其.ibd文件,那么这并不是那么重要。但是考虑到将BY BYTES添加到任何innodb表将导致对.ibd表的增量备份,否则,您会发现很快就会用完备份存储。


亲爱的所有,是的,我也打算运行备份。如果我需要主服务器来进行主备份,那么从主服务器到从服务器有什么区别?两者都会互相备份吗?在设置上需要更改什么?
newbie14 2012年

4

我有一个完全符合这种情况的应用程序:一些大表和一些小表。

我决定将较小的ibdata1文件留给自己,而将较大的文件留在自己的文件中。

innodb_file_per_table为此,我默认情况下处于打开状态,并且仅在将表移动到ibdata1with 时暂时将其关闭ALTER TABLE


@gigigi如何将小文件放在ibdata1中,将大文件放在自己的文件中,这是否不是如果设置此innodb_file_per_table意味着所有文件都将在他们自己的文件中?
2012年

只有在ALTER TABLE他们之后。因此,我的策略是innodb_file_per_table定期打开并随意关闭它,以便将小桌子移进去ibdata1,然后再重新打开。
glglgl 2012年

始终保持为innodb_file_per_table没问题,对吗?
2012年

应该没问题,恕我直言...
glglgl 2012年
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.