Подтвердить что ты не робот

Ошибка Mysql 'Got error -1 from storage engine'

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

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

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

где я получил ошибку "Got Error -1 из механизма хранения", у меня есть googled вокруг, большая часть результатов сосредоточена на поврежденных таблицах innodb. Хотя для моего случая я не думаю, что это сломано, это просто то, что я пропустил при переходе и создаю заявления.

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

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

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

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

$df -ah

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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