我创建了一个 cron 作业来执行每日备份,并将其存储在目录 /backups 中
此备份目录位于 VPS 服务器的根目录 [/],是我们的 VPS 主机提供的单独备份分区。即,它存储在不同的磁盘上。
所以我创建了一个小型 shell 脚本来运行备份并将它们存储在那里。
#!/bin/sh
mysqldump --all-databases | gzip > /backups/dbbackup-`date +%Y-%m-%d`.sql.gz
这将创建一个带有日期的 .gz 备份。它有效,因为当我运行它时,我得到了我想要的东西。
但我希望在 cron 作业中执行此操作。我编辑了 crontab 并将其设置为每天晚上 9 点运行。
0 21 * * * /backups/DBBackups.sh
我今天早上检查了 cron 日志,它运行了,
Jun 20 21:00:01 973900 CROND[13279]: (root) CMD (/backups/DBBackups.sh)
但是/backups目录中没有文件。
我哪里做错了?它会在我没有检查的地方出现错误吗?
我对这个还是个新手。稍后我想按表导出特定数据库,因为如果我需要的话,2gb 的 .sql 文件很难处理。另外,我可能很快就会达到某种最大文件大小。但留给我吧。如果有人能帮助正确运行这个脚本,我将不胜感激。
答案1
问题出在您的 DBbackups.sh 脚本上。当 cron 运行时,它可能没有路径信息,肯定不是您习惯的路径信息,因为它不是从您的登录 shell 生成的,所以您需要提供绝对路径。因此,DBbackups.sh 应该是这样的:
#!/bin/sh
BACKUPDIR="/backups"
MYSQLDUMP="/usr/local/mysql/bin/mysqldump"
GZIP="/bin/gzip"
DATE=`date +%Y-%m-%d`
${MYSQLDUMP} --all-databases | ${GZIP} > ${BACKUPDIR}/dbbackup-${DATE}.sql.gz
注意:你的路径可能有所不同,请使用以下命令检查 gzip 和 mysqldump 的路径
which mysqldump
which gzip