Beheben Sie das Problem, dass die MySQL-Datenbank unerwartet abstürzt, wodurch die Tabellendatendatei beschädigt wird und nicht gestartet werden kann

Beheben Sie das Problem, dass die MySQL-Datenbank unerwartet abstürzt, wodurch die Tabellendatendatei beschädigt wird und nicht gestartet werden kann

Problem:

Die MySQL-Datenbank ist unerwartet abgestürzt und konnte nicht gestartet werden.

Fehlerprotokoll:

Startfehler: Dienst mysqld neu gestartet

FEHLER! Die PID-Datei des MySQL-Servers konnte nicht gefunden werden!
MySQL wird gestartet. FEHLER! Der Server wurde beendet, ohne die PID-Datei (/www/wdlinux/mysql/var/iZ2358oz5deZ.pid) zu aktualisieren.

Datenbank-Fehlerprotokoll:

200719 22:07:43 InnoDB: Datenbank wurde nicht normal heruntergefahren!
InnoDB: Absturzwiederherstellung wird gestartet.
InnoDB: Tablespace-Informationen aus den .ibd-Dateien lesen …
InnoDB: Fehler: Beim Versuch, Tablespace 840 mit dem Namen „./ob_wp/ob_termmeta.ibd“ hinzuzufügen.
InnoDB: zum Tablespace-Speicher-Cache, aber Tablespace
InnoDB: 840 mit dem Namen „./dev_nss/dg_queue.ibd“ existiert bereits im Tablespace
InnoDB: Speichercache!
200719 22:07:43 mysqld_safe mysqld aus PID-Datei /www/wdlinux/mysql/var/iZ2358oz5deZ.pid beendet

Tipp: Wenn die Tabellenbereichsinformationen beim Start der Datenbank gelesen werden, ist die Datendatei der Tabelle ob_users.ibd in der Bibliothek ob-wp bereits im Tabellenbereich vorhanden.

expandieren:

Die Speicher-Engine ist myisam. Im Datenbankverzeichnis finden Sie drei Dateitypen: .frm, .myi und .myd
(a) *.frm – Tabellendefinition, eine Datei, die die Tabellenstruktur beschreibt.
(b) *.MYD--„D“-Dateninformationsdatei, die die Datendatei der Tabelle ist.
(c) *.MYI – „I“-Indexinformationsdatei, die den Datenbaum aller Indizes in der Tabellendatendatei darstellt. Die Speicher-Engine ist InnoDB. Im Datenverzeichnis gibt es zwei Dateitypen: .frm und .ibd
(a) *.frm-Datei mit Tabellenstruktur.
(b) *.ibd – Tabellendatendatei

Quelle: https://www.cnblogs.com/liucx/

Methode 1:

Gemäß den Eingabeaufforderungsinformationen wird festgestellt, dass die InnoDB-Tabelle beschädigt ist. Versuchen Sie daher, die Tabellenstruktur und die Tabellendatendateien im Bibliotheksverzeichnis dev_nss zu sichern.
mv ob_termmeta.ibd ob_termmeta.ibd,bak
mv ob_termmeta.frm ob_termmeta.frm.bak
Dann habe ich MySQL neu gestartet, konnte es aber immer noch nicht starten. Es wurde angezeigt, dass bereits andere Tabellendatendateien vorhanden waren. Ich habe die beschädigten Dateien dreimal hintereinander gesichert, konnte es aber immer noch nicht starten. Daher wird von dieser Methode Abstand genommen.

Methode 2:

1. Konsultieren Sie die Dokumentation der offiziellen Website, fügen Sie der MySQL-Konfigurationsdatei /etc/my.cnf eine Konfiguration hinzu und starten Sie erfolgreich
[mysqld]
innodb_force_recovery = 1

2. Sichern Sie die Datenbank
mysqldump -h172.168.2.100 -uroot -p -A > mysql_all_bak.sql
Wenn der Bericht nicht existiert, kann mysqldump den Parameter --force hinzufügen, um den Fehler zu überspringen

3. Löschen Sie die Datenbank
Datenbank hxdb löschen; oder mv hxdb hxdb_bak (aus Sicherheitsgründen)

4. Entfernen Sie den Parameter innodb_force_recovery
Nach dem Entfernen der zuvor eingestellten Parameter starten Sie die Datenbank neu

5. Daten importieren
mysql -uroot -p < mysql_all_bak.sql
Warnung: Die Verwendung eines Kennworts in der Befehlszeilenschnittstelle kann unsicher sein.
FEHLER 1050 (42S01) in Zeile 25: Tabelle „hxdb“. „tb_info“ existiert bereits

Wenn die Meldung angezeigt wird, dass die Tabelle bereits vorhanden ist, liegt dies daran, dass die Datenbank nach dem Entfernen des Parameters innodb_force_recovery ein Rollback durchführt und die entsprechende IBD-Datei generiert. Sie müssen die Datei daher löschen und erneut importieren.
mysql -uroot -p < mysql_all_bak.sql

Notiz:

Erklärung des Parameters innodb_force_recovery: Absturzwiederherstellungsmodus, wird normalerweise nur in schwerwiegenden Fehlerbehebungssituationen geändert. Mögliche Werte sind 0 bis 6.

Setzen Sie diese Variable nur im Notfall auf einen Wert größer als 0, damit Sie InnoDB starten und Ihre Tabellen sichern können. Als Sicherheitsmaßnahme verhindert InnoDB Einfüge-, Aktualisierungs- oder Löschvorgänge, wenn innodb_force_recovery größer als 0 ist.
In 5.6.15 wird innodb_force_recovery auf 4 oder höher gesetzt, um InnoDB in den schreibgeschützten Modus zu versetzen. Da relay_log_info_repository=TABLE und master_info_repository=TABLE Informationen in InnoDB-Tabellen speichern, können diese Einschränkungen dazu führen, dass Replikationsverwaltungsbefehle mit Fehlern fehlschlagen.

innodb_force_recovery ist standardmäßig 0 (normaler Start ohne erzwungene Wiederherstellung). Zulässige Werte ungleich Null für innodb_force_recovery sind 1 bis 6. Größere Werte beinhalten die Funktionalität kleinerer Werte. Beispielsweise enthält der Wert 3 alle Merkmale der Werte 1 und 2.
Wenn Sie die Tabelle mit einem innodb_force_recovery-Wert von 3 oder weniger sichern können, besteht für Sie eine relativ geringe Gefahr, dass nur einige der Daten einer einzigen beschädigten Seite verloren gehen. Werte von 4 oder höher gelten als gefährlich, da Datendateien dauerhaft beschädigt werden können. Ein Wert von 6 wird als zu hoch angesehen, da Datenbankseiten in einem veralteten Zustand belassen werden, was wiederum B-Bäume und andere Datenbankstrukturen einer stärkeren Beschädigung aussetzen kann.

Aus Sicherheitsgründen verhindert InnoDB INSERT-, UPDATE- oder DELETE-Operationen, wenn innodb_force_recovery größer als 0 ist. Ab MySQL 5.6.15 wird InnoDB in den schreibgeschützten Modus versetzt, wenn innodb_force_recovery auf 4 oder mehr gesetzt wird.
1 (SRV_FORCE_IGNORE_CORRUPT)
Lassen Sie den Server weiterlaufen, auch wenn er eine beschädigte Seite erkennt. Versuchen Sie, mit SELECT * FROM tbl_name beschädigte Indexdatensätze und Seiten überspringen zu lassen. Dies kann beim Sichern der Tabelle hilfreich sein.
2 (SRV_FORCE_NO_BACKGROUND)
Blockiert die Ausführung des Hauptthreads und aller Bereinigungsthreads. Wenn während eines Bereinigungsvorgangs ein Absturz auftritt, verhindert dieser Wiederherstellungswert den Absturz.
3 (SRV_FORCE_NO_TRX_UNDO)
Führen Sie nach der Wiederherstellung nach einem Absturz kein Transaktions-Rollback aus.
4 (SRV_FORCE_NO_IBUF_MERGE)
Verhindert Zusammenführungsvorgänge beim Einfügepuffer. Wenn sie einen Unfall verursachen, führen Sie sie nicht aus. Tabellenstatistiken werden nicht berechnet. Dieser Wert kann die Datendatei dauerhaft beschädigen. Nachdem Sie diesen Wert verwendet haben, müssen Sie alle sekundären Indizes löschen und neu erstellen. Stellen Sie InnoDB in MySQL 5.6.15 auf schreibgeschützt ein.
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
Sehen Sie sich beim Starten der Datenbank nicht das Undo-Protokoll an: InnoDB betrachtet sogar unvollständige Transaktionen als festgeschrieben. Dieser Wert kann die Datendatei dauerhaft beschädigen. Stellen Sie InnoDB in MySQL 5.6.15 auf schreibgeschützt ein.
6 (SRV_FORCE_NO_LOG_REDO)
Bei der Wiederherstellung wird kein Redo-Log-Rollforward durchgeführt. Dieser Wert kann die Datendatei dauerhaft beschädigen. Datenbankseiten in einem veralteten Zustand belassen, was wiederum zu weiteren Beschädigungen von B-Bäumen und anderen Datenbankstrukturen führen kann. Stellen Sie InnoDB in MySQL 5.6.15 auf schreibgeschützt ein.

Quelle: https://www.cnblogs.com/liucx/

Besuchen Sie die offizielle Website:
https://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_force_load_corrupted

Hoffe das hilft

Dies ist das Ende dieses Artikels zur Lösung des Problems, dass MySQL-Datenbanken unerwartet abstürzen, wodurch Tabellendatendateien beschädigt werden und nicht gestartet werden können. Weitere verwandte Lösungen zum Problem, dass MySQL-Datenbanken unerwartet abstürzen, wodurch Tabellendatendateien beschädigt werden und nicht gestartet werden können, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen
  • MySQL-Export ganzer oder einzelner Tabellendaten
  • Warum der Speicherplatz nach dem Löschen von Daten in MySQL nicht freigegeben wird
  • Lösung für den Fehler beim Starten von MySQL aufgrund unzureichenden Speicherplatzes in Ubuntu
  • Häufige Probleme mit der MySQL-Speicher-Engine MyISAM (Tabellenbeschädigung, Unzugänglichkeit, unzureichender Speicherplatz)
  • So deaktivieren Sie das MySQL-Protokoll, um Speicherplatz unter lnmp zu schützen
  • Mehrere Vorschläge zum Verkleinern von MySQL, um Speicherplatz zu sparen
  • So geben Sie Speicherplatz frei, nachdem Sie Daten in Mysql InnoDB gelöscht haben
  • Warum ist der Speicherplatz nach dem Löschen von Tabellendaten in MySQL immer noch belegt?

<<:  React realisiert sekundäre Verknüpfung (linke und rechte Verknüpfung)

>>:  Analyse des Prozesses der einfachen Bereitstellung von Nginx im Docker-Container

Artikel empfehlen

Erläuterung der Schritte für Tomcat zur Unterstützung des https-Zugriffs

So ermöglichen Sie Tomcat die Unterstützung des h...

So legen Sie in Linux eine feste IP fest (getestet und effektiv)

Öffnen Sie zunächst die virtuelle Maschine Öffnen...

Was sind die Unterschiede zwischen var let const in JavaScript

Inhaltsverzeichnis 1. Wiederholte Erklärung 1,1 v...

Detaillierte Erläuterung der MySQL-Filterreplikationsideen

Inhaltsverzeichnis MySQL gefilterte Replikation I...

JavaScript implementiert den detaillierten Prozess der Stapelstruktur

Inhaltsverzeichnis 1. Die Stapelstruktur verstehe...

VMware ESXI-Servervirtualisierungscluster

Inhaltsverzeichnis Zusammenfassung Umgebung und W...

JavaScript zum Erzielen eines Taobao-Produktbild-Umschalteffekts

JavaScript-Umschalteffekt für Bekleidungsalben (ä...

Was ist Flex und ein ausführliches Tutorial zur Flex-Layout-Syntax

Flexibles Layout Flex ist die Abkürzung für Flexi...