2016-08-11 36 views
0

我有兩個數據庫,我需要轉儲不同的轉儲設置。通常我會首先將它們轉儲到一個文件中,然後將它們連接起來並根據需要通過ssh發送。在bash進程替換中連接mysqldumps?

我想知道下面的方法是否也可以工作,或者它會干擾我的內存,因爲服務器的內存少於轉儲的大小。

# cat <(mysqldump ${OPTIONS_1}) <(mysqldump ${OPTIONS_2}) | ssh host mysql 

# cat <(mysqldump ${OPTIONS_1}) <(mysqldump ${OPTIONS_2}) > >(ssh host mysql) 

Bash手冊頁有一個警告:

空閒時,進程替換是同時進行......

所以我相信它會嘗試先讀取與內存並行的完整轉儲。

回答

1

過程替換本質上只是寫入管道的句法糖。每個mysqldump只能在阻塞之前寫入非常小的緩衝區,直到cat從緩衝區讀取一些數據。

但是,更簡單的解決方案是隻使用一個命令組來組合兩個轉儲;如果cat在第一個完成之前沒有從第二個讀取,則沒有意義並行運行轉儲。

{ mysqldump ${OPTIONS_1}; mysqldump ${OPTIONS_2}; } | ssh host mysql