如何将xtrabackup与xbcloud组合命令的终端输出完整存入文件?
解决方法
你遇到的问题是因为xtrabackup和xbcloud的日志输出默认走标准错误流(stderr),而你之前的操作只捕获了标准输出流(stdout)——但备份的二进制流正是通过stdout传递给管道的,不能直接把stdout重定向到文件,否则xbcloud会拿不到备份数据。
下面是两种可行的方案:
方案一:合并输出并同时终端显示+写入文件
xtrabackup --backup --stream=xbstream 2>&1 > >(xbcloud put --storage=s3) | tee backup_log.txt
2>&1将xtrabackup的stderr重定向到当前的stdout>(xbcloud ...)是进程替换,让xtrabackup的原始stdout(备份二进制流)直接传给xbcloud,同时把合并后的日志输出交给tee,实现终端显示和文件写入的双重效果
方案二:分别将双进程stderr追加到日志文件
(xtrabackup --backup --stream=xbstream 2>> backup_log.txt) | (xbcloud put --storage=s3 2>> backup_log.txt)
这种写法更直白,分别把xtrabackup和xbcloud的stderr输出追加到同一个日志文件,备份的二进制流依然通过管道正常传递给xbcloud。
如果不需要终端显示,只写入文件,方案一可以简化为:
xtrabackup --backup --stream=xbstream 2>&1 > >(xbcloud put --storage=s3) > backup_log.txt
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

