本节描述如何重建或修复表或索引,这可能是必要的:
更改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重新加载文件:
mysqldump.db_name.t1> dump.sql mysqldb_name.< dump.sql
要重建单个数据库中的所有表,请在没有任何以下表名的情况下指定数据库名称:
mysqldump.db_name.>转储。sql mysqldb_name.< dump.sql
要重建所有数据库中的所有表,请使用- 所有数据库
选项:
mysqldump --all-databases> dump.sql mysql
使用ALTER TABLE
, 用一个”空值”改造;也就是说ALTER TABLE
声明,”变化”该表使用它已经存在的存储引擎。例如,如果t1
是一个InnoDB
表,使用以下语句:
改变表T1引擎= InnoDB;
如果您不确定在哪个存储引擎中指定ALTER TABLE
声明中,使用显示创建表
显示表定义。
的修理表
方法仅适用于MyISAM
,存档
, 和CSV
表。
您可以使用修理表
如果表检查操作表明有损坏或需要升级。例如,修复MyISAM
表,使用以下语句:
维修表t1;
mysqlcheck——修复提供对修理表
声明。这可以是一个更方便的方法来修理表,因为您可以使用--databases.
或者- 所有数据库
选项修复特定数据库或所有数据库中的所有表,分别:
mysqlcheck --repair --databases.db_name....mysqlcheck——修复——所有数据库