MySQLエラー1005「テーブル作成失敗(errno: 121)」の原因と解決策を徹底解説!
MySQL エラー: エラー 1005: テーブルを作成できません (errno: 121)
原因
このエラーにはいくつかの考えられる原因があります。最も一般的なものは次のとおりです。
- 重複するテーブル名: すでに同じ名前のテーブルが存在する可能性があります。テーブル名は大文字小文字を区別するため、大小文字の違いであっても問題が発生する可能性があります。
- 重複する制約名: 外部キー制約など、テーブルに定義されている制約の名前が重複している可能性があります。制約名はデータベース内で一意である必要があります。
- 破損した InnoDB データディクショナリ: MySQL の内部データディクショナリが破損している可能性があります。これは、ハードウェアの故障、ソフトウェアのバグ、または予期せぬシャットダウンなどが原因で発生する可能性があります。
解決策
このエラーを解決するには、以下の手順を試してください。
- テーブル名を変更する: すでに同じ名前のテーブルが存在する場合は、テーブル名を変更する必要があります。
- 制約名を変更する: 制約名が重複している場合は、制約名を変更する必要があります。
- InnoDB データディクショナリを修復する: InnoDB データディクショナリが破損している場合は、
innodb_file_per_table
オプションを有効にして MySQL を再起動するか、CHECK TABLE
ステートメントを使用してデータディクショナリを修復する必要があります。
その他のヒント
- エラーメッセージの詳細を確認してください。エラーメッセージには、問題の特定に役立つ追加情報が含まれている場合があります。
- MySQL エラーログを確認してください。エラーログには、問題の根本原因に関する手がかりとなる追加情報が含まれている場合があります。
- オンラインで検索してください。このエラーに関する情報がオンラインで公開されている可能性があります。
- MySQL コミュニティフォーラムで助けを求めてください。MySQL コミュニティフォーラムには、このエラーを解決するのに役立つことができる経験豊富なユーザーがいます。
補足:
- 上記の解決策は、MySQL 8.0 を使用している場合を想定しています。他のバージョンの MySQL を使用している場合は、エラーメッセージと解決策が異なる場合があります。
- 問題が解決しない場合は、システム管理者またはデータベース管理者に連絡する必要があります。
サンプルコード:MySQL でテーブルを作成する
CREATE TABLE mytable (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
このコードは次のことを行います。
mytable
という名前のテーブルを作成します。- このテーブルには、次の 4 つの列があります。
id
: 主キーであり、自動的にインクリメントされる整型数です。name
: NULL 値が許されない最大長 255 文字の文字列です。created_at
: デフォルト値が現在時刻である DATETIME 型の列です。
注:
- テーブルを作成する前に、データベースが存在していることを確認する必要があります。
サンプルコード:エラー 1005 を発生させる
以下のコードは、mytable
という名前のテーブルを既に作成している場合に、mytable
という名前のテーブルを作成しようとしてエラー 1005 を発生させます。
CREATE TABLE mytable (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
このコードを実行すると、次のエラーメッセージが表示されます。
ERROR 1005: Can't create table 'mytable' (errno: 121)
このエラーは、mytable
という名前のテーブルが既に存在するためです。テーブルを作成するには、テーブル名を変更する必要があります。
サンプルコード:InnoDB データディクショナリを修復する
以下のコードは、CHECK TABLE
ステートメントを使用して InnoDB データディクショナリを修復します。
CHECK TABLE mytable;
このコードを実行すると、InnoDB データディクショナリがスキャンされ、破損がないかどうかを確認されます。破損が見つかった場合は、修復されます。
- このコマンドを実行するには、
innodb_file_per_table
オプションが有効になっている必要があります。 - このコマンドを実行すると、テーブルがロックされます。
この情報は参考目的でのみ提供されており、いかなる保証もありません。この情報の使用によるいかなる損害についても責任を負いません。
MySQL エラー 1005: テーブル作成失敗 (errno: 121) の解決策
MySQL でテーブルを作成しようとしたときに、エラー 1005: テーブル作成失敗 (errno: 121) が発生しました。
- 重複するテーブル名: すでに同じ名前のテーブルが存在する可能性があります。
- 破損した InnoDB データディクショナリ: MySQL の内部データディクショナリが破損している可能性があります。
以下の解決策を試してください。
テーブル名を変更する:
InnoDB データディクショナリが破損している場合は、以下のいずれかの方法で修復する必要があります。
- innodb_file_per_table オプションを有効にして MySQL を再起動する:
このオプションを有効にすると、MySQL は各テーブルごとに個別の .ibd ファイルを作成します。これにより、データディクショナリが破損しても、すべてのテーブルが影響を受けるわけではありません。
このステートメントは、テーブルをスキャンし、破損がないかどうかを確認します。破損が見つかった場合は、修復されます。
その他の解決策:
上記の方法で問題が解決しない場合は、以下の方法を試してください。
その他のヒント
- MySQL の最新バージョンを使用していることを確認してください。古いバージョンの MySQL には、既知のバグがある可能性があります。
mysql