数据库备份 bash 通过 ssh 工作但不在 cronjob 中

数据库备份 bash 通过 ssh 工作但不在 cronjob 中

我编写了一个脚本来备份共享主机上的数据库。脚本如下:

mysqldump --databases [db1] [db2] | openssl aes-256-cbc -a -salt -pass file:/home/[user]/etc/.keys/.backup_key | gzip > /home/[user]/backup/$(date +%Y:%m:%d:%H:%M:%S).gz

数据库凭据存储在 /home/[user] 中的 .cnf 中,加密密钥存储在脚本中显示的密钥文件中。当我通过 SSH 运行此脚本时,一切正常,并创建了一个备份文件。但是,每天开始时执行的 cronjob 不会创建任何文件。

有任何想法吗?

非常感谢。

答案1

使用以下命令在正确的用户帐户下创建 cron 作业。

crontab -u <username> -e

另外,用 '\' 将 % 转义。

mysqldump --databases [db1] [db2] | openssl aes-256-cbc -a -salt -pass file:/home/[user]/etc/.keys/.backup_key | gzip > /home/[user]/backup/$(date +\%Y:\%m:\%d:\%H:\%M:\%S).gz

答案2

我找到的解决方案是将其附加到命令开头:cd /home/[user]/ && {其余命令} 因为 /home/[user]/ 是 mysql 凭据保存在 .cnf 文件中的位置,mysqldump 需要该文件来进行转储。我同时还转义了“%”,所以这也许也有帮助。感谢 @alex-atkinson 提供的转义提示。

相关内容