MySQLでスキーマ情報に不整合が起こったら
MySQLで、こんなエラーが出て、にっちもさっちもいかなくなることがある。
1 |
General error: 1813 Tablespace for table 'DBName.TableName' exists. Please DISCARD the tablespace before IMPORT. |
テーブルを消そうとすると無いといわれ、作ろうとすると既に存在すると言われる。
dropしようとするとこうだ。
1 2 |
Drop table TableName; -> ERROR 1051 (42S02): Unknown table 'DBName.TableName' |
createしようとするとこうだ。
1 2 3 4 |
Create table TableName( columnA varchar(30) not null comment 'comm' ); -> ERROR 1050 (42S01): Table 'TableName' already exists |
どうしろというのだ。
スキーマ情報に何か不整合が起こっているらしい。
このような状況は稀に発生するようだ。検索してみると、みんな四苦八苦して解消している模様。
で、私の環境でもこれが起こったわけだが、私の場合、テーブルファイルを物理削除することで対処した。
下記のような流れだ。
DB停止
-> テーブルファイルをOSコマンドで削除
-> DB起動
-> テーブル再作成
私の場合はWindows上でxamppを使っていたので、下記のような手順になった。
xamppコントロールパネルでMySQLを停止
-> エクスプローラで D:\xampp\mysql\data\(DBName) に行き、 TableName.frm と TableName.ibd を削除
※私の場合、frmファイルが最初から存在しなかった。それが不整合の原因なんだと思う。
-> xamppコントロールパネルでMySQLを起動
-> テーブルをバックアップから再作成
以上!