2013-11-23 14 views
6

Ich möchte meine MySQL-Datenbank dumpen und tägliche Backups mit rsync machen.Wie rsync SRC von STDIN lesen?

Erste Annäherung, die ich kam, ist etwas wie mysqldump -ufoo -pbar baz > /var/tmp/baz.sql && rsync /var/tmp/baz.sql /backup/ && rm /var/tmp/baz.sql.

Dann begann ich mich zu fragen, ob es möglich ist, nicht die temporäre Datei /var/tmp/baz.sql zu verwenden, sondern stattdessen die Ausgabe von mysqldump direkt an rsync zu leiten.

Um genauer zu sein, was ich will, zu einer Befehlszeile ganz ähnlich ist, die wir den GPG-Schlüssel für apt in Ubuntu verwenden zu aktualisieren: gpg --export --armor CE49EC21 | sudo apt-key add -, wo der Empfänger des Rohres dies es werde '- Argument angibt, unterstützt lesen Sie von stdin. Ich nehme an, rsync hat kein ähnliches Argument. Aber ich möchte wissen, ob es einen Workaround gibt.

+2

Wenn '/ backup /' ein lokaler Pfad ist, warum schreiben Sie nicht direkt auf '/ backup/baz.sql'? – tripleee

+0

Sie sollten dies mit librsync (http://librsync.sourcefrog.net/doc/librsync.html#io-callbacks) implementieren. – ArtemGr

Antwort

4

Das ist richtig, es funktioniert nicht so. Es ist so, weil rsync gemacht wird, um komplette Dateibäume von A zu B zu übertragen.

Aufgrund der Art und Weise rsync funktioniert, kann es nicht funktionieren, weil rsync vor der Wahl mehr Prüfsummen berechnet eine bestimmte Datei (oder Teile davon) zu übertragen und so in nur 2 Iterationen (Pingpong-Stufen) zu tun.

Das bedeutet, dass eine Datei mehrmals gelesen werden muss. Das würde mit einem (möglicherweise großen) SQL-Dump nicht funktionieren, weil es irgendwie gepuffert werden müsste. Und diese Pufferung ist Sache des Benutzers.

Das Speichern der Datei sollte die beste Problemumgehung sein, besonders wenn es sich um eine Datei handelt, die nur graduelle Unterschiede aufweist.

+0

Ich habe ein Backup-System eingerichtet, das mehrere Kopien von Backups verwaltet und veraltete mit der Hardlink-Fähigkeit von 'rsync' löscht. Ich hatte gehofft, die Mittel für alle Dateien einschließlich 'sql' s und andere Arten von Dateien zu vereinheitlichen. Aber jetzt denke ich, es ist besser, die 'sql' Dateien direkt zu speichern. – Sah

+0

@leesah Das kann z.B. in 'rsnapshot' integriert sein - es kann Skripte aufrufen, die Dateien generieren. Diese Dateien können dann in den Synchronisierungsprozess einbezogen werden. – glglgl

+0

Danke @glglgl, ich werde es überprüfen. – Sah