首页 >数据库 >mysql教程 >如何在不重建整个数据库的情况下有效清理InnoDB存储引擎?

如何在不重建整个数据库的情况下有效清理InnoDB存储引擎?

Barbara Streisand
Barbara Streisand原创
2024-12-06 22:03:15751浏览

How Can I Effectively Clean an InnoDB Storage Engine Without Rebuilding the Entire Database?

清理 InnoDB 存储引擎:指南

在数据库维护领域,如何从 InnoDB 中清除过时的数据的问题存储引擎频繁出现

InnoDB可以不用清理吗重建?

不幸的是,与 MyISAM 不同,在不重建整个数据库的情况下直接从 InnoDB 引擎中删除已删除的数据是不可行的。这是因为 InnoDB 使用复杂的基础设施,在其 ibdata1 文件中存储各种类型的信息,包括表数据、索引和元数据。简单地优化表只会整合 ibdata1 中的数据,而不会缩小数据。

InnoDB 基础设施清理

为了有效地清理 InnoDB 引擎,需要更全面的方法:

  1. 转储数据并删除数据库:导出全部将数据写入 SQL 文件并删除所有非必需数据库(不包括 mysql 和 information_schema)。
  2. 刷新事务并关闭 MySQL:将 innodb_fast_shutdown 配置为 0 以完成事务刷新,然后关闭 MySQL .
  3. 修改my.cnf:启用innodb_file_per_table,将 innodb_flush_method 配置为 O_DIRECT,将 innodb_log_file_size 设置为 innodb_buffer_pool_size 的 25%,并增加 innodb_buffer_pool_size。
  4. 删除 ibdata 和 ib_logfile: 删除这些文件,可选择包含除 /var/lib/mysql/mysql 之外的所有子目录。
  5. 启动 MySQL: 重新创建 ibdata1 和 ib_logfile0/1。
  6. 导入数据: 恢复 SQL 转储以填充新创建的数据库

注释:

  • 通过启用 innodb_file_per_table,每个 InnoDB 表将驻留在 ibdata1 之外的自己的 .ibd 文件中,从而简化了优化和将来会删除数据。
  • 如果出现错误,请恢复 mysql 架构文件由于删除了 mysql 模式而发生。

通过此过程,新的 ibdata1 文件将仅包含表元数据,显着减小其大小并确保用于存储活动数据的干净的 InnoDB 环境。

以上是如何在不重建整个数据库的情况下有效清理InnoDB存储引擎?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn