Wenn das letzte Backup schon deutlich zu alt kommt für den entsprechenden Server die ideale Zeit zum kaputt gehen. Vorzugsweise durch einen Plattencrash oder ähnlichen Spaß, so dass sich das Linux des Servers nur noch im Recovery Modus starten lässt. Services hochfahren oder das längst fällige Backup anzustarten sind keine Optionen mehr. Was tun?
Ganz pauschal und einfach lässt sich das natürlich nicht beantworten. Alles wird man z.B. bei einem Plattencrash nicht wieder bekommen, aber vielleicht genug, um den Server wieder aufsetzen zu können. Dafür gibt es natürlich viele Möglichkeiten. dd_rescue zum Beispiel. Hier gibt es eine Anleitung für Debian basierte Systeme.
Eine etwas simplere (und vielleicht auch naivere) Herangehensweise die oft auch zum Ziel führt versuche ich hier kurz zu beschreiben. Es wird sicher nicht alles wiederhergestellt werden können, ich übernehme keine Garantie dafür, dass überhaupt etwas wiederhergestellt wird. Aber ich denke, dass es je nach Situation einen Versuch wert sein kann.
Auch im Rescue System lassen sich die beschädigten Platten evtl. noch mounten. Wenn das klappt versucht man erstmal selektiv alle wichtigen Dateien zu sichern. Natürlich nicht einfach mit einem cp in ein anderes Verzeichnis auf der kaputten Platte, sondern am besten per rsync und ssh auf einen anderen Rechner:
rsync -av /mnt/pfad user@meinNeuerServer:/sicherungspfad
Damit lassen sich z.B. die Dateien aus /var/www/meineSeite oder /var/www/meinBlog sichern (für den rsync Aufruf dem Pfad natürlich ein /mnt voranstellen). Mit etwas Glück bekommt man so den Teil seiner Seite, der nicht in einer Datenbank liegt schnell wieder. Evtl. einfach die Dateien aus dem neusten Update drüber bügeln und dieser Teil der Seite ist schnell wieder hergestellt. Ohne die Daten aus der Datenbank ist das natürlich aber noch nicht viel Wert, sondern erspart höchstens etwas Arbeit, denn drupal oder einen WordPress Blog hat man auch von Hand schnell wieder aufgesetzt.
Also, wie bekomme ich die Daten aus meiner MySQL Datenbank wieder, wenn ich mysql nicht mehr starten kann? Eine Antwort habe ich u.a. hier gefunden. Die Dateien einer MySQL Datenbank liegen im Verzeichnis /var/lib/mysql/<db_name>. Wenn auf dem neuen Server schon mysql installiert ist, kann man direkt wieder ein rsync Kommando absetzen:
rsync -av /mnt/var/lib/mysql/<db_name> user@meinServer:/var/lib/mysql/
Mit etwas Glück wird vieles oder alles kopiert. Kaputte Sektoren auf der Platte bedeuten ja nicht unweigerlich, dass die gesamte Platte nicht mehr gelesen werden kann.
Auf dem neuen Server müssen noch ein paar kleine Schritte getan werden, bevor man testen kann, ob es wirklich funktioniert hat:
- Die Besitzer der Datenbank Dateien anpassen:
chown -R mysql:mysql /var/lib/mysql/<dbname>
- Mit der Datenbank verbinden und die Tabellen einzeln checken und ggf. reparieren und den alten Datenbank Benutzer wieder anlegen:
mysql -u user -p
use <db_name>;
show tables;
Für jede Tabelle in der Liste check table ausführen:
check table <tabellenname>;
Hiervon bekommt man entweder OK oder please run repair table <tabellenname> als Antwort. Im zweiten Fall führt man das auch aus:
repair table `<tabellenname>`;
Am Schluss noch den alten Benutzer wieder anlegen, bevor man den Browser auf den neuen Server loslässt und schaut, ob die Seite wieder läuft:
GRANT all privileges ON <tabellenname>.* TO 'benutzer'@'localhost' IDENTIFIED BY 'tollesPasswort' with GRANT option;
Mit etwas Glück funktioniert die Seite danach wieder wie gewohnt auf dem neuen Server. Wenn das alles nichts geholfen hat bleibt der Versuch mit dd_rescue oder eben man packt das letzte (wenn auch evtl. alte) Backup auf den neuen Server und kann zumindest für einige der Inhalte den google Cache bemühen.