在MySQL中修复vs优化表

  1. 优化包括内部维修表或反之亦然?
  2. 是否有可能执行修复表只有当发现损坏,任何工具可以支持这个?

(我正在使用MyISAM表引擎)

  • REPAIR TABLE修复表损坏问题,例如打开文件句柄计数,包含可变长度数据的行的分辨率等等。
  • OPTIMIZE TABLE只是复制表格以删除未使用的空间。 如果表是MyISAM,则为了查询优化器的缘故,也执行ANALYZE TABLE来更新索引统计信息。 如果表是InnoDB,那么ANALYZE TABLE被忽略。

你可以让mysqld自动检查和修复所有的MyISAM表。

实际上,本书的MySQL 5.0authentication学习指南 ,第30.5节,第444445页指出:

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

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

  • 默认为默认检查。
  • BACKUP指示服务器对任何必须更改的表进行备份。
  • FORCE导致表恢复被执行,即使它会导致丢失多行数据。
  • QUICK执行快速恢复:跳过由删除或更新导致的没有漏洞的表。

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

[mysqld] myisam-recover = FORCE,BACKUP

你也可以创build一个名为/root/StartUp.sql的文件,并把你想要的REPAIR TABLE命令放在里面。 然后将init-file=/root/StartUp.sql/etc/my.cnf然后重新启动mysql来触发init脚本。