Best Practices zum Sichern von Datenbanken


7

Ich habe dies beim Stackoverflow gefragt , aber jemand hat darauf hingewiesen, dass es besser ist, hier zu fragen.

Nehmen wir Subversion und MySQL auf einem RAID-NAS an. Was sind die besten Methoden zum Sichern von Daten?

Ich dachte daran, mysqldumps unter die Kontrolle von subversionn zu stellen und dann vielleicht das svn-Repository regelmäßig zu sichern, indem ich das Ganze komprimiere.

Wenn Sie keine SVN-Sicherungen auf einer anderen physischen Festplatte speichern, scheint es nicht hilfreich zu sein, Sicherungen des Repositorys zu erstellen. Ist das wahr? Wenn nicht, warum?

Wie oft sollten Backups erstellt und wie viele gespeichert werden?


1
Wie oft Sie Backups erstellen und wie lange Sie diese aufbewahren, hängt vollständig von den Daten ab. Die Backups, die Sie bei Ihrer Bank oder Ihrem Arzt aufbewahren, unterscheiden sich mit ziemlicher Sicherheit stark von den Backups, die in einem einfachen WordPress-Blog gespeichert werden. Was wäre der Vorteil des Speicherns Ihrer Backups in einem VCS? Denken Sie, dass dies eine Art einfaches De-Dup sein würde?
Zoredache

Ich finde es deprimierend zu erkennen, dass es viele kleine Arztpraxen gibt, die wahrscheinlich die gleichen Backups haben, nach denen Matthew fragt ... wenn überhaupt ...
Bart Silverstrim

@BartSilverstrim Ich habe die Erfahrung gemacht, dass kleine Büros im Allgemeinen miese Backups (falls vorhanden) speichern. Aus direkter Erfahrung in den ISP / MSP-Beratungstagen sind Arztpraxen keine Ausnahme. Die gute Seite ist, dass Sie wie ein Held aussehen, wenn Sie Backups implementieren, ein Server einige Tage später stirbt und Sie alle Daten wiederherstellen!
voretaq7

Antworten:


8

Erstens: Versionskontrolle Ihrer Datenbanksicherungen nicht.
Ein Backup ist ein Backup - ein Zeitpunkt. Die Verwendung der Versionskontrolle klingt nach einer guten Idee, aber Sie müssen das gesamte SVN-Repository (ZOMG Freaking HUGE ) wiederherstellen, wenn Sie einen katastrophalen Fehler haben und Ihre Datenbank zurückerhalten müssen. Dies kann eine zusätzliche Ausfallzeit sein, die Sie sich nicht leisten können.

Zweitens stellen Sie sicher, dass Ihre Backups irgendwie vom Standort abweichen. Eine Sicherung auf dem lokalen Computer ist ideal, wenn Sie Daten wiederherstellen müssen, weil Sie eine Tabelle durcheinander gebracht und gelöscht haben. Es nützt Ihnen absolut nichts, wenn die Festplatten Ihres Servers ausfallen.
Zu den Optionen gehören eine externe Festplatte oder der Versand der Sicherungen mit rsync an einen Remotecomputer. Es gibt sogar Speicherdienstleister wie rsync.net , die sich darauf spezialisiert haben.

Drittens in Bezug auf die Häufigkeit von Sicherungen: Nur Sie wissen, wie oft Sie dies tun müssen.
Meine derzeitige Firma verfügt über eine Slave-Datenbank mit nahezu Echtzeit-Replikation unserer Produktionsdaten. Dieser Slave wird jede Nacht auf einem lokalen Computer gesichert, der dann mit einem externen Speicher synchronisiert wird.
Bei einem Ausfall der Produktionshardware aktivieren wir den Slave. Der Datenverlust sollte minimal sein, ebenso wie die Ausfallzeiten. Im Falle eines versehentlichen Löschens der Tabelle können wir aus der lokalen Sicherung wiederherstellen (Verlust von bis zu 1 Tag Daten). Im Falle eines katastrophalen Vorfalls können wir die Sicherung außerhalb des Standorts wiederherstellen (was eine Weile dauert, aber wiederum nur bis zu 1 Tag Daten verliert).
Ob diese Art von Sicherungsschema für Sie funktioniert, hängt von Ihren Daten ab: Wenn es sich häufig ändert, müssen Sie möglicherweise eine Sicherungsstrategie untersuchen, mit der Sie zu einem bestimmten Zeitpunkt wiederhergestellt werden können (Protokollversandlösungen können dies häufig tun). Wenn es größtenteils statisch ist, müssen Sie es möglicherweise nur einmal im Monat sichern. Der Schlüssel besteht darin, sicherzustellen, dass Sie Änderungen an Ihren Daten innerhalb einer angemessenen Zeit ab dem Zeitpunkt ihrer Durchführung erfassen, um sicherzustellen, dass Sie diese Änderungen im Falle eines größeren Vorfalls nicht verlieren.


1
Und machen Sie keine Dumps in einer Produktionsdatenbank, verwenden Sie zumindest eine replizierte Quelle für Backups. Wenn Sie dies tun, wirken sich Ihre Sicherungsverfahren nicht auf die Leistung der Produktionsdatenbank aus.
Theist

@theist ausgezeichneter Punkt. Während Sie können einen Dump gegen Produktion tun wird es eine Auswirkung auf die Leistung haben, und eines Tages Ihre Benutzer werden feststellen , und erklären es „inakzeptabel langsam“ zu sein
voretaq7

4

Allgemeiner Rat:

  • Überwachen Sie Ihre Backups
    • Überprüfen Sie, ob sie erfolgreich abgeschlossen wurden [z. B. das erste Ergebnis von mysqldump auf der Suche nach der Ziellinie; Überprüfen Sie die von den Dump-Befehlen zurückgegebenen Fehlercodes.
    • wenn die Sicherungsgröße angemessen ist
  • Führen Sie ab und zu Wiederherstellungstests durch - möglicherweise alle 3-6 Monate
  • Sichern Sie auf Offline-Medien, damit Sie die Daten bei böswilligen Angriffen nicht verlieren
  • Bewahren Sie Backups außerhalb des Unternehmens auf, damit Sie im Falle einer Naturkatastrophe die Daten nicht verlieren

Spezifische Beratung:

  • mysqldumps, die für die Versionierung auf svn gepumpt wurden, klingen wie Overkill - das Entfernen von irgendetwas aus svn ist ziemlich schwierig. Wie wäre es mit rdiff-backup , um das letzte Backup und 'diffs' für einige vorherige zu behalten?
  • svn - benutze svnadmin dump - dies ist der 'richtige' Weg, um die Dumps von svn zu nehmen
  • Wenn Sie besonders sicher sein möchten, verwenden Sie lvm und erstellen Sie zusätzlich lvm-Snapshots der Verzeichnisse mysql und svn
  • Verwenden Sie die innodb-Speicher-Engine, um Backups sperrfrei zu machen

+1 für ÜBERWACHEN SIE IHRE BACKUPS und *** RUN RECOVERY (Wiederherstellen) -TESTS ***, vorzugsweise in regelmäßigen Abständen, mit einer Aufzeichnung der Ergebnisse.
voretaq7

3

Bei der Vorbereitung einer Sicherungsstrategie sollten Sie zunächst das Wiederherstellungspunktziel (RPO) und das Wiederherstellungszeitziel (RTO) bewerten. Das RPO gibt an, wie viele Daten das Unternehmen im Falle eines Vorfalls verlieren möchte, während das RTO angibt, wie schnell die Wiederherstellung erforderlich ist. Ihre Anforderungen an RTO und RPO erhöhen die wirtschaftlichen und Leistungskosten für die Wartung von Backups. [1] .

Im Allgemeinen gibt es vier Sicherungsstrategien:

  • Server-Replikat : Verwenden eines anderen Servers, der physisch und logisch vom Hauptserver der Datenbank getrennt ist, und beim Schreiben von Daten in die Datenbank auch in die Replikat-Datenbank.
  • Datenbankspeicherauszug : Speichern Sie die Datenbank regelmäßig in eine Datei und senden Sie diese Datei an einen Sicherungsserver.
  • Datenbank-Snapshot : Verwenden Sie ein beliebiges Dateisystem-Snapshot-Tool wie rsnapshot , um einen regelmäßigen Snapshot der zugrunde liegenden Datendateien der Datenbank zu erstellen und an den Sicherungsserver zu senden.
  • Cloud- und agentenbasiert: Sie installieren nur einen Agenten auf Ihrem Datenbankserver und sichern ihn regelmäßig in der Cloud.

Jeder Ansatz hat seine eigenen Vor- und Nachteile. Sie können aus verschiedenen Blickwinkeln verglichen werden:

  • Nicht blockierend : Alle Methoden müssen den Schreibzugriff auf db für die Sicherung nicht stoppen, mit Ausnahme des Datenbank-Snapshots, der in einigen Fällen, z. B. in Mongodb, wenn das Journaling aktiviert ist, selbst bei LVM-Snaphshot keine Garantie dafür gibt, dass der Snapshot konsistent und gültig ist.

  • Inkrementell : Speicherauszug und Snapshot sind normalerweise nicht inkrementell und folglich ist die Sicherungsgeschwindigkeit niedriger als der Rest. Replikat- und Cloud-Methoden sind inkrementeller Natur.

  • Workload : Snapshot hat keine Last in der Datenbank, da nur zugrunde liegende Dateien kopiert werden. Dump hat die meiste Last. Bei einer anderen Methode wird die Arbeitslast auf die Arbeitsstunden der Datenbank verteilt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.