Wie sichern Sie normalerweise Ihre Datenbank?

8

Ich benutze MySQL

Wie oft sichern Sie Ihre Datenbank?

Wie sichern Sie normalerweise Ihre Datenbank?

Exportieren Sie alle Daten in SQL oder CVS-Format und speichern Sie es in einem Ordner?

pauska
quelle

Antworten:

11

Wenn Sie MySQL-Sicherungen ohne Ausfallzeiten ordnungsgemäß durchführen möchten, sollten Sie die Datenbank auf einen Ersatzserver replizieren. Es muss nicht sehr leistungsfähig sein, sondern nur die Schreiblast Ihrer Master-Datenbank bewältigen. Sie sollten diesen Server nicht in der Produktion verwenden. Wenn die Replikation nie mithalten kann, benötigen Sie einen leistungsstärkeren Server. Sie können dies überprüfen, indem Sie die Protokolldatei und die Position aus der Ausgabe von vergleichen

 > SHOW MASTER STATUS\G

auf den Meister und

 > SHOW SLAVE STATUS\G

auf dem Sklaven. Ich denke, MySQL5 wird die Verzögerung von zeigen SHOW SLAVE STATUS.

Wenn Sie froh sind, dass Ihr Sklave Schritt hält, können Sie Ihre Backups durchführen, indem Sie dies tun

  1. Stoppen Sie die Replikation mit SLAVE STOP;auf dem Slave
  2. Machen Sie eine mysqldump --optauf dem Slave-Server.
  3. Starten Sie die Replikation erneut mit SLAVE START;auf dem Slave

Wenn Sie dies tun, haben Sie eine konsistente Sicherung Ihrer Datenbanken. Diese Methode verhindert, dass unterschiedliche Datenbanken oder noch schlimmer, unterschiedliche Tabellen in derselben Datenbank nicht synchron sind, und verhindert Ausfallzeiten, indem Tabellen für Schreibvorgänge gesperrt werden, während Sie die Sicherung durchführen.

Ein netter Vorteil dieses Setups ist, dass Sie über eine Kopie Ihrer Datenbank verfügen, mit der Sie lange, teure Abfragen ausführen können, die Ihren Live-Service nicht beeinträchtigen.

Einige zufällige Tipps:

  • Versuchen Sie nicht, eine dateibasierte Sicherung der MySQL-Datendateien durchzuführen. Es ist mühsamer als es wert ist und MySQL-Dumps sind flexibler.
  • Achten Sie beim Sichern auf mysqldump-Sperrtabellen.
  • Achten Sie auf Inkonsistenzen in Dumps, es sei denn, Sie sperren jede Tabelle während Ihres Dumps
  • Verwenden mysqldump --optSie diese Option , da dies normalerweise der schnellste Weg ist, um das resultierende SQL zu importieren
  • Dump so oft du kannst. Wir sichern täglich, weil wir mehr als 40 GB Daten haben.
  • Testen Sie Ihre Dumps gelegentlich auf einem Ersatzserver, um sicherzustellen, dass sie funktionieren.
David Pashley
quelle
2
Seconds_Behind_Master von SHOW SLAVE STATUS ist in Version 4.1.9 und höher verfügbar.
Dan Carley
+1 bei Replikation und regulären Dumps. Ich fand es relativ schmerzlos, das erste Mal zu arbeiten (ohne viel Erfahrung mit MySQL). Ich stimme den Dateisicherungen nicht vollständig zu. Wenn Sie über ausreichend Speicherplatz verfügen, um beides zu tun, ist es einfacher, einen neuen Server neu zu erstellen. Wenn Ihr Datenbankserver asplodiert, sind die einzelnen SQL-Dumps für jede Datenbank größer nützlich, wenn Sie Daten wiederherstellen müssen, die jemand verloren hat.
Theotherreceive
3

Ich verwende ein Skript, mit mysqldumpdem die Daten / das Schema für jede Datenbank in eine Datei extrahiert werden. Die Daten werden durch die normale Netbackup-Sicherung auf Band gesichert. Sie können natürlich weitere Schnickschnack hinzufügen, aber dies führt zu einem einfachen Dump.

#!/bin/sh
# Find out what databases are in mysql and back them up
# Delete old backups


STARTTIME=` date +%Y%m%d-%H%M `

#BACKUP_DIR="/usr/local/db_backups"
BACKUP_DIR="/var/local/db_backups"
LOGFILE="/var/log/db_backups.log"
USER="root"
PASSWD="<password>"
KEEP="7"

(
echo
echo " ---MySQL backups start ${STARTTIME} ---"
#delete any backup written more than ${KEEP} days ago
echo "Removing files over ${KEEP} days old from ${BACKUP_DIR}:"
/usr/bin/find  ${BACKUP_DIR} -mindepth 1 -mtime +${KEEP} -print -delete



echo
echo "Performing today's dumps"
#find each database running in this instance of mysl
for DB in ` echo "show databases;"|mysql -u${USER} -p${PASSWD} mysql |awk " NR>1 {print $1} " `
do
        #generate a backup file name based on the data base name
        BACKUP_FILE="${BACKUP_DIR}/${DB}-${STARTTIME}.sql"
        echo "Processing database ${DB} into file ${BACKUP_FILE}"
        # dump the database data/schema into the backup file
        mysqldump -u${USER} -p${PASSWD} --add-drop-table ${DB} > ${BACKUP_FILE}
        gzip ${BACKUP_FILE}
done

ENDTIME=` date +%Y%m%d-%H%M `
echo
echo " ---MySQL backups complete ${ENDTIME} ---"
echo
) >>  ${LOGFILE} 2>&1
Jason Tan
quelle
1

Normalerweise werden Datenbanken einmal am Tag gesichert, wenn sie gestoppt werden müssen, und dann werden Sicherungen zur Konsolidierung in einen Speicherbereich übertragen und dann auf Band übertragen.

Datenbanksicherungen werden die meiste Zeit mit den nativen Tools durchgeführt, die mit dem Datenbankmodul bereitgestellt werden.

Im Falle eines Hardwarefehlers dürfen keine Backups mit den Daten auf den Servern gespeichert werden.

Es wird empfohlen, nach Möglichkeit aktuelle Replikate Ihrer Datenbankserver zu haben, besser einen Failover-Makanismus für Produktionsdatenbanken.

Für Software können Sie sich zum Beispiel Bacula oder Zmanda ansehen

Maxwell
quelle
1

Unser Standard-Setup ist ein HA-Cluster mit zwei Datenbanken, die in die andere repliziert werden und schreibgeschützt sind.

Wir führen einmal am Tag eine vollständige Sicherung durch und haben dann die Richtlinie pro Kunde, alte Sicherungen auszusortieren. Im Allgemeinen führen wir 4 letzte tägliche Sicherungen (um das Wochenende zu überleben;), 4 letzte Sonntage und 4 letzte erste Sonntage in einem Monat. Danach gehen ein oder zwei Deponien pro Jahr ins Archiv, um für immer aufbewahrt zu werden.

Wir bewahren die Replikationsprotokolle auch so lange auf, wie wir es uns leisten können, Speicherplatz zu sparen. Sie sind auch als Debugging-Tool sehr nützlich, da sie genau aufzeichnen, wer was und wann geändert hat.

Theoretisch benötigen Sie lediglich eine vollständige Sicherung und alle Replikationsprotokolle, um eine Wiederherstellung zu einem bestimmten Zeitpunkt durchführen zu können. Häufigere vollständige Sicherungen beschleunigen jedoch die Wiederherstellung.

Ein guter Trick bei der Sicherung ist die Verwendung von Innodb-Tabellen und des Parameters --single-transaction für den MySQL-Dump. Auf diese Weise blockiert die Sicherung die Datenbank nicht, während sie ausgeführt wird.

Aleksandar Ivanisevic
quelle
1

Ich benutze Perconas Xtrabackup . Es ist eine nicht blockierbare Backup-Lösung für InnoDB / XtraDB

SaveTheRbtz
quelle
1

Der gesamte Zweck der Sicherung besteht darin, die Wiederherstellung durchführen zu können.

Ich würde einen CSV-Dump nicht als Backup-Lösung empfehlen. Alles, was es Ihnen gibt, sind die Rohdaten. Daneben gibt es noch viel mehr, insbesondere bei einer Datenbank. Tabellenbeschreibungen, Ansichten, gespeicherte Prozesse, Sie nennen es. Wenn Sie diese nicht haben, können Sie sie nicht erfolgreich zurückerhalten. Es gibt auch die RDBMS-Anwendung und -Konfiguration zu berücksichtigen. Möglicherweise ist eine große Anzahl von Patches installiert, die Sie auch in Ihrer Wiederherstellungsumgebung installieren müssen, um das gleiche Niveau zu erreichen. Möglicherweise führen Sie eine spezielle Konfiguration aus, die von den Anforderungen Ihrer Anwendungen abhängt. Möglicherweise sind sogar bestimmte Betriebssystemeinstellungen erforderlich, damit Ihre Datenbank optimal ausgeführt werden kann. All dies muss auch zurückbekommen werden. Wenn Sie nicht über eine Backup-Lösung verfügen, die dies kann, kommt es zu weiteren Verzögerungen bei der Wiederherstellung.

Für Datenbanksicherungen (und Sicherungen im Allgemeinen) würde ich immer die Verwendung einer "echten" Sicherungssoftware bevorzugen, die all dies bewältigen kann.

Maximus Minimus
quelle
0

Zuletzt habe ich MySQL-Server in EC2 verwaltet. Wir haben EBS-Snapshots für einen 15-minütigen Cron-Job erstellt, 3-5 Snapshots wurden aufbewahrt.

Wenn wir 'traditionelle' MySQL-Server erstellt haben, haben wir täglich über MySQl-ZRM gesichert. Bei den Sicherungen handelt es sich im Wesentlichen um mysqldumps, die je nach Kundenwunsch auf Band, SAN usw. gesendet werden.

Beide Methoden können durchgeführt werden, ohne die Datenbank anzuhalten.

jtimberman
quelle
0

Für MySQL verwende ich automysqlbackup ( http://sourceforge.net/projects/automysqlbackup/ ), da meine Sicherungssoftware (Backup Exec) keine Snapshots auf Linux-Systemen unterstützt.

Es funktioniert in Ordnung, aber ich werde diesen Thread auf Vorschläge überwachen :)

pauska
quelle
0

Wir führen zweimal täglich Sicherungen durch und führen alle 10-15 Minuten Protokollsicherungen durch.

Der Vorteil dieser Methode besteht darin, dass Sie von einer der zweimal täglichen Sicherungen wiederherstellen und dann die Protokolldateien bis spätestens 15 Minuten anwenden können. Auf diese Weise minimieren Sie die Datenmenge, die Sie verlieren können.

Wie oft Sie Ihre Daten sichern, liegt jedoch bei Ihnen. Wie viele Daten können Sie gerne verlieren? Wenn Sie es sich leisten können, Daten im Wert von einem Tag zu verlieren, sichern Sie einmal am Tag. Daten ändern sich nie? Dann brauchen Sie nur noch eine Kopie!

mjallday
quelle