Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb


MySQL 8.0 リファレンスマニュアル  /  ...  /  テーブルまたはインデックスの再作成または修復

このページは機械翻訳したものです。

2.11.13 テーブルまたはインデックスの再作成または修復

このセクションでは、次の方法でテーブルまたはインデックスを再構築または修復する方法について説明します:

  • MySQL によるデータ型または文字セットの処理方法の変更。 たとえば、照合順序のエラーが修正され、照合順序を使用する文字カラムのインデックスを更新するためにテーブルの再構築が必要になる場合があります。

  • CHECK TABLEmysqlcheck または 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 メソッド

ALTER TABLE でテーブルを再構築する場合は、null 変更を使用します。すなわち、すでに使用しているストレージエンジンを使用するように、テーブルを変更する ALTER TABLE ステートメントです。 たとえば、t1InnoDB テーブルである場合、次のステートメントを利用します。

ALTER TABLE t1 ENGINE = InnoDB;

ALTER TABLE ステートメントで指定するストレージエンジンがわからない場合は、SHOW CREATE TABLE を使用してテーブル定義を表示します。

REPAIR TABLE メソッド

REPAIR TABLE メソッドは、MyISAMARCHIVE および CSV テーブルにのみ適用できます。

テーブルチェック操作で破損があること、またはアップグレードが必要であることが示されている場合は、REPAIR TABLE を使用できます。 たとえば、MyISAM テーブルを修復するには、次のステートメントを使用します。

REPAIR TABLE t1;

mysqlcheck --repair は、コマンド行で REPAIR TABLE ステートメントへのアクセスを提供します。 --databases オプションまたは --all-databases オプションをそれぞれ使用して、特定のデータベースまたはすべてのデータベースのすべてのテーブルを修復できるため、テーブル修復の方法として、より便利な場合があります。

mysqlcheck --repair --databases db_name ...
mysqlcheck --repair --all-databases