このセクションでは、次の方法でテーブルまたはインデックスを再構築または修復する方法について説明します:
MySQL によるデータ型または文字セットの処理方法の変更。 たとえば、照合順序のエラーが修正され、照合順序を使用する文字カラムのインデックスを更新するためにテーブルの再構築が必要になる場合があります。
CHECK TABLE
、mysqlcheck または mysql_upgrade によって報告される必要なテーブルの修復またはアップグレード。
テーブルを再構築する方法には、次のものがあります:
バイナリ (インプレース) のアップグレードまたはダウングレード後に異なるバージョンの MySQL で処理できないためにテーブルを再構築する場合は、ダンプアンドリロード方法を使用する必要があります。 アップグレードまたはダウングレードの前に、元のバージョンの MySQL を使用してテーブルをダンプします。 次に、アップグレードまたはダウングレードのあとに、テーブルをリロードします。
インデックスを再構築する目的のためだけにダンプしてリロードする方法を使ってテーブルを再構築する場合は、アップグレードまたはダウングレードの前でもあとでもダンプを実行できます。 その場合でも、リロードはあとで行う必要があります。
CHECK TABLE
操作でテーブルのアップグレードが必要であることが示されているために InnoDB
テーブルを再構築する必要がある場合は、mysqldump を使用してダンプファイルを作成し、mysql を使用してファイルをリロードします。 CHECK TABLE
操作で、破損があることが示されたり InnoDB
が失敗したりする場合は、innodb_force_recovery
オプションを使用して InnoDB
を再起動する方法について、セクション15.21.2「InnoDB のリカバリの強制的な実行」を参照してください。 CHECK TABLE
が遭遇している問題のタイプを理解するには、セクション13.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