この節では、テーブルを再作成する方法について説明します。テーブルの再作成は、データ型の処理方法などに関する
MySQL
の変更や、キャラクタセットの処理に関する変更によって必要になることがあります。たとえば、照合のエラーを修正した場合、その照合を使用するキャラクタカラムのインデックスを再作成するためにテーブルの再作成が必要になることがあります。CHECK
TABLE
、mysqlcheck、または
mysql_upgrade
によって実行されるテーブルチェック処理などで示されるところに従って、テーブルの修復またはアップグレードを行う場合もあります。
テーブルを再作成する方法には、テーブルをダンプして再度読み込む方法や、ALTER
TABLE
または
REPAIR TABLE
を使用する方法があります。
バイナリアップグレードまたはバイナリダウングレードのあとにバージョンの異なる MySQL でテーブルを処理できないためにテーブルを再作成する場合は、ダンプして再度読み込む方法を使う必要があります。アップグレードまたはダウングレードの前に (元のバージョンの MySQL を使用して) テーブルをダンプし、アップグレードまたはダウングレードのあとで (新しいバージョンをインストールしたあとで) テーブルを再度読み込みます。
インデックスを再作成する目的のためだけにダンプして再度読み込む方法を使ってテーブルを再作成する場合は、アップグレードまたはダウングレードの前でもあとでもダンプを実行できます。その場合でも、あとで再読み込みを行う必要があります。
テーブルをダンプして再度読み込むことによってテーブルを再作成するには、mysqldump を使用してダンプファイルを作成し、mysql を使用してファイルを再度読み込みます。
shell>mysqldump
shell>db_name
t1 > dump.sqlmysql
db_name
< dump.sql
1 つのデータベースにすべてのテーブルを再作成するには、あとにテーブル名を続けないでデータベース名を指定します。
shell>mysqldump
shell>db_name
> dump.sqlmysql
db_name
< dump.sql
すべてのデータベースにすべてのテーブルを再作成するには、--all-databases
オプションを使用します。
shell>mysqldump --all-databases > dump.sql
shell>mysql < dump.sql
ALTER TABLE
を使ってテーブルを再作成するには、テーブルにすでにあるストレージエンジンを使用するようにテーブルを「変更する」ステートメントを使用します。たとえば、t1
が MyISAM
テーブルである場合は、次のステートメントを使用します。
mysql> ALTER TABLE t1 ENGINE = MyISAM;
ALTER TABLE
ステートメントで指定するストレージエンジンがわからない場合は、SHOW
CREATE TABLE
を使用してテーブル定義を表示します。
テーブルを確認する処理でテーブルが壊れているかアップグレードが必要であることが示されているためにテーブルを再作成する必要があり、REPAIR
TABLE
ステートメントがテーブルのストレージエンジンをサポートしている場合は、そのステートメントを使用できます。たとえば、MyISAM
テーブルを修復するには、次のステートメントを使用します。
mysql> REPAIR TABLE t1;
REPAIR TABLE
がサポートしていない
InnoDB
などのストレージエンジンの場合は、前に説明したように、mysqldump
を使用してダンプファイルを作成し、mysql
を使用してファイルを再度読み込みます。
REPAIR TABLE
がサポートするストレージエンジンの詳細は、項8.5.2.6. 「REPAIR TABLE
構文」
を参照してください。