Mysql Ошибка «Ошибка -1 из механизма хранения» - PullRequest
22 голосов
/ 07 марта 2012

У меня есть таблица myism 'test', которая содержит некоторые устаревшие данные, теперь я хочу воссоздать таблицу, все столбцы одинаковые, за исключением того, что я изменил хранилище с myism на innodb.Выгрузка sql, которую я использовал для воссоздания таблицы, выглядит следующим образом:

drop table test;
create table test ( ... )
engine=innodb

insert into test(...) values(...)

Вот где я получил ошибку «Ошибка -1 из механизма хранения», я погуглил, большинство результатов сосредоточено на поврежденном innodbстолы.В то время как для моего случая я не думаю, что он сломан, это просто то, что я пропустил в процессе и создаю заявления.

Другое дело, что после выполнения вышеуказанного sql все, что осталось для проверки таблицы - это файл с именем file.frm, я думаю, для таблицы innodb нужны другие вещи для запуска, но я не уверен, что именно.

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

Спасибо.

Ответы [ 5 ]

57 голосов
/ 07 марта 2012

OK.Я нашел решение.Проблема была вызвана параметром innodb_force_recovery в my.cnf, который был установлен на 4.

Чтобы решить эту проблему, установите значение 0 или полностью удалите этот параметр из my.cnf

Если вы проверите журнал ошибок, во время запроса mysql напишет на понятном для человека языке, что: он не позволит вам ничего изменить в таблице, пока не будет включен режим восстановления innodb, а именно следующее сообщение:

InnoDB: A new raw disk partition was initialized or
InnoDB: innodb_force_recovery is on: we do not allow
InnoDB: database modifications by the user. Shut down
InnoDB: mysqld and edit my.cnf so that newraw is replaced
InnoDB: with raw, and innodb_force_... is removed.

Пожалуйста, обратитесь к: http://bugs.mysql.com/bug.php?id=30225

8 голосов
/ 25 октября 2012

Распространенной причиной ошибки -1 является полный диск. У меня есть разные маленькие виртуальные машины для тестирования, и innodb просто продолжает заполнять их (и я постоянно об этом забываю).

$df -ah

Если он показывает диск на 100%, то это источник -1 прямо здесь;)

1 голос
/ 11 сентября 2018

У меня было это с импортом SQL в Azure, и мне нужно было изменить

ДВИГАТЕЛЬ = MyISAM с ДВИГАТЕЛЕМ = InnoDB

0 голосов
/ 14 сентября 2017

Чтобы узнать, что код ошибки для любого кода системной ошибки в системах Unix или Linux, посмотрите в errno.h.На моем Mac я могу сделать:

$ grep 28 /usr/include/sys/errno.h
# define ENOSPC 28 / * На устройстве не осталось места * /

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

В качестве альтернативы, используйте команду «man» для поиска «intro» или других страниц справочника в разделе «2», операционной системе.раздел.

0 голосов
/ 12 июня 2015

Перейти в /etc/my.cnf

Строка комментария innodb_force_recovery = 1

Сохраните файл и перезапустите mysql

...