MySQL 中的修复与优化表

MySQL 中的修复与优化表
  1. 优化是否内部包含修复表或反之亦然?
  2. 仅当发现损坏时才可以执行修复表吗,有任何工具可以支持此功能吗?

(我正在使用 MyISAM 表引擎)

答案1

  • 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,备份

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

相关内容