# 2.11.13 重建或修复表或索引

本节介绍如何重建或修复表或索引,这可能是必要的:

# 转储和重新加载方法

如果您正在重建表,因为不同版本的 MySQL 在二进制(就地)升级或降级后无法处理它们,则必须使用 dump-and-reload 方法。转储表格使用原始版本的 MySQL 升级或降级。然后重新加载表升级或降级。

如果您使用 dump-and-reload 重建表的方法仅用于重建索引,则可以在升级或降级之前或之后执行转储。之后仍然必须重新加载。

如果你需要重建一个InnoDB表,因为检查表操作表示需要升级表,使用mysql转储创建转储文件和mysql重新加载文件。如果检查表操作表明存在损坏或原因InnoDB失败,请参阅第 15.21.3 节,“强制 InnoDB 恢复”有关使用innodb_force_recovery重启选项InnoDB.了解问题的类型检查表可能会遇到,参考InnoDB中的注释第 13.7.3.2 节,“CHECK TABLE 语句”.

要通过转储和重新加载表来重建表,请使用mysql转储创建转储文件和mysql重新加载文件:

mysqldump db_name t1 > dump.sql
mysql db_name < dump.sql

要重建单个数据库中的所有表,请指定数据库名称而不指定任何以下表名称:

mysqldump db_name > dump.sql
mysql db_name < dump.sql

要重建所有数据库中的所有表,请使用--所有数据库选项:

mysqldump --all-databases > dump.sql
mysql < dump.sql

# ALTER TABLE 方法

重建一个表更改表, 使用“null”更改;也就是说,一个更改表“更改”表以使用它已有的存储引擎的语句。例如,如果t1是一个InnoDB表,使用这个语句:

ALTER TABLE t1 ENGINE = InnoDB;

如果您不确定要在更改表声明,使用显示创建表显示表定义。

# 修复表方法

维修台方法只适用于MyISAM,档案, 和CSV表。

您可以使用维修台如果表检查操作表明存在损坏或需要升级。例如,要修复一个MyISAM表,使用这个语句:

REPAIR TABLE t1;

mysqlcheck --修复提供命令行访问维修台陈述。这可能是一种更方便的修复表的方法,因为您可以使用--数据库要么--所有数据库分别修复特定数据库或所有数据库中的所有表的选项:

mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases