2016-08-11 30 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