- 优化是否内部包含修复表或反之亦然?
- 仅当发现损坏时才可以执行修复表吗,有任何工具可以支持此功能吗?
(我正在使用 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 脚本。