Ошибка 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?
Спасибо.
Ответы
Ответ 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", разделе операционной системы.