Linux crontab 脚本“mysqldump | gzip”给出错误的文件大小

Linux crontab 脚本“mysqldump | gzip”给出错误的文件大小

我有一个 bin/bash 脚本,mysqldump 我的 sql 数据库,当我运行它时,文件大小=3MB,一切顺利,但是当 crontab(作为 sudo)运行脚本时,文件大小为 20B

脚本

#!/bin/bash
cd /home/blades/backup/databases
DATE=$(date +"%d-%m-%Y_%H:%M:%S")
mysqldump -u username -h localhost database --single-transaction | gzip -9 > database.sql_$DATE.gz

和 sudo crontab -e

30 04 * * * /home/blades/backup/backup

我究竟做错了什么?

答案1

您需要通过添加来记录您的错误

2>/tmp/mysqldump.log 

找出错误是什么。

很可能是您的 cron 环境设置不PATH正确。因此,您可以做的第一件事就是将完整路径添加到您的mysqldumpgzip命令中,这可能会解决您的问题。

如果没有,只需检查错误日志。

答案2

尝试添加 mysqldump 的完整路径。/usr/bin/mysqldump -u username -h localhost database --single-transaction | gzip -9 > database.sql_$DATE.gz

(/usr/bin/mysqldump 是一个例子。它可能位于您系统中的另一个位置)。从 crontab 运行的脚本在另一个“位置”运行,因此不包含您当前用户的 $PATH 定义。您当前的用户很可能在其 $PATH 环境变量中定义了 mysqldump 路径,这就是为什么当您手动运行脚本时不会出现问题。同样适用于gzip

答案3

好的,我设法解决了它,在 .my.cnf 文件中我必须指定 mysqldump客户端,不仅是 mysqldump,还有文件 .my.cnf(之后 chmod 为 400)

[client]
user=aaaaaaaaaaaaa
password=xxxxxxxxxxxx

[mysqldump]
user=aaaaaaaaaaaaa
password=xxxxxxxxxxxx

另一件事是选项必须先于 localhost 等,因此脚本如下

/usr/bin/mysqldump --defaults-file=/home/username/.my.cnf --single-transaction -h localhost database_name | gzip -9 > database_name.sql_$DATE.gz

就这样,无论如何,谢谢你的帮助

相关内容