本节描述如何重建或修复表或索引,这可能是必要的:
更改MySQL处理数据类型或字符集的方式。例如,排序规则中的错误可能已经纠正,因此需要重新构建表以更新使用该排序规则的字符列的索引。
所需的表维修或升级报告
检查表
,mysqlcheck,或mysql_upgrade。
重建表的方法包括:
如果在二进制(原位)升级或降级后,由于不同版本的MySQL无法处理这些表,因此需要重新构建表,则必须使用dump-and-reload方法。转储表之前使用你原来的MySQL版本升级或降级。然后重新加载表后升级或降级。
如果您使用重新构建表的转储和重新加载方法只是为了重新构建索引,那么您可以在升级或降级之前或之后执行转储。装填仍然必须在事后进行。
如果您需要重建一个InnoDB
表,因为检查表
操作表示需要进行表升级,使用, mysqldump创建一个转储文件和mysql重新加载文件。如果检查表
“操作”表示有损坏或损坏的原因InnoDB
要失败,请参考第15.21.2节,“强制InnoDB恢复”有关使用innodb_force_recovery
选择重新启动InnoDB
。要理解这类问题检查表
可能是遭遇,指的是InnoDB
的笔记第13.7.3.2节,“检查表语句”。
要通过转储和重新加载表来重新构建表,请使用, mysqldump创建一个转储文件和mysql重新加载文件:
, mysqldumpdb_namet1 >转储。sql mysqldb_name< dump.sql
要重新生成单个数据库中的所有表,请指定数据库名称,但不包含以下表名:
, mysqldumpdb_name>转储。sql mysqldb_name< dump.sql
要重新生成所有数据库中的所有表,请使用——所有数据库
选择:
Mysqldump——all-databases > dump。SQL mysql < dump.sql
使用ALTER TABLE
,用一个”零”变更;也就是说,一个ALTER TABLE
声明,”变化”表将使用它已有的存储引擎。例如,如果t1
是一个InnoDB
表,使用以下语句:
ALTER TABLE t1 ENGINE = InnoDB;
如果不确定要指定的存储引擎ALTER TABLE
声明中,使用显示创建表
显示表定义。