# 2.11.13 重建或修复表或索引
本节介绍如何重建或修复表或索引,这可能是必要的:
更改 MySQL 处理数据类型或字符集的方式。例如,排序规则中的错误可能已得到纠正,需要重新构建表以更新使用排序规则的字符列的索引。
所需的表维修或升级报告由
检查表
,mysql检查, 要么mysql_升级.重建表的方法包括:
# 转储和重新加载方法
如果您正在重建表,因为不同版本的 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