Unbekannte / nicht unterstützte Speicher-Engine: InnoDB | MySQL Ubuntu

45

Ich habe kürzlich ein Upgrade von LTS Ubuntu auf Precise durchgeführt und jetzt weigert sich mysql zu starten. Es klagt über Folgendes, wenn ich versuche, es zu starten:

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

Und dies zeigt in "/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

Ich habe die Berechtigungen für alle MySQL-Verzeichnisse überprüft, um sicherzustellen, dass sie Eigentümer sind, und ich habe die vorherigen ib_logs umbenannt, damit sie neu erstellt werden können. Ich komme mit diesem Problem gerade nicht weiter, nachdem ich mir die Google-Ergebnisse 2 Stunden lang angesehen habe.

Garrett
quelle
Übrigens habe ich mysql zum Laufen gebracht, indem ich den Eintrag "skip_innodb" in my.cnf auskommentiert habe. Aber ich bin mir ziemlich sicher, dass ich das nicht so lösen sollte.
Garrett
Bitte zeigen Sie alle Variablen aus my.cnf, die Innodb-Einstellungen sind
RolandoMySQLDBA

Antworten:

34

Nach Überprüfung der Protokolle fand ich den folgenden Fehler:

[ERROR] Unknown/unsupported storage engine: InnoDB

Ich habe diese Dateien entfernt:

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

beim /var/lib/mysql

Dies löste mein Problem nach dem Neustart.

Vinay
quelle
7
Der rmBefehl wird verwendet, um Dateien zu entfernen, anstatt sie umzubenennen, soweit ich weiß ...
Itai Ganot
2
Diese Dateien enthalten die eigentlichen Daten für Ihre Datenbank. Sie möchten sie nicht löschen.
Stefan Lasiewski
Nein, die ibdataDatei enthält die Daten (es sei denn, Sie haben eine Datei pro Tabelle). Die ib_logfile-Dateien sind die Wiederholungsprotokolle, die die Daten für datenbankändernde Transaktionen enthalten, die möglicherweise ausgeführt wurden, als / wenn die Datenbank abstürzte. Wenn Sie den Server erfolgreich herunterfahren konnten, kann das Löschen dieser Protokolldateien nicht schaden. Wenn es abgestürzt ist, brauchen Sie sie. Dies ist jedoch eine gültige Antwort. Wenn Ihre Datei my.cnf die Option innodb_log_file_size ändert und diese beiden Dateien nicht mehr übereinstimmen, wird die Fehlermeldung angezeigt, die das OP ausgibt. Löschen / Verschieben, damit neue erstellt werden können, behebt das Problem.
Safado
2
Warum Änderungen nur für 5 Minuten vorgenommen werden können, ist mir ein Rätsel ... Ich hätte sagen sollen, dass dies eine mögliche Lösung für den oben genannten Fehler ist. Wie vom OP angegeben, war es nicht die Lösung, die er brauchte.
Safado
1
Sie können sie jederzeit umbenennen, z mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
Kenorb
23

Wenn Sie es wirklich brauchen skip-innodb(Anwendungsfall: Geringer Speicherbedarf), müssen Sie es natürlich nicht auskommentieren. Wenn jedoch InnoDB die Standard-Speicher-Engine ist, startet der Server erst, wenn Sie ihm mitteilen, welche Speicher-Engine stattdessen verwendet werden soll, z default-storage-engine=myisam. B. für MyISAM.

Also probieren Sie Folgendes:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam
Andy Mikhaylenko
quelle
6
Versuchen Sie, "default-storage-engine = myisam" zu /etc/mysql/my.cnf im Abschnitt [mysqld] hinzuzufügen, wenn Sie "skip_innodb" haben möchten.
Pincoded
Funktioniert wunderbar. Prost!
Boann,
4
Was ist, wenn Sie Innodb-Unterstützung wünschen?
Nilzor
1
Mariadb on Centos 7 hinzugefügt default-storage-engine=myisamin der Datei /etc/my.cnf unter [mysqld]. Das hat den Trick gemacht. Thx
Damodar Bashyal
12

Wenn Sie MySQL 5.6 oder höher verwenden und InnoDB deaktivieren möchten, vergessen Sie nicht " --default-tmp-storage " oder es funktioniert nicht:

Verwenden Sie zum Deaktivieren von InnoDB --innodb = OFF oder --skip-innodb. In diesem Fall wird der Server nur gestartet, wenn Sie --default-storage-engine und --default-tmp-storage-engine verwenden, um den Standardwert für eine andere Engine für permanent und festzulegen, da die Standardspeicher-Engine InnoDB ist TEMPORARY-Tabellen.

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

Sie können dies zu Ihrer my.cnf hinzufügen:

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

Nur um sicherzugehen, dass es funktioniert.

Juan
quelle
+1, Niemals das offizielle Dokument bemerken. es sollte einstellen default-storage-engineund default-tmp-storage-enginedanke.
Giberno
7

Überprüfen Sie Ihr MySQL-Fehlerprotokoll.

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

Wenn in Ihrem Protokoll steht (wie in meinem):

InnoDB: Pufferpool wird initialisiert, Größe = 128,0 MB
InnoDB: mmap (137363456 Bytes) fehlgeschlagen; Errno 12
[ERROR] InnoDB: Speicher für den Pufferpool kann nicht zugeordnet werden

Sie haben nicht genügend Speicher, um die Standardpuffergröße von 128 MB zu verwenden

Bearbeiten Sie die Konfigurationsdatei /etc/mysql/my.cnf und fügen Sie eine Zeile hinzu, um eine kleinere Größe für innodb_buffer_pool_size anzugeben.

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

Speichern Sie die Konfigurationsdatei und starten Sie mysql

sudo service mysql start
user2219975
quelle
Ist hier genau richtig. Könnte aber auch sein, dass Prozesse des Webservers hängen oder etwas den Arbeitsspeicher auffrisst, überprüfe das auch.
So
0

Probieren Sie zwei weitere Dinge aus. 1. Verringern Sie die Größe des Innodb-Pufferpools. 2. Bearbeiten Sie das MySQL-Startskript und fügen Sie die Option --innodb hinzu.

Ich frage mich auch, ob Ihr Paket fehlerhaft ist. Könnten Sie eine andere Nebenversion ausprobieren?

Außerdem nehme ich an, dass Ihr MySQL-Server ebenfalls aktualisiert wurde. Vielleicht ist diese Version kaputt? Präzise ist noch nicht endgültig.

johnshen64
quelle
Schon getan, ohne Wirkung.
Garrett
Sorry, habe es mit ein paar Dingen bearbeitet, die ich ausprobieren möchte, eher wie ein schlechtes Paket. Versuchen Sie, die mysql.com-Version oder Percona zu verwenden, die normalerweise stabiler sind.
Johnshen64
Stellen Sie außerdem sicher, dass das alte Paket vollständig gelöscht ist, wenn das neue installiert wird.
Johnshen64
Würde das vollständige Löschen des Pakets zum Verlust von Datenbankinformationen führen?
Garrett
Sollte nicht, aber aus Sicherheitsgründen sollten Sie Ihr DBS immer sichern.
Johnshen64
0

Ich habe diese Fehlermeldung erhalten, als ich den von mir verwendeten Speicherort gelöscht habe tmpdir. Wenn Sie kürzlich Ihre geändert haben tmpdir, möchten Sie möglicherweise überprüfen, ob es sich um einen gültigen, beschreibbaren Speicherort handelt.

Jeff
quelle