我有一个从某个地方(不记得在哪里)找到的 MySQL 备份脚本。手动运行它可以运行,但以 root 身份在 cron 上运行时,不知为何它无法运行。
可能有一个我可以在某处检查的 cron 日志,但我很好奇是否有人知道为什么它没有在 cron 上创建我的每日备份。
#!/bin/bash
# Set the datestamp, login credentials and backup directory
export date=$(date +\%Y\%m\%d)
export creds="-uadmin -p`sudo cat /etc/psa/.psa.shadow`"
export backupdir="/root/backups-mydomain.com-mysql"
# delete week old files
find ${backupdir}/ -regex '.*.dump.gz' -mtime +4 -exec rm {} \;
# dump databases to the backupdir
echo "show databases;" | mysql ${creds} | egrep -v ^Database$ | \
awk '{print "mysqldump ${creds} "$1" | \
gzip > ${backupdir}/db-"$1"-${date}.dump.gz"}' | \
sh
我尝试过以下 cron 条目,但都不起作用:
10 0 * * * /root/_backups-generate-mysql.sh
10 0 * * * /bin/sh /root/_backups-generate-mysql.sh
我根据以下建议遇到了此错误:
/bin/sh: /root/_backups-generate-mysql.sh: Permission denied
答案1
尝试将您的实际 Plesk 管理员密码硬编码到您的备份脚本中,而不是依靠脚本sudo cat /etc/psa/.psa.shadow
为您获取密码 - 它的安全性不亚于让您的脚本 sudo cat 密码文件不使用密码,并且删除了一层抽象。
更好的是,创建一个具有所有数据库权限的用户LOCK TABLES, RELOAD, and SELECT
,并将其用于备份目的。
如果你正在寻找替代脚本,我建议自动MySQL备份。我已经在多个 Plesk 实施中使用它多年了。
答案2
另请参阅cron不运行的原因。
如果没有 alvosu 建议的重定向,cron 输出将转到电子邮件,因此运行这些 cron 作业的用户可能会在其邮箱中发现一些错误。
错误消息告诉我,运行 cron 的用户(即拥有该 crontab 文件的用户)没有执行该脚本的权限。您需要更改该脚本的权限。