Documentation Home
MySQL 8.0 参考手册  / 第 2 章安装和升级 MySQL  / 2.11 升级MySQL  /  2.11.10 重建或修复表或索引

2.11.10 重建或修复表或索引

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

  • 更改 MySQL 处理数据类型或字符集的方式。例如,排序规则中的错误可能已得到更正,需要重建表以更新使用排序规则的字符列的索引。

  • mysqlcheckmysql_upgradeCHECK TABLE报告的 所需表修复或升级 。

重建表的方法包括:

转储和重新加载方法

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

如果使用dump-and-reload重建表的方式只是为了重建索引,则可以在升级或降级之前或之后进行dump。之后仍然必须重新加载。

如果InnoDB因为某个CHECK TABLE操作提示需要升级表而需要重建表,使用 mysqldump创建转储文件并 使用mysql重新加载该文件。如果 CHECK TABLE操作表明存在损坏或导致InnoDB 失败,请参阅第 14.21.2 节,“强制 InnoDB 恢复”以获取有关使用 innodb_force_recovery重新启动选项的信息InnoDB。要了解CHECK TABLE可能遇到的问题类型,请参阅第 13.7.2.2 节“CHECK TABLE 语句”InnoDB中的注释 。

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

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

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

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

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

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

改变表方法

要使用 重建表,请ALTER TABLE使用更改;也就是说, 更改表以使用它已有的存储引擎的ALTER TABLE语句 。例如,如果是一个 表,使用这个语句: t1InnoDB

ALTER TABLE t1 ENGINE = InnoDB;

如果不确定在 ALTER TABLE语句中指定哪个存储引擎,请使用 SHOW CREATE TABLE来显示表定义。

修复表方法

REPAIR TABLE方法仅适用于MyISAMARCHIVECSV表格。

REPAIR TABLE如果表检查操作表明存在损坏或需要升级, 您可以使用。例如,要修复 MyISAM表,请使用以下语句:

REPAIR TABLE t1;

mysqlcheck --repairREPAIR TABLE提供对 语句的命令行访问这可能是一种更方便的修复表的方法,因为您可以使用 --databases--all-databases选项分别修复特定数据库或所有数据库中的所有表:

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