nohup结合mysqldump时警告信息重定向失效问题求助
解决mysqldump后台执行时警告混入备份文件的问题
问题根源
你遇到的核心问题是管道的重定向范围错误:原命令里的2>/dev/null或2>dump.log只对管道右侧的gzip进程生效,而mysqldump输出的警告信息(本该输出到stderr)没被正确捕获,反而混入了stdout,最终被gzip压缩进备份文件里。
快速修复方案
方案1:用子shell统一处理错误重定向
把整个mysqldump+gzip的命令放到子shell中,统一重定向所有进程的stderr:
nohup (mysqldump -uuser -ppassword --comments --single-transaction --quick mydb desired_table | gzip >dump.sql.gz) 2>dump.log &
这样mysqldump的警告会被写入dump.log,不会污染备份文件。
方案2:单独重定向mysqldump的stderr
直接给mysqldump进程单独指定stderr输出路径,避免和管道逻辑混淆:
nohup mysqldump -uuser -ppassword --comments --single-transaction --quick mydb desired_table 2>dump.log | gzip >dump.sql.gz &
彻底解决(推荐)
命令行明文输入密码本身就不安全,还会触发警告,直接用MySQL配置文件存储认证信息:
- 在用户家目录创建/编辑
.my.cnf文件:
[mysqldump] user=user password=password
- 修改文件权限,避免其他用户读取:
chmod 600 ~/.my.cnf
- 之后执行mysqldump时无需携带
-u和-p参数,命令简化为:
nohup mysqldump --comments --single-transaction --quick mydb desired_table | gzip >dump.sql.gz 2>dump.log &
既消除了警告,又提升了安全性,从根源避免重定向问题。
内容的提问来源于stack exchange,提问作者Coisox
相关产品推荐
相关产品推荐

