MySQL 9.0 參考手冊  /  升級 MySQL  /  重建或修復表格或索引

3.14 重建或修復表格或索引

本節說明如何重建或修復表格或索引,這可能是由於以下原因所必需的:

  • MySQL 處理資料類型或字元集的方式有所變更。例如,定序中的錯誤可能已修正,因此需要重建表格以更新使用該定序的字元欄位的索引。

  • CHECK TABLEmysqlcheck 報告的必要表格修復或升級。

重建表格的方法包括:

傾印和重新載入方法

如果您因為不同版本的 MySQL 在二進位(就地)升級或降級後無法處理表格而重建表格,則必須使用傾印和重新載入方法。使用您原始版本的 MySQL,在升級或降級之前傾印表格。然後在升級或降級之後重新載入表格。

如果您僅為了重建索引而使用傾印和重新載入方法來重建表格,則可以在升級或降級之前或之後執行傾印。仍然必須在事後完成重新載入。

如果您需要重建 InnoDB 表格,因為 CHECK TABLE 作業指示需要表格升級,請使用 mysqldump 建立傾印檔案,並使用 mysql 重新載入檔案。如果 CHECK TABLE 作業指示有損毀或導致 InnoDB 失敗,請參閱 第 17.20.3 節,「強制 InnoDB 復原」,以取得有關使用 innodb_force_recovery 選項重新啟動 InnoDB 的資訊。若要了解 CHECK TABLE 可能遇到的問題類型,請參閱 第 15.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 方法

若要使用 ALTER TABLE 重建表格,請使用「null」變更;也就是說,ALTER TABLE 陳述式會將表格「變更」為使用其已有的儲存引擎。例如,如果 t1InnoDB 表格,請使用此陳述式:

ALTER TABLE t1 ENGINE = InnoDB;

如果您不確定要在 ALTER TABLE 陳述式中指定哪個儲存引擎,請使用 SHOW CREATE TABLE 顯示表格定義。

REPAIR 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