Jam*_*mes 40 mysql maintenance troubleshooting ubuntu-12.04
登录到我的 Webmin 控制面板,我注意到几乎所有的磁盘空间都已满。我在我的系统上搜索了十个最大的文件/目录,发现一个名为 ibdata1 的文件占用了大约 94GB 的空间。它驻留在我的 /var/lib/mysql 目录中。
ibdata1 有什么作用?我可以安全地删除它吗?我的假设是它是某种垃圾,但这只是一个疯狂的猜测。
Rol*_*DBA 42
该文件ibdata1是 InnoDB 基础设施的系统表空间。
它包含几个对 InnoDB 至关重要的信息类
请注意 ibdata1 在 InnoDB Universe 中的位置(在右侧)

您可以ibdata1通过启用innodb_file_per_table来分离数据和索引页。这将导致任何新创建的 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: ERROR 1114 (HY000) at line 6308 in file & The table user_analysis is fullFeb 03, 2012: MySQL InnoDB中表的预定优化Mar 25, 2012:为什么InnoDB 将所有数据库都存储在一个文件中?Apr 01, 2012: innodb_file_per_table 是否可取?您可以继续让 ibdata1 存储所有内容,但这使得制作 LVM 快照变得非常苦差事(我个人的意见)。
您需要使用我的 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;
Run Code Online (Sandbox Code Playgroud)
这将说明在应用 InnoDB Cleanup 后可以回收多少浪费的空间。
该文件是ibdata1,不是ibdatal,它包含您所有的 InnoDB 数据库。如果删除它,您将丢失所有数据。
有关如何处理它的一些想法,请参阅如何缩小/清除 MySQL 中的 ibdata1 文件。