Cron执行数据库表导出失败,生成空.gz文件原因排查
mysqldump导出空.gz文件的原因及解决方法
问题根源
从你的命令和错误输出可以直接定位问题:
- 命令里
-pp;qqee中的分号;是Shell的命令分隔符,Shell会把mysqldump -u root -pp当成第一个独立命令执行,随后将qqee作为第二个命令运行。这导致mysqldump根本没接收到test_db和category这两个参数,直接输出用法提示后退出,没有生成任何数据库导出内容,gzip因此只能生成空的.gz文件。 - 密码中包含特殊字符
;却未用引号包裹,触发了Shell的错误解析。
修正后的命令
如果你的数据库密码是p;qqee,需要将密码用引号包裹,避免Shell解析特殊字符:
mysqldump -u root -p'p;qqee' test_db category | gzip >/home/user/BKP-Category/backup_$( date +"\%Y_\%m_\%d" ).sql.gz
或者使用双引号(适用于不含$这类Shell特殊字符的密码):
mysqldump -u root -p"p;qqee" test_db category | gzip >/home/user/BKP-Category/backup_$( date +"\%Y_\%m_\%d" ).sql.gz
更安全的替代方案
直接在命令或Cron中明文写密码存在泄露风险,建议通过配置文件存储认证信息:
- 创建
~/.my.cnf配置文件:
[mysqldump] user=root password=p;qqee
- 设置文件权限(禁止其他用户读取):
chmod 600 ~/.my.cnf
- 简化后的导出命令:
mysqldump test_db category | gzip >/home/user/BKP-Category/backup_$( date +"\%Y_\%m_\%d" ).sql.gz
内容的提问来源于stack exchange,提问作者bobi
相关产品推荐
相关产品推荐

