MySQL重建或修复表或索引

2.11.3重建或修复表或索引

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

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

  • 所需的表修理或升级的报道 CHECK TABLE, mysqlcheck的,或 mysql_upgrade

重建表的方法包括:

转储和重新加载方法

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

如果使用dump-and-reload方法重建表仅用于重建索引,则可以在升级或降级之前或之后执行转储。以后还要重新装载。

如果需要重建InnoDB表,因为CHECK TABLE操作表示需要进行表升级,请使用 mysqldump创建转储文件和 mysql来重新加载该文件。如果CHECK TABLE操作表明存在损坏或导致InnoDB 失败,请参阅第14.21.2节“强制InnoDB恢复”以获取有关使用该 innodb_force_recovery选项重新启动的信息InnoDB要了解CHECK TABLE可能遇到的问题类型,请参阅第13.7.2.2节“检查表语法”中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,请使用“ null ”更改; 也就是说ALTER TABLE, “ 更改 ”表以使用其已具有的存储引擎。例如,如果t1是 InnoDB表,请使用以下语句:

ALTER TABLE t1 ENGINE = InnoDB;

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

维修表方法

REPAIR TABLE方法只适用于MyISAM, ARCHIVECSV表。

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

REPAIR TABLE t1;

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

mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值