清理 InnoDB 存储引擎:指南
在数据库维护领域,如何从 InnoDB 中清除过时的数据的问题存储引擎频繁出现
InnoDB可以不用清理吗重建?
不幸的是,与 MyISAM 不同,在不重建整个数据库的情况下直接从 InnoDB 引擎中删除已删除的数据是不可行的。这是因为 InnoDB 使用复杂的基础设施,在其 ibdata1 文件中存储各种类型的信息,包括表数据、索引和元数据。简单地优化表只会整合 ibdata1 中的数据,而不会缩小数据。
InnoDB 基础设施清理
为了有效地清理 InnoDB 引擎,需要更全面的方法:
-
转储数据并删除数据库:导出全部将数据写入 SQL 文件并删除所有非必需数据库(不包括 mysql 和 information_schema)。
-
刷新事务并关闭 MySQL:将 innodb_fast_shutdown 配置为 0 以完成事务刷新,然后关闭 MySQL .
-
修改my.cnf:启用innodb_file_per_table,将 innodb_flush_method 配置为 O_DIRECT,将 innodb_log_file_size 设置为 innodb_buffer_pool_size 的 25%,并增加 innodb_buffer_pool_size。
-
删除 ibdata 和 ib_logfile: 删除这些文件,可选择包含除 /var/lib/mysql/mysql 之外的所有子目录。
-
启动 MySQL: 重新创建 ibdata1 和 ib_logfile0/1。
-
导入数据: 恢复 SQL 转储以填充新创建的数据库
注释:
- 通过启用 innodb_file_per_table,每个 InnoDB 表将驻留在 ibdata1 之外的自己的 .ibd 文件中,从而简化了优化和将来会删除数据。
- 如果出现错误,请恢复 mysql 架构文件由于删除了 mysql 模式而发生。
通过此过程,新的 ibdata1 文件将仅包含表元数据,显着减小其大小并确保用于存储活动数据的干净的 InnoDB 环境。
以上是如何在不重建整个数据库的情况下有效清理InnoDB存储引擎?的详细内容。更多信息请关注PHP中文网其他相关文章!