2.11.12 重建或修复 table 或索引
本节描述了如何重建或修复 table 或索引,这可能是由于以下原因所必需的:
-
更改了 MySQL 处理数据类型或字符集的方式。例如,排序规则中的错误可能已得到纠正,因此必须重建 table 以更新使用该排序规则的字符列的索引。
-
CHECK TABLE,mysqlcheck或mysql_upgrade报告的必需的 table 修复或升级。
重建 table 的方法包括:
转储和重新加载方法
如果要重建 table 是因为在二进制(就地)升级或降级后,不同版本的 MySQL 无法处理它们,则必须使用 dump-and-reload 方法。使用原始版本的 MySQL 在升级或降级之前转储 table。然后在升级或降级之后重新加载 table。
如果仅出于重建索引的目的而使用重建 table 的 dump-and-reload 方法,则可以在升级或降级之前或之后执行转储。之后仍然必须重新加载。
如果由于CHECK TABLE操作指示需要升级 table 而需要重建InnoDB
table,请使用mysqldump创建转储文件,并使用mysql重新加载该文件。如果CHECK TABLE操作指示存在损坏或导致InnoDB
失败,请参考第 14.22.2 节“强制 InnoDB 恢复”以获取有关使用innodb_force_recovery选项重新启动InnoDB
的信息。要了解CHECK TABLE可能遇到的问题类型,请参阅第 13.7.2.2 节“ CHECK TABLE 语句”中的InnoDB
Comments。
要通过转储并重新加载 table 来重建 table,请使用mysqldump创建转储文件,并使用mysql重新加载该文件:
mysqldump db_name t1 > dump.sql
mysql db_name < dump.sql
要重建单个数据库中的所有 table,请指定数据库名称,而不使用以下任何 table 名称:
mysqldump db_name > dump.sql
mysql db_name < dump.sql
要重建所有数据库中的所有 table,请使用--all-databases选项:
mysqldump --all-databases > dump.sql
mysql < dump.sql
ALTER TABLE 方法
要使用ALTER TABLE重建 table,请使用“ null”更改;也就是说,ALTER TABLE语句“更改”了 table 以使用它已经拥有的存储引擎。例如,如果t1
是InnoDB
table,请使用以下语句:
ALTER TABLE t1 ENGINE = InnoDB;
如果不确定在ALTER TABLE语句中指定哪个存储引擎,请使用显示创建 table显示 table 定义。
REPAIR TABLE 方法
REPAIR TABLE方法仅适用于MyISAM
,ARCHIVE
和CSV
table。
如果 table 检查操作 table 明存在损坏或需要升级,则可以使用REPAIR TABLE。例如,要修复MyISAM
table,请使用以下语句:
REPAIR TABLE t1;
mysqlcheck --repair提供对REPAIR TABLE语句的命令行访问。这是修复 table 的一种更方便的方法,因为可以使用--databases或--all-databases选项分别修复特定数据库或所有数据库中的所有 table:
mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases