2014-11-17 4 views
5

У меня возникла странная проблема с MySQL, я не могу создать таблицу. Стол, используемый для существования, является частью задания, которое загружается в промежуточную таблицу каждый день, а затем обрезает эту таблицу в конце. После нескольких месяцев, таблица исчезла (возможно, кто-то бросил его, не имеет значения), и я пошел, чтобы восстановить его, но я получаю эту ошибку:MySQL: Не удается создать таблицу: errno -1

Level Code Message 
Error 1005 Can't create table 'apps.raw_appsites_stage' (errno: -1) 

Я не могу удалить таблицу или восстановить его. Но если изменить имя таблицы, я могу ее создать.
Итак, кажется, что таблица упала, но пространство имен по-прежнему зарезервировано или застряло в подвешенном состоянии на задней панели.

Вот DDL, что не работает:

create table raw_appsites_stage(t int); 

Но это DDL делает работу:

create table raw_appsites_stage_1(t int); 

Я использую экземпляр RDS, так что я не имею большой доступа к сервера. Вот информация версии:

Variable_name Value 
innodb_version 5.5.40 
protocol_version 10 
slave_type_conversions 
version 5.5.40-log 
version_comment Source distribution 
version_compile_machine x86_64 
version_compile_os Linux 

Как я могу видеть, где это имя держится на и почему он не даст мне упасть или создать таблицу с этим именем?

UPDATE Я попытался переименовать на эту таблицу и получил новую ошибку я никогда не видел раньше:

Can't find file: './apps/raw_appsites_stage.frm' (errno: 2) 

Так что это определенно что-то в стиле фанк на заднем конце, но это существо и RDS экземпляр У меня нет доступа к машинной ОС. Кто-нибудь знает об этом? Нужно ли ждать поддержки AWS?

Благодаря

+1

Использовать 'create table, если не существует raw_appsites_stage (t int);' –

+0

@juergend: Я получаю ту же ошибку, что и эта команда. Проблема не в том, что я пытаюсь создать уже существующее. Проблема в том, что имя таблицы находится в подвешенном состоянии, MySQL говорит, что нет таблицы с этим именем, но также не позволит мне создать новую таблицу с этим именем. –

+0

Что произойдет, если вы выберете * из raw_appsites_stage? Вы должны попробовать удалить таблицу, если существует raw_appsites_stage –

ответ

3

Ok, если вы используете InnoDB в качестве двигателя. Так или иначе, вы потеряли файлы raw_appsites_stage.frm и raw_appsites_stage.ibd. Словарь данных по-прежнему содержит запись для этой таблицы.

Теперь вы не можете отказаться от таблицы, так как mysqld будет искать файл .frm.

вы можете попробовать check и repair table raw_appsites_stage (если не InnoDB)

или резервное копирование ibdata1 на mysqldump затем удалить ibdata1 и восстановить. Подробности Here

+3

спасибо, хорошая информация. К сожалению (?) Я использую Innodb, поэтому я не могу использовать «таблицу ремонта» и «проверить таблицу raw_appsites_stage;» return «ERROR: Table» apps.raw_appsites_stage «не существует», и поскольку это RDS, я не могу получить доступ к файловой системе, как описано в этой очень подробной ссылке, которую вы опубликовали. –

Смежные вопросы