English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Lösungsmethode für den fehlgeschlagenen Start und das Nichtstarten von MySQL-Datenbank innodb

Problemvorstellung

Der Computer hat während der Benutzung abstürzen, nach dem Neustart wurde festgestellt, dass mysql nicht erfolgreich gestartet ist. Durch das Überprüfen des Fehlerprotokolls wurde festgestellt, dass ein Problem mit innodb der Grund für den Misserfolg des mysql-Starts ist.

Fehlerprotokoll

$ mysql.server start
Starten von MySQL
. FEHLER! Der Server hat sich ohne Aktualisierung der PID-Datei beendet (/usr/local/var/mysql/fdipzonedeMacBook-Air.local.pid).
22:08:37 mysqld_safe Starten des mysqld-Daemons mit Datenbanken aus /usr/local/var/mysql
2016-04-23 22:08:38 0 [Warnung] TIMESTAMP mit implizitem Standardwert ist veraltet. Bitte verwenden Sie --Serveroption explicit_defaults_for_timestamp (siehe Dokumentation für weitere Details).
2016-04-23 22:08:38 0 [Hinweis] /usr/local/Keller/mysql/5.6.24/bin/mysqld (mysqld 5.6.24) als Prozess gestartet 3604 ...
2016-04-23 22:08:38 3604 [Warnung] Lower_case_table_names festgelegt auf=2 da das Dateisystem für /usr/local/var/mysql/ ist nicht auf Gross-/Kleinschreibung empfindlich
2016-04-23 22:08:38 3604 [Hinweis] Plugin 'FEDERATED' ist deaktiviert.
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Verwendet Atome, um die Anzahl der Pufferpool-Seiten zu referenzieren
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Der InnoDB-Memory-Heap ist deaktiviert
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Mutexes und rw_locks verwenden GCC atomare Builtins
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Speicherbarriere wird nicht verwendet
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Komprimierte Tabellen verwenden zlib 1.2.3
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Verwendet CPU crc32 Anweisungen
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Initialisiere Pufferpool, Größe = 128.0M
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Initialisierung des Pufferpools abgeschlossen
2016-04-23 22:08:38 3604 [Hinweis] InnoDB: Höchstes unterstütztes Dateiformat ist Barracuda.
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Der Log-Scan hat den Checkpoint lsn überschritten. 68929933440
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Die Datenbank wurde nicht normal heruntergefahren!
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Crash-Recovery wird gestartet.
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Tablespace-Informationen werden aus den .ibd-Dateien gelesen...
2016-04-23 22:08:38 3604 [FEHLER] InnoDB: Überprüfungsfehler im Tablespace ./test_user/user_recommend_code#P#pmax.ibd (Tabelle test_user/user_recommend_code#P#pmax)
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße:1024 Seiten zum Analysieren:64
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße: 1024, Mögliche space_id-Zahl:0
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße:2048 Seiten zum Analysieren:48
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße: 2048, Mögliche space_id-Zahl:0
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße:4096 Seiten zum Analysieren:24
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße: 4096, Mögliche space_id-Zahl:0
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße:8192 Seiten zum Analysieren:12
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße: 8192, Mögliche space_id-Zahl:0
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße:16384 Seiten zum Analysieren:6
2016-04-23 22:08:38 3604 [Notiz] InnoDB: GÜLTIG: Speicher:2947354 page_no:3 page_size:16384
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seitengröße: 16384, Mögliche space_id-Zahl:1
2016-04-23 22:08:38 3604 [Notiz] InnoDB: space_id:2947354, Anzahl der übereinstimmenden Seiten: 1/1 (16384)
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Gewählter Speicher:2947354
2016-04-23 22:08:38 3604 [Notiz] InnoDB: Seite 0 des Tablespace wird wiederhergestellt 2947354
2016-04-23 22:08:38 3604 [Warnung] InnoDB: Doublewrite hat keine page_no=0 im Speicher: 2947354
2016-04-23 22:08:38 7fff79b9e300 InnoDB: Fehlernummer des Betriebssystems 2 bei einer Dateioperation.
InnoDB: Der Fehler bedeutet, dass das System den angegebenen Pfad nicht finden kann.
InnoDB: Wenn Sie InnoDB installieren, beachten Sie, dass Sie erstellen müssen
InnoDB: Sie erstellen die Verzeichnisse selbst, InnoDB erstellt sie nicht.
InnoDB: Fehler: Die Datei konnte nicht geöffnet werden-Tabellen Speicherplatz Datei ./test_user/user_recommend_code#P#pmax.ibd
InnoDB: Wir führen die Crash-Recovery nicht fort, weil die Tabelle möglicherweise
InnoDB: beschädigt, wenn wir die Logzeilen im InnoDB-Log nicht darauf anwenden können.
InnoDB: Um das Problem zu beheben und mysqld zu starten:
InnoDB: 1) Wenn es ein Berechtigungsproblem in der Datei gibt und mysqld nicht
InnoDB: Öffnen Sie die Datei, Sie sollten die Berechtigungen ändern.
InnoDB: 2) Wenn die Tabelle nicht benötigt wird oder Sie sie aus einer Sicherung wiederherstellen können,
InnoDB: Dann können Sie die .ibd-Datei löschen und InnoDB führt eine normale
InnoDB: Crash-Recovery durchführen und diese Tabelle ignorieren.
InnoDB: 3) Wenn das Dateisystem oder die Festplatte defekt ist und Sie die Datei nicht entfernen können
InnoDB: die .ibd-Datei, Sie können innodb_force_recovery > 0 in my.cnf einstellen
InnoDB: und zwingen Sie InnoDB, hier die Crash-Recovery fortzusetzen.

Lösungsmethode

1.Wenn die Daten nicht wichtig sind oder bereits gesichert sind, genügt es, mysql zu starten

Gehen Sie in das mysql-Verzeichnis, normalerweise: /usr/local/var/mysql/

Löschen Sie ib_logfile*

Löschen Sie ibdata*

Löschen Sie alle physischen Datenbankverzeichnisse (z.B. wenn die Datenbank test_db ist, führen Sie rm aus -rf test_db)

Starten Sie mysql neu

Erstellen Sie die Datenbank neu oder verwenden Sie die Sicherung, um zu überschreiben

2. Wenn die Daten wichtig sind und keine Sicherung vorhanden ist

Sie können den Parameter innodb_force_recovery verwenden, um mysqld die Wiederherstellungsschritte zu überspringen, starten Sie mysqld, exportieren Sie die Daten und erstellen Sie die Datenbank neu.

innodb_force_recovery kann auf folgende Werte gesetzt werden1-6, große Zahlen enthalten den Einfluss der vorangegangenen Zahlen

     1, (SRV_FORCE_IGNORE_CORRUPT): Ignorieren Sie die überprüften korrupten Seiten.

     2, (SRV_FORCE_NO_BACKGROUND): Verhindern Sie den Lauf der Hauptthread, wie der Hauptthread eine vollständige Purge-Aktion ausführen muss, würde zu einem Crash führen.

     3, (SRV_FORCE_NO_TRX_UNDO): Führen Sie keine Transaktionsrückroll-Aktionen aus.

     4, (SRV_FORCE_NO_IBUF_MERGE): Führen Sie keine Kombination der Insert-Buffers aus.

     5, (SRV_FORCE_NO_UNDO_LOG_SCAN): Sehen Sie keine Redo-Logs an, InnoDB-Speicherengine betrachtet nicht abgeschlossene Transaktionen als abgeschlossen.

     6, (SRV_FORCE_NO_LOG_REDO): Führen Sie keine Vorwärtsrollback-Aktionen aus.

Fügen Sie in my.cnf (bei Windows ist es my.ini) hinzu

innodb_force_recovery = 6 
innodb_purge_thread = 0

Starten Sie mysql neu

Zu diesem Zeitpunkt können nur select, create, drop-Aktionen ausgeführt werden, aber nicht insert, update, delete-Aktionen

Führen Sie die Logik für die Ausführung des Exports aus, nach Abschluss setzen Sie innodb_force_recovery=0, innodb_purge_threads=1, dann die Datenbank neu erstellen und最后把导出的数据重新导入

Zusammenfassung

Das ist der Inhalt dieses Artikels, ich hoffe, er hilft Ihnen beim Lernen oder der Verwendung von mysql. Wenn Sie Fragen haben, können Sie Kommentare hinterlassen und sich austauschen, danke für die Unterstützung der Anleitungsschreie.

Gefällt mir