Неизвестный / неподдерживаемый механизм хранения: InnoDB | MySQL Ubuntu

45

Я недавно обновил предыдущую версию LTS Ubuntu до Precise и теперь mysql отказывается запускаться. Когда я пытаюсь его запустить, он жалуется на следующее:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

И это показано в "/var/log/mysql/error.log":

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

Я проверил разрешения на все каталоги mysql, чтобы убедиться, что он принадлежит, и я также переименовал previou ib_logs, чтобы он мог их переделать. Я только сейчас не понимаю, где с этой проблемой, после просмотра результатов Google в течение 2 часов.

Garrett
источник
Кстати, я запустил mysql, закомментировав запись «skip_innodb» в my.cnf. Но я совершенно уверен, что я не должен был решить это таким образом.
Гаррет
Пожалуйста, покажите все переменные из my.cnf, которые являются настройками
innodb

Ответы:

34

После проверки логов я обнаружил следующую ошибку:

[ERROR] Unknown/unsupported storage engine: InnoDB

Я удалил эти файлы:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

в /var/lib/mysql

Это решило мою проблему после перезагрузки.

Виней
источник
7
rmкоманда используется для удаления файлов , а не переименовывать их, насколько я знаю ...
Итай Ganot
2
Эти файлы содержат фактические данные для вашей базы данных. Вы не хотите их удалять.
Стефан Ласевский
Нет, ibdataфайл содержит данные (если у вас нет файла для каждой таблицы). Файлы ib_logfile - это журналы воспроизведения, содержащие данные для транзакций, изменяющих базу данных, которые могли быть в процессе, когда / если база данных потерпела крах. Если вы смогли успешно завершить работу сервера, удаление этих файлов журнала не повредит вам. Если он разбился, то они вам нужны. Но это верный ответ. Если ваш файл my.cnf изменяет параметр innodb_log_file_size и он больше не соответствует этим двум файлам, вы получите сообщение об ошибке, которое указывает OP. Удаление / перемещение, чтобы новые могли быть сделаны, исправляет это.
Сафадо
2
Почему редактирование может быть сделано только в течение 5 минут, мне не понятно ... Я должен был сказать, что это потенциальное исправление вышеупомянутой ошибки. Как указывается в ФП, это было не то исправление, в котором он нуждался.
Сафадо
1
Вы всегда можете переименовать их, например mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
Кенорб
23

Если вам действительно нужно skip-innodb(случай использования: низкий объем памяти), то, конечно, вам не нужно это комментировать. Однако, если InnoDB является механизмом хранения по умолчанию, сервер не запустится, пока вы не скажете ему, какой механизм хранения использовать вместо этого, например, default-storage-engine=myisamдля MyISAM.

Итак, попробуйте это:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
Энди Михайленко
источник
6
Попробуйте добавить "default-storage-engine = myisam" в /etc/mysql/my.cnf в разделе [mysqld], если вы хотите иметь "skip_innodb".
Закодировано
Работает красиво. Ура!
Boann
4
Что делать, если вам нужна поддержка innodb?
Нильзор
1
Mariadb на Centos 7 добавлен default-storage-engine=myisamв файл /etc/my.cnf в [mysqld]. Это добилось цели. Спасибо
Дамодар Башьял
12

Если вы используете MySQL 5.6+ и хотите отключить InnoDB, не забудьте " --default-tmp-storage ", иначе он не будет работать:

Чтобы отключить InnoDB, используйте --innodb = OFF или --skip-innodb. В этом случае, поскольку ядром хранилища по умолчанию является InnoDB, сервер не запустится, пока вы не используете --default-storage-engine и --default-tmp-storage-engine, чтобы установить по умолчанию какой-либо другой механизм для постоянного и ВРЕМЕННЫЕ столы.

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#option_mysqld_ignore-builtin-innodb

Вы можете добавить это в ваш my.cnf:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

просто чтобы убедиться, что это сработает.

Juan
источник
+1, никогда не замечайте официальный документ. это должно установить default-storage-engineи default-tmp-storage-engine, спасибо.
Гиберно,
7

Проверьте журнал ошибок MySQL.

tail -100 /var/log/mysql/error.log

Если ваш журнал говорит (как мой сделал):

InnoDB: Инициализация пула буферов, размер = 128.0M
InnoDB: ошибка mmap (137363456 байт); errno 12
[ОШИБКА] InnoDB: Невозможно выделить память для пула буферов

У вас недостаточно памяти для использования размера буфера по умолчанию 128M

Отредактируйте файл конфигурации /etc/mysql/my.cnf, добавив строку, чтобы указать меньший innodb_buffer_pool_size.

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

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

sudo service mysql start
user2219975
источник
Это место здесь. Но это также может быть зависание процессов веб-сервера или что-то, поглощающее оперативную память, также проверьте это.
sjas
0

Попробуйте еще 2 вещи. 1. Уменьшите размер пула буферов innodb. 2. Отредактируйте исходный скрипт mysql и добавьте опцию --innodb.

Интересно также, если ваш пакет глючит. Не могли бы вы попробовать другую минорную версию?

Кроме того, я полагаю, ваш сервер mysql также был обновлен? Может быть, эта версия сломана? Точное еще не окончательно.

johnshen64
источник
Уже сделал это, безрезультатно.
Гарретт
Извините, отредактировал это с некоторыми вещами, чтобы попытаться, больше как плохой пакет. Попробуйте использовать версию mysql.com или percona, которые обычно более стабильны.
johnshen64
Также убедитесь, что старый пакет полностью очищен, когда новый установлен.
johnshen64
Может ли очистка пакета полностью привести к потере информации базы данных?
Гарретт
Не должно, но для безопасности вы всегда должны делать резервную копию вашей DBS.
johnshen64
0

Я получил эту ошибку, когда я удалил местоположение, для которого я использую tmpdir. Если вы недавно изменили свой tmpdir, вы можете проверить, что это допустимое, доступное для записи место.

Джефф
источник