Sicherung und Wiederherstellung

MySQLBeginner
Jetzt üben

Einführung

In der Systemverwaltung geht es bei Datenverlust nicht um die Frage „ob“, sondern „wann“. Ob ein Hardwareausfall, Softwarefehler oder menschliches Versagen die Ursache ist: Der Verlust kritischer Daten kann katastrophale Folgen haben. Deshalb gehören Sicherung und Wiederherstellung zu den wichtigsten Fähigkeiten bei der Arbeit mit Datenbanken.

In diesem Lab führen Sie eine vollständige Simulation einer „Notfallwiederherstellung“ durch. Sie beginnen mit einer intakten Datenbank, sichern sie zuverlässig, löschen sie anschließend (als Simulation eines Notfalls) und stellen sie danach mithilfe der Sicherung wieder her.

Sie lernen, wie Sie:

  • mit dem Dienstprogramm mysqldump eine logische Sicherung erstellen;
  • durch das Löschen einer Datenbank einen katastrophalen Ausfall simulieren;
  • die Datenbank mithilfe Ihrer Sicherungsdatei in ihren ursprünglichen Zustand zurückversetzen.

Eine logische Sicherung enthält SQL-Anweisungen, mit denen sich das Schema und die Daten wiederherstellen lassen. Das unterscheidet sie von einer physischen Sicherung, bei der die unveränderten Datenbankdateien kopiert werden. Beide Ansätze gibt es, aber logische Sicherungen sind für Anfänger leichter zu lesen und zu verstehen.

Diese Unterscheidung ist wichtig, weil die beiden Sicherungstypen jeweils etwas unterschiedliche Probleme lösen. Logische Sicherungen sind portabel und für Menschen lesbar, während physische Sicherungen meist näher an der Speicher-Engine und den internen Wiederherstellungsmechanismen liegen.

Eine Sicherung erstellen

Überprüfen Sie zunächst, ob eine Datenbank mit wichtigen Daten vorhanden ist. Die Datenbank app_db wurde bereits mit einigen Benutzerdaten befüllt.

Prüfen Sie die aktuellen Daten:

sudo mysql -e "SELECT * FROM app_db.users;"

Sie sollten eine Liste mit Benutzern sehen (Alice, Bob, Charlie).

Erstellen Sie nun mit dem Dienstprogramm mysqldump eine logische Sicherung. Eine logische Sicherung exportiert im Wesentlichen eine Textdatei mit allen SQL-Anweisungen (zum Beispiel CREATE TABLE und INSERT), die zum vollständigen Neuaufbau Ihrer Datenbank erforderlich sind.

Die Sicherungsdatei ist also kein undurchsichtiges Binärformat. In der Regel handelt es sich um ein SQL-Skript, das später erneut an einen Datenbankserver übergeben werden kann, um Schema und Daten wiederherzustellen.

Führen Sie den folgenden Befehl aus, um die Datenbank in einer Datei namens backup.sql zu speichern:

sudo mysqldump app_db > ~/project/backup.sql

Aufschlüsselung des Befehls:

  • mysqldump: Das Dienstprogramm zum Exportieren von Datenbankinhalten.
  • app_db: Die Datenbank, die Sie sichern möchten.
  • >: Der Linux-Umleitungsoperator. Er schreibt die Ausgabe des Befehls in eine Datei.
  • ~/project/backup.sql: Der Pfad zur Zieldatei.

Überprüfen Sie, ob die Sicherungsdatei erstellt wurde:

ls -l ~/project/backup.sql

Sie können auch einen Blick in die Datei werfen, um die SQL-Anweisungen anzuzeigen:

head -n 20 ~/project/backup.sql

Datenverlust simulieren

Jetzt kommt der kritische Teil. Um unseren Wiederherstellungsplan zu testen, benötigen wir einen Notfall. Wir simulieren das versehentliche Löschen der Produktionsdatenbank.

Warnung: Der folgende Befehl löscht Daten dauerhaft. In einer echten Produktionsumgebung würden Sie ihn nur ausführen, wenn Sie absolut sicher wären, dass Sie die Daten zerstören möchten.

Dieser destruktive Schritt ist enthalten, weil eine Sicherung nur dann wirklich nützlich ist, wenn Sie nach einem tatsächlichen Datenverlust nachweisen können, dass die Wiederherstellung funktioniert. Eine Sicherungsstrategie, die nie getestet wird, beruht lediglich auf einer Annahme.

Löschen Sie die Datenbank app_db (führen Sie DROP aus):

sudo mysql -e "DROP DATABASE app_db;"

Bestätigen Sie, dass der Notfall eingetreten ist, indem Sie versuchen, auf die Datenbank zuzugreifen:

sudo mysql -e "USE app_db;"

Sie sollten den folgenden Fehler sehen: ERROR 1049 (42000): Unknown database 'app_db'.

Damit ist bestätigt, dass die Datenbank nicht mehr vorhanden ist. Auf einem echten Produktionsserver ohne Sicherung wäre das ein sehr schlechter Tag.

Die Datenbank wiederherstellen

Glücklicherweise haben wir die Datei backup.sql. Mit ihr können wir die Daten wiederherstellen.

mysqldump exportiert standardmäßig jedoch nur den Inhalt der Datenbank, nicht den Befehl zum Erstellen der Datenbank selbst. Da Sie app_db vollständig gelöscht haben, müssen Sie zunächst eine leere Datenbank als Ziel für die Daten erstellen.

Dieses Detail hilft Anfängern zu verstehen, welche Bestandteile tatsächlich erfasst wurden. Sicherungen sind keine magischen Momentaufnahmen von allem, sofern der gewählte Befehl und seine Optionen diese Bestandteile nicht ausdrücklich einschließen.

Erstellen Sie die leere Datenbank:

sudo mysql -e "CREATE DATABASE app_db;"

Importieren Sie die Daten aus Ihrer Sicherungsdatei:

sudo mysql app_db < ~/project/backup.sql

Aufschlüsselung des Wiederherstellungsbefehls:

  • sudo mysql: Stellt eine Verbindung zum Datenbankserver her.
  • app_db: Gibt MySQL an, welche Datenbank als Ziel verwendet werden soll.
  • <: Der Linux-Umleitungsoperator für Eingaben. Er liest den Inhalt der Datei und übergibt ihn an den Befehl mysql, so als würden Sie ihn selbst eingeben.

Wenn der Befehl ohne Ausgabe beendet wird, bedeutet das normalerweise, dass er erfolgreich war.

Bei der Wiederherstellung werden die SQL-Anweisungen im Wesentlichen wieder an den Server übergeben. Anders gesagt: Eine Wiederherstellung besteht oft darin, die in der logischen Sicherung gespeicherten Anweisungen kontrolliert erneut auszuführen.

Die Datenwiederherstellung überprüfen

Der abschließende und wichtigste Schritt jedes Sicherungsplans ist die Überprüfung. Nur weil der Wiederherstellungsbefehl keinen Fehler gemeldet hat, bedeutet das nicht automatisch, dass die Daten korrekt sind. Sie müssen dies prüfen.

Das ist eine der wichtigsten Arbeitsgewohnheiten in der Systemverwaltung: Erfolg bedeutet nicht, dass „der Befehl beendet wurde“. Erfolg bedeutet, dass der Systemzustand danach korrekt ist.

Fragen Sie die Tabelle users erneut ab:

sudo mysql -e "SELECT * FROM app_db.users;"

Erfolgskriterien:

Sie sollten die ursprünglichen Daten sehen:

+----+---------+---------------------+
| id | name    | email               |
+----+---------+---------------------+
|  1 | Alice   | alice@example.com   |
|  2 | Bob     | bob@example.com     |
|  3 | Charlie | charlie@example.com |
+----+---------+---------------------+

Wenn Sie Alice, Bob und Charlie sehen, haben Sie die Daten nach dem Notfall erfolgreich wiederhergestellt.

Zusammenfassung

In diesem Lab haben Sie einen vollständigen Zyklus zur Notfallwiederherstellung erfolgreich durchgeführt. Sie haben gelernt, wie Sie:

  • Sichern: Eine Datenbank mit mysqldump in eine Datei exportieren.
  • Zerstören: Mit DROP DATABASE einen Datenverlust simulieren.
  • Wiederherstellen: Eine SQL-Dump-Datei mithilfe der Eingabeumleitung < importieren.
  • Überprüfen: Die Integrität der wiederhergestellten Daten bestätigen.

Regelmäßige Sicherungen sind Ihr wichtigster Schutz gegen Datenverlust. In einer echten Umgebung sollten Sie diesen Prozess automatisieren und Ihre Wiederherstellungen regelmäßig testen.