优化 MySQL InnoDB 存储引擎以进行数据删除
问题:是否可以从已删除的表中删除数据无需重建整个 MySQL InnoDB 存储引擎
答案:是的,可以通过全面的清理过程。
解释:
InnoDB 存储各种ibdata1 文件中的数据类型,包括表数据、索引和系统元数据。当表被删除时,它们的数据和索引仍保留在 ibdata1 中,即使它们不再可访问。随着时间的推移,这可能会导致空间浪费和性能下降。
清理过程:
-
转储数据库:创建以下 SQL 转储除 mysql 和 information_schema 之外的所有数据库。
-
删除数据库:删除除 mysql 和 information_schema 之外的所有数据库。
-
禁用快速关闭:将 innodb_fast_shutdown 设置为 0 以刷新日志文件中的事务更改。
-
关闭MySQL:停止MySQL server.
-
修改配置:将 innodb_file_per_table、innodb_flush_method=O_DIRECT、innodb_log_file_size 和 innodb_buffer_pool_size 设置添加到 /etc/my.cnf。
-
删除 ibdata文件:* 删除所有 ibdata 和 ib_logfile* 文件。
-
重新启动 MySQL: 启动 MySQL,这将仅使用元数据重新创建 ibdata1。
-
导入数据库转储:恢复之前导出的SQL dump.
此过程之后,ibdata1 将仅包含元数据,而各个表将驻留在其自己的 .ibd 文件中。这允许使用 OPTIMIZE TABLE 优化各个表,减少浪费的空间并提高性能。
注意:确保删除数据库后正确重新建立用户授权至关重要。
以上是我可以在不重建完整数据库的情况下从已删除的 InnoDB 表中删除数据吗?的详细内容。更多信息请关注PHP中文网其他相关文章!