我正在尝试为数据库备份创建一个cron作业.
这是我到目前为止:
mysqldump.sh
mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log
echo "Finished mysqldump $(date)" >> dump.log
Run Code Online (Sandbox Code Playgroud)
Cron工作:
32 18 * * * /db-backup/mysqldump.sh
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是作业不通过cron执行或者我不在目录中.
有人可以建议.我的路径不正确吗?
另外,我不确定以下行会向dump.log输出错误:
mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log
Run Code Online (Sandbox Code Playgroud)
什么有效:
mysqldump -u root -ptest --all-databases | gzip > "../db-backup/backup/backup-$(date).sql.gz" 2> ../db-backup/dump.log
echo "Finished mysqldump $(date)" >> ../db-backup/dump.log
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以检查一些事项,但更多信息总是更有用(文件的权限和位置,整个文件内容等).
mysqldump.sh
使用适用于您的环境的Shebang语法为文件添加前言绝不会有任何损害.我敢冒险猜测#!/bin/bash
就足够了.mysqldump -u ....
使用绝对路径/usr/bin/mysqldump
(或在您的系统上的任何地方).绝对路径总是以任何形式脚本的一个好主意,因为这是很难说,如果用户为你做了相同的环境.至于在dump.log中存储错误,我不相信你的语法是正确的.我很确定你将错误gzip
传递给dump.log,而不是错误mysqldump
.这似乎是一个相当普遍的问题,它得出了答案mysqldump $PARAMS | gzip -c dump-$(date)