Ich arbeite an einer Webanwendung, die eine Datenbank mit zwei Tabellen abfragt. Ich denke, ich habe ein Problem mit der Datenbeschädigung. Einer meiner Tische ist in Ordnung, und ich habe es abgeladen und gesichert. Ich habe die Datenbank aus einigen MongoDB-Daten, die ich analysiert habe, mit einem Python-Skript gefüllt.Wie löst man ein Problem mit Datenkorruption? Ich kann keine SQL-Abfragen für die Tabelle ausführen
Ich verwende HeidiSQL, um mit meiner Datenbank zu arbeiten, und ich kann die beschädigte Tabelle nicht anzeigen, wenn ich "innodb_force_recovery = 4" (was ich glaube, erstellt eine schreibgeschützte Version von Tabellen) in my.ini angeben. Trotzdem kann ich keine mysqldump in der Tabelle ausführen, nachdem ich diese Bedingung angegeben habe.
Dann dachte ich, vielleicht war es ein Problem mit HeidiSQL. Es war nicht. Selbst von der Befehlszeile mysqld konnte ich keine Aktionen für die beschädigte Datenbank ausführen. Unten zeige ich die Fehlermeldung, die ich bekommen habe.
Error message in mysqld as viewed via command line
Auch das XAMPP Control Panel führt den folgenden Fehler beim Start:
160705 14:41:34 [ERROR] mysqld bekam Ausnahme 0x80000003; Dies könnte daran liegen, dass Sie einen Fehler gefunden haben. Es ist auch möglich, dass diese Binärdatei oder eine der Bibliotheken, mit denen sie verknüpft wurde, beschädigt, falsch aufgebaut, oder falsch konfiguriert ist. Dieser Fehler kann auch durch fehlerhafte Hardware verursacht werden.
So. An diesem Punkt könnte ich mein Python-Skript erneut ausführen, aber ich nehme an, dass ich den gleichen Fehler treffen würde.
Wie empfehlen Sie, dieses Problem zu beheben?
Vielen Dank für Ihre Antwort. Ich habe noch nie in MySQL geschrieben, also werde ich das als späteren Ausweg versuchen :). Ich bin zweifelhaft, dass mysqldump funktioniert, einfach weil ich nicht auf die Tabelle zugreifen kann - mysqld stürzt sofort ab. Ich werde in "Percona Data Recovery Toolkit" und "Undrop-for-Innodb" – ksani
ich meine, ein Shell-Skript untersuchen. etwas wie 'for d in $ (mysql -NBe 'zeige Datenbanken'); do für t in $ (mysql -NBe 'show tables' $ d); do mysqldump --skip-lock-tables $ d $ t> $ d- $ t.sql; erledigt; fertig. Viel Glück. – akuzminsky