androxin
Goto Top

Inkonsistente MySQL Tabellen wiederherstellen

Moin,

aus "Gründen" musste ich diverse MySQL Datenbanken von einer formatierten Festplatte wiederherstellen.
In der Regel waren auch noch die passenden .frm, .MYD und .MYI Dateien vorhanden. In 90% der Fälle hat der MySQL Server diese sogar ohne zu Murren wieder eingelesen. Bei den restlichen 10% gibt es in phpMyAdmin die Fehlermeldung "#1033 - Incorrect information in file:", wenn man deren Inhalt anschauen möchte.
Irgendetwas wird also kaputt sein.

Besagte Tabellen werden in phpMyAdmin zwar aufgelistet, man kann deren Inhalt oder Struktur aber nicht anzeigen.
Bei einem Klick auf die Struktur, ist die "Strukturtabelle" leer und es werden folgende Warnungen im unteren Bereich der Seite angezeigt:
Notice in .\libraries\sql-parser\src\Parser.php#371
 Trying to get property of non-object

Backtrace

.\libraries\sql-parser\src\Parser.php#324: SqlParser\Parser->parse()
.\libraries\controllers\TableStructureController.class.php#347: SqlParser\Parser->__construct(boolean false)
.\tbl_structure.php#48: PMA\Controllers\TableStructureController->indexAction()
Notice in .\libraries\controllers\TableStructureController.class.php#352
 Undefined offset: 0

Backtrace

.\tbl_structure.php#48: PMA\Controllers\TableStructureController->indexAction()

Hat jemand eine Idee, wie ich die Daten ohne großen Aufwand wieder in die Datenbank bekomme? Die Informationen aus den .MYD Dateien per Hand auszulesen und irgendwie in INSERT Statements zu quetschen wäre zwar möglich, ist aber mit einem riesigen Aufwand verbunden. face-sad

Content-Key: 289958

Url: https://administrator.de/contentid/289958

Printed on: April 26, 2024 at 08:04 o'clock

Member: Androxin
Androxin Dec 05, 2015 at 22:50:26 (UTC)
Goto Top
Inzwischen habe ich folgendes Herausgefunden:

Es handelt sich um eine MyISAM Tabelle. Man sollte das ganze also eigentlich Byteweise auslesen können. Die Struktur, Feldgrößen etc. sind bekannt.

Einzig die varchar Felder irritieren mich noch ein wenig. Normalerweise wird ja in dem Feld vor dem varchar-Inhalt die tatsächliche Länge gespeichert. Wie funktioniert das, wenn der Bytewert für die Länge exakt der selbe ist wie der, des ersten varchar-Inhalt-Zeichens?

Bsp:
Name | Typ      | Länge
  a  | varchar  | 50
  b  | varchar  | 50


Name | Inhalt
   a | 11
   b | 22

Bytes:
02 31 31 02 32 32

Wie funktioniert das bei folgendem Beispiel?
Name | Inhalt
   a | 11
   b | 22222222222222222222222222222222222222222222222222 (<-- 50 Zeichen lang)

Bytes:
02 31 31 32 32 32 32 32 32 32... ist es jedenfalls nicht.


Und: Hat jemand einen Tipp für mich, wie man das am besten Byteweise auslesen kann? Gibt es da Tools für? Alles über einen Hex-Editor rauszufummeln ist zu umständlich. face-wink