2013-11-23 77 views
6

我想轉儲我的MySQL數據庫並使用rsync進行每日備份。如何讓rsync從STDIN讀取SRC?

我想出的第一種方法就像mysqldump -ufoo -pbar baz > /var/tmp/baz.sql && rsync /var/tmp/baz.sql /backup/ && rm /var/tmp/baz.sql

然後我開始懷疑是否可以不使用臨時文件/var/tmp/baz.sql,而是將mysqldump的輸出直接輸出到rsync

更具體地說,我想要的與我們用來更新Ubuntu中apt的GPG密鑰的命令行非常相似:gpg --export --armor CE49EC21 | sudo apt-key add -,其中管道接收器支持此'-'參數指示它會從stdin閱讀。我想rsync沒有類似的論點。但是我想知道是否有解決方法。

+2

如果'/ backup /'是一個本地路徑,爲什麼不直接寫入'/ backup/baz.sql'? – tripleee

+0

你應該使用librsync(http://librsync.sourcefrog.n​​et/doc/librsync.html#io-callbacks)來實現它。 – ArtemGr

回答

4

這是對的,它不能這樣工作。這是因爲rsync被用來將完整的文件樹從A轉移到B

因爲這樣rsync作品,它不能正常工作,因爲rsync計算若干校驗和選擇傳送一個特定的文件之前(或部分),並且只有2次迭代(乒乓步驟)這樣做。

這意味着一個文件必須被多次讀取。這不適用於(可能很大)SQL轉儲,因爲它必須以某種方式進行緩衝。這個緩衝取決於用戶。

實際上存儲文件應該是最好的解決方法,特別是如果它是一個文件只是逐步的差異。

+0

我正在設置一個備份系統,它保留了備份的多個副本,並刪除了具有'rsync'硬連接能力的過時備份。我希望統一所有文件的手段,包括'sql's和其他類型的文件。但現在我想直接保存'sql'文件會更好。 – Sah

+0

@leesah可以例如被集成到'rsnapshot'中 - 它可以調用生成文件的腳本。這些文件可以包含在同步過程中。 – glglgl

+0

謝謝@glglgl,我會檢查出來。 – Sah