2009-08-18 3 views
3

Ich verwende rsync, um die Dateien auf meinem Server zu sichern, und mysqldump, um meine Datenbank zu sichern. Hier ist meine Sorge:Sicherstellen der Datenintegrität von mysqldump <-> rsync

Ein mysqldump auf meiner Datenbank dauert etwa 30 Sekunden. Ich habe eine Tabelle namens Fotos, die Informationen über die Bilder speichert, die ein Benutzer hochgeladen hat, einschließlich des Pfads zur Datei. Ich mache mir Sorgen darüber, was passieren wird, wenn Fotos während der 30 Sekunden, die zum Beenden von mysqldump benötigt werden, hochgeladen oder gelöscht werden. Wenn das passiert wäre und ich dann die rsync'd-Dateien und die mysqldump-Daten wiederherstellen müsste, könnte ich mir eine Datenbank ansehen, die Zeilen enthält, die auf gelöschte Fotos zeigen, oder fehlende Zeilen für Fotos, die erfolgreich hochgeladen wurden.

Wie kann ich sicherstellen, dass der mysqldump exakt mit dem rsync übereinstimmt?

Vielen Dank im Voraus, Brian

Antwort

1

Verwenden LOCK TABLES jede Schreibaktivität aus den Tabellen blockieren Sie sichern. Dann entsperren Sie sie, sobald Ihre mysqldump fertig ist.

+1

Das Sperren der Tabellen für die Dauer von mysqldump ist nicht ausreichend - Sie müssen sie auch gesperrt halten, während rsync läuft. Andernfalls, wenn z.B. Das rsync folgt dem Speicherauszug, Dateien können auf dem Datenträger gelöscht werden, auf dem sich die Speicherauszugsansprüche befinden sollten; Diese Dateien landen jedoch nicht im rsync. –

+0

Also - wenn die Tabellen gesperrt sind und ein Benutzer eine Datei hochlädt, wird die INSERT-Abfrage zum Erstellen des Datensatzes fortgesetzt, sobald die Tabellen entsperrt sind? Ist es schlecht, wenn die Abfrage 30+ Sekunden warten muss? – Brian

0

Sie könnten MD5 die resultierende mysqldump (auf dem Server) und die übertrug (lokal) von rsync, dann vergleichen Sie die beiden Hashes, um sicherzustellen, dass sie übereinstimmen. Eine andere Alternative ist, mysqldump auf eine versionskontrollierte Datei zu setzen (mit git oder svn oder Ihren bevorzugten vcs). Der Vorteil von git besteht beispielsweise darin, dass Sie einige Post-Commit-Hooks einfach einrichten können, um die Änderungen auf einen Remote-Server zu übertragen, und der Upload wäre nur der Unterschied zwischen den Versionen, nicht der gesamte Dump. Auf diese Weise können Sie den Sicherungszeitraum verkürzen.

1

Ich denke, die Antwort ist einfach, einfach rsync NACH dem Sie mysqldump ausführen :) :) Auf diese Weise im schlimmsten Fall haben Sie ein paar neue Dateien, die nicht in der Db-Dump sind, aber Sie haben keine inkonsistenten Db-Einträge.

Verwandte Themen