我有一个应用程序,其后端数据库为 Mysql(InnoDb 引擎),目前我的客户希望将 ibdata 文件的大小减小到某个固定大小。我找到了以下三个解决方案。
解决方案 1:innodb_file_per_table
解决方案2:innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
解决方案3:innodb_data_file_path=ibdata1:10M:autoextend:max:50M
而我确实不了解 ibadata1 文件,有人可以帮助我吗?我想知道修复 ibdata 大小(解决方案 3)是否安全,以及 ibdata 到底是做什么用的?
答案1
在处理如此复杂的 DBMS 时,您确实应该仔细查看文档。 http://dev.mysql.com/doc/refman/5.1/en/innodb-configuration.html状态:
InnoDB 存储引擎管理的两个重要的基于磁盘的资源是其表空间数据文件和日志文件。如果您未指定 InnoDB 配置选项,MySQL 会在 MySQL 数据目录中创建一个名为 ibdata1 的自动扩展 10MB 数据文件和两个名为 ib_logfile0 和 ib_logfile1 的 5MB 日志文件。
基本上,ibdata1 文件包含 InnoDB 表的表数据。如果您出于性能原因使用不同的存储子系统来存储第二个文件,或者原始分区上 ibdata1 的空间不足,并且希望使用不同的存储文件进行简单的附加存储,则指定多个文件是有意义的。修复文件大小显然会限制可以存储在 InnoDB 表中的数据总量。
ibdata1 文件可能自动增长,因此随着更多数据放入 InnoDB 表,它会膨胀。从 InnoDB 表中删除记录后,文件将包含标记为“空闲”的页面,可用于将来的数据,但文件本身不可收缩。如果您删除了大量数据并需要收缩 ibdata1,唯一支持的方法是备份表mysqldump
并重新初始化数据库 - 请参阅这个 StackOverflow 答案了解详情。