本节介绍如何重建或修复表或索引,这可能需要:
更改 MySQL 处理数据类型或字符集的方式。例如,排序规则中的错误可能已得到更正,需要重建表以更新使用排序规则的字符列的索引。
mysqlcheck或 mysql_upgrade
CHECK 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
语句
。例如,如果是一个
表,使用这个语句:
t1
InnoDB
ALTER TABLE t1 ENGINE = InnoDB;
如果不确定在
ALTER TABLE
语句中指定哪个存储引擎,请使用
SHOW CREATE TABLE
来显示表定义。
该REPAIR TABLE
方法仅适用于MyISAM
、
ARCHIVE
和CSV
表格。
REPAIR TABLE
如果表检查操作表明存在损坏或需要升级,
您可以使用。例如,要修复
MyISAM
表,请使用以下语句:
REPAIR TABLE t1;
mysqlcheck --repairREPAIR TABLE
提供对
语句的命令行访问这可能是一种更方便的修复表的方法,因为您可以使用
--databases
或
--all-databases
选项分别修复特定数据库或所有数据库中的所有表:
mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases