MySQL 8.4 參考手冊  /  升級 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