暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

2.11.13重建或修复表或索引

原创 由迪 2020-11-04
1030

本节描述了如何重建或修复表或索引,这可能由以下方式引起:

  • 更改了MySQL处理数据类型或字符集的方式。例如,排序规则中的错误可能已得到纠正,因此必须重建表以更新使用该排序规则的字符列的索引。
  • 所需的表修理或升级报告 CHECK TABLEmysqlcheck的,或 mysql_upgrade

重建表的方法包括:

转储和重新加载方法

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

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

如果InnoDB由于CHECK TABLE操作指示需要升级表而需要重建表,请使用 mysqldump创建转储文件,并使用 mysql重新加载文件。如果该 CHECK TABLE操作表明存在损坏或InnoDB 失败原因,请参阅第15.21.2节“强制执行InnoDB恢复”以获取有关使用 innodb_force_recovery选项重新启动的信息InnoDB。要了解CHECK TABLE可能遇到的问题类型,请参见第13.7.3.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,请使用“ null ”更改;也就是说,一条ALTER TABLE语句 “更改”表以使用它已经拥有的存储引擎。例如,如果t1是一个 InnoDB表,则使用以下语句:

ALTER TABLE t1 ENGINE = InnoDB;
复制

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

维修台方法

REPAIR TABLE方法只适用于MyISAMARCHIVECSV表。

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

REPAIR TABLE t1;
复制

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

mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论