本節說明如何重建或修復表格或索引,這可能是由於以下原因所必需的:
MySQL 處理資料類型或字元集的方式有所變更。例如,定序中的錯誤可能已修正,因此需要重建表格以更新使用該定序的字元欄位的索引。
CHECK TABLE
或 mysqlcheck 報告的必要表格修復或升級。
重建表格的方法包括:
如果您因為不同版本的 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
重建表格,請使用「「null」」變更;也就是說,ALTER TABLE
陳述式會將表格「「變更」」為使用其已有的儲存引擎。例如,如果 t1
是 InnoDB
表格,請使用此陳述式:
ALTER TABLE t1 ENGINE = InnoDB;
如果您不確定要在 ALTER TABLE
陳述式中指定哪個儲存引擎,請使用 SHOW CREATE TABLE
顯示表格定義。
REPAIR TABLE
方法僅適用於 MyISAM
、ARCHIVE
和 CSV
表格。
如果表格檢查作業指示有損毀或需要升級,您可以使用 REPAIR TABLE
。例如,若要修復 MyISAM
表格,請使用此陳述式:
REPAIR TABLE t1;
mysqlcheck --repair 提供對 REPAIR TABLE
陳述式的命令列存取。這可能是修復表格的更方便方法,因為您可以使用 --databases
或 --all-databases
選項分別修復特定資料庫或所有資料庫中的所有表格
mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases