だるろぐ

だるいぶろぐです

create table して ERROR 1005 (HY000): Can't create table '$DB_NAME.$TABLE_NAME' (errno: -1) と言われたら .ibd ファイルが何故か存在しているから消せばいい

タイトル読んでお疲れさまでした。以上。

メモ

innodb_file_per_table の設定をしておくと、テーブルを作ると .ibd ファイルが作られる。

ref: http://nippondanji.blogspot.com/2009/01/innodb_16.html

drop table すればこのファイルも消える。


テーブルを作るとき、既存テーブルと同名だった場合は分かりやすいエラーが出る。

mysql> create database foo;
Query OK, 1 row affected (0.11 sec)

mysql> use foo
Database changed

mysql> create table bar(a int) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> create table bar(a int) engine=innodb;
ERROR 1050 (42S01): Table 'bar' already exists


が、何故かテーブルは存在しないが .ibd ファイルは存在するという不思議な環境のもとでは、以下のように言われる。

mysql> create table bar(a int) engine=innodb;
ERROR 1005 (HY000): Can't create table 'foo.bar' (errno: -1)

おとなしく .ibd を消せばいい。というかそんな状況になってる時点で何かがおかしい。

# ls ~mysql/foo/bar.ibd
/var/lib/mysql/foo/bar.ibd

# rm ~mysql/foo/bar.ibd


という事を会社でしでかして解決してもらうなどしていました。
手間と迷惑をおかけしております。