MySQL Datenbank wiederherstellen

tom81

Well-Known Member
Hallo Freunde der gepflegten Dateisysteme!

Ich habe ein kleines Problem, bzw. eine Sache, die mir keine Ruhe lässt.
Durch gewisse Umstände auf einem Server hat und den daraus resultierenden Dateisystemfehler habe ich jetzt ein Datenbank-puzzle (eigentlich gilt das für jede einzelne Datei und jedes Verzeichnis auf der Festplatte).

Zwei Datenbanken befinden sich nun mit allen ihren Dateien im lost+found Ordner, die Dateinamen sind aber leider nicht mehr lesbar, sie haben jetzt die Inode als Namen "#123456789". Ich kann sie mit hilfe von "file *" identifizieren und die Dateirechte sind auch erhalten, so dass ich sagen kann, dass sie zu mysql gehören.
Vielleicht könnte ich auch zwischen *.frm, *.MYD und *.MYI unterscheiden.

Aber was ich gerne wissen würde, gibt es eine Möglichkeit, den Tabellennamen und somit den ursprünglichen Dateinamen zu ermitteln?
Kann man sowas anders einlesen, z.B. via Script?

Beste Grüße (Hoffe, bin im richtigem Thema gelandet :) )
Der Tom
 
Hab es mal nach FreeBSD verschoben (hoffe das ist dein System) da es sich für mich eher um Dateisystemfragen handelt.
 
Es war ein Debian oder ein Ubuntu... frag nicht welche Version ;) Das Dateisystem war ext3 oder ext4. Mittlerweile habe ich es auf FreeBSD und arbeite in einem Image, welches ich mit dd erstellt habe. Warum und wie das passieren konnte weiß ich (IODelays der feinsten Art mit Schreibgeschwindigkeiten von sagenhaften 461 kB/s). Darum soll es aber nicht gehen... Der Fehler auf dem Server besteht weiterhin und wird vom Hoster auch nicht behoben, daher auch gekündigt...
 
Mit myisamchk -vvvd <datei> kannst du viele Informationen anzeigen lassen, leider nur nicht den Tabellennamen.
Vielleicht kannst du es mit dem Wissen, welches Layout die Tabellen hatten, korrelieren.

Rob
 
Wenn das von Dir ist, dann müßtest Du doch wissen, zu welchem Programm die Datenbanken fehlen, der Rest wäre dann eine reine Knobelaufgabe oder?
Kopie erstellen und umbennen und öffnen ...
 
Das zu retten ist nicht unmöglich, aber aufwändig. Meine Vorredner deuten es ja schon an... Das Problem ist, dass MyISAM meines Wissens nach die Tabellennamen nur aus dem Dateinamen der Datendateien ableitet, sie sind also nicht ein weiteres innerhalb der Datei codiert. Grundsätzlich ist das Vorgehen für dich so:
  1. Jedes MyISAM-Tabelle besteht aus den drei Dateien .frm (das Schema), .MYI (der Index) und .MYD (die Daten). Du musst im ersten Schritt herausfinden, welche Dateien zusammengehören. Dazu gibt es einige Tools, die mit ein wenig Knobelei helfen. Das sind z.B. der oben genannte myisamchk und auch mysqlfrm.
  2. Anschließend gibst du den jeweils drei Dateien einen eindeutigen Namen, z.B. test.frm, test.MYI und test.MYD. Dann kopierst du sie bei gestopptem Server in eine zuvor mit CREATE angelegte Datenbank, startest den Server wieder.
  3. "show tables;" auf die zuvor angelegte Datenbank sollte die Tabelle nun anzeigen. Du kannst aus dem Inhalt auf ihren Namen schließen. Ich würde sie auf jeden Fall mit mysqldump sichern und dann später unter richtigem Namen in die wiederhergestellte Datenbank einspielen.
 
Zurück
Oben