MySQL 中的修复与优化表

How*_*ard 7 mysql

  1. Optimize 是否在内部包含修复表,反之亦然?
  2. 是否可以仅在发现损坏时才执行修复表,任何工具都可以支持?

(我正在使用 MyISAM 表引擎)

Rol*_*DBA 9

  • REPAIR TABLE 修复了表损坏问题,例如打开文件句柄计数、可变长度数据行的解析等。
  • OPTIMIZE TABLE只需复制表以删除未使用的空间。如果表是MyISAM,ANALYZE TABLE也会为了查询优化器执行更新索引统计。如果表是 InnoDB, ANALYZE TABLE则绕过。

您可以让 mysqld 自动检查并修复所有 MyISAM 表。

事实上,MySQL 5.0 认证学习指南,第 30.5 节,第 444,445 页指出:

可以指示 MySQL 服务器自动检查和修复 MyISAM 表。启用自动修复后,服务器会在打开每个 MyISAM 表时检查该表,以查看该表是否在上次使用时正确关闭并且未标记为需要修复。如果表不正常,服务器会修复它。

要启用自动 MyISAM 表维护,请使用 --myisam-recover 选项启动服务器,该选项值可以包含以下一个或多个值的逗号分隔列表:

  • DEFAULT 用于默认检查。
  • BACKUP 告诉服务器备份任何必须更改的表。
  • FORCE 会导致执行表恢复,即使它会导致多行数据丢失。
  • QUICK 执行快速恢复:跳过没有因删除或更新而产生空洞的表。

例如,要告诉服务器对发现有问题的 MyISAM 表执行强制恢复但对其更改的任何表进行备份,您可以将以下几行放在选项文件中:

[mysqld] myisam-recover=FORCE,BACKUP

您还可以创建一个名为的文件/root/StartUp.sql并将REPAIR TABLE您想要的命令放入其中。然后加入init-file=/root/StartUp.sql/etc/my.cnf和重启MySQL触发的init脚本。