Nieznany / nieobsługiwany silnik pamięci: InnoDB | MySQL Ubuntu

45

Niedawno uaktualniłem poprzednią wersję LTS Ubuntu do Precise, a teraz mysql odmawia uruchomienia. Skarży się na następujące, gdy próbuję go uruchomić:

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

I pokazuje to w „/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

Sprawdziłem uprawnienia do wszystkich katalogów mysql, aby upewnić się, że ma ono własność, a także zmieniłem nazwy wcześniejszych dzienników ib_log, aby mógł je przerobić. Po prostu nie docieram teraz do tego problemu, po 2 godzinach patrzenia na wyniki Google.

Garrett
źródło
Nawiasem mówiąc, udało mi się uruchomić mysql, komentując wpis „skip_innodb” w my.cnf. Ale jestem całkiem pewien, że nie miałem tak rozwiązać.
Garrett,
Pokaż wszystkie zmienne z my.cnf, które są ustawieniami innodb
RolandoMySQLDBA

Odpowiedzi:

34

Po sprawdzeniu dzienników znalazłem następujący błąd:

[ERROR] Unknown/unsupported storage engine: InnoDB

Usunąłem te pliki:

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

w /var/lib/mysql

To rozwiązało mój problem po ponownym uruchomieniu.

Vinay
źródło
7
rmpolecenie służy do usuwania plików zamiast ich nazwy o ile wiem ...
Itai Gannot
2
Te pliki zawierają rzeczywiste dane dla Twojej bazy danych. Nie chcesz ich usuwać.
Stefan Lasiewski
Nie, ibdataplik zawiera dane (chyba że masz plik na tabelę). Pliki ib_logfile są dziennikami odtwarzania, które zawierają dane dotyczące transakcji zmieniających bazę danych, które mogły być przetwarzane, gdy baza danych uległa awarii. Jeśli udało się zamknąć serwer, usunięcie tych plików dziennika nie zaszkodzi. Jeśli się zawiesił, potrzebujesz ich. Ale to poprawna odpowiedź. Jeśli plik my.cnf zmieni opcję innodb_log_file_sile_pliku i nie będzie już zgodny z tymi dwoma plikami, pojawi się komunikat o błędzie podany przez OP. Usuwanie / przenoszenie, aby można było tworzyć nowe, naprawia to.
Safado
2
Dlaczego zmiany można wprowadzać tylko przez 5 minut jest poza mną ... Powinienem był stwierdzić, że jest to potencjalna poprawka wyżej wymienionego błędu. Jak stwierdził PO, nie była to poprawka, której potrzebował.
Safado
1
Zawsze możesz zmienić ich nazwę, np mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
kenorb
23

Jeśli naprawdę potrzebujesz skip-innodb(użyj przypadku: mało miejsca w pamięci), to oczywiście nie musisz tego komentować. Jeśli jednak InnoDB jest domyślnym silnikiem pamięci, serwer nie uruchomi się, dopóki nie powiesz, którego silnika pamięci należy użyć, np default-storage-engine=myisam. W MyISAM.

Wypróbuj to:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
Andy Mikhaylenko
źródło
6
Spróbuj dodać „default-storage-engine = myisam” do /etc/mysql/my.cnf w sekcji [mysqld], jeśli chcesz mieć „skip_innodb”.
kodem PIN
Działa pięknie. Twoje zdrowie!
Boann
4
Co zrobić, jeśli chcesz mieć wsparcie innodb?
Nilzor,
1
Dodano Mariadb na Centos 7 default-storage-engine=myisamw pliku /etc/my.cnf pod [mysqld]. To załatwiło sprawę. Dzięki
Damodar Bashyal
12

Jeśli używasz MySQL 5.6+ i chcesz wyłączyć InnoDB, nie zapomnij o „ --default-tmp-storage ”, inaczej nie zadziała:

Aby wyłączyć InnoDB, użyj --innodb = OFF lub --skip-innodb. W takim przypadku, ponieważ domyślnym silnikiem pamięci jest InnoDB, serwer nie uruchomi się, chyba że użyjesz także --default-storage-engine i --default-tmp-storage-engine, aby ustawić domyślny inny silnik dla stałych i Tabele TEMPORARY.

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

Możesz dodać to do swojego my.cnf:

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

żeby się upewnić, że zadziała.

Juan
źródło
+1, nigdy nie zauważaj oficjalnego dokumentu. powinien się ustawić default-storage-enginei default-tmp-storage-enginedzięki.
Giberno,
7

Sprawdź dziennik błędów mysql.

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

Jeśli twój dziennik mówi (tak jak mój):

InnoDB: Inicjowanie puli buforów, rozmiar = 128,0 M.
InnoDB: mmap (137363456 bajtów) nie powiodło się; errno 12
[BŁĄD] InnoDB: Nie można przydzielić pamięci dla puli buforów

Nie masz wystarczającej ilości pamięci, aby użyć domyślnego rozmiaru bufora 128 MB

Edytuj plik konfiguracyjny /etc/mysql/my.cnf, dodając wiersz, aby określić mniejszy rozmiar 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

Zapisz plik konfiguracyjny i uruchom mysql

sudo service mysql start
użytkownik2219975
źródło
Jest na miejscu. Ale mogą to być również zawieszające się procesy serwera WWW lub coś pochłaniającego pamięć RAM, sprawdź to również.
sjas
0

Spróbuj jeszcze 2 rzeczy. 1. Zmniejsz rozmiar puli buforów innodb. 2. Edytuj skrypt początkowy mysql i dodaj opcję --innodb.

Zastanawiam się także, czy twoja paczka jest wadliwa. Czy mógłbyś wypróbować inną mniejszą wersję?

Zakładam również, że twój serwer mysql został zaktualizowany? Może ta wersja jest zepsuta? Precyzja nie jest jeszcze ostateczna.

johnshen64
źródło
Zrobiłem to już bezskutecznie.
Garrett,
Przepraszamy, edytowałem go z kilkoma rzeczami do wypróbowania, bardziej jak zły pakiet. Spróbuj użyć wersji mysql.com lub percona, które są zwykle bardziej stabilne.
johnshen64
Upewnij się również, że stary pakiet jest całkowicie czyszczony podczas instalacji nowego.
johnshen64 16.04.
Czy usunięcie pakietu całkowicie spowodowałoby utratę informacji w bazie danych?
Garrett,
Nie powinno, ale dla bezpieczeństwa należy zawsze wykonać kopię zapasową DBS.
johnshen64
0

Wystąpił ten błąd, gdy usunąłem lokalizację, dla której używam tmpdir. Jeśli niedawno zmieniłeś swój tmpdir, możesz sprawdzić, czy jest to poprawna, zapisywalna lokalizacja.

Jeff
źródło