Linux系统,使用crontab定时执行备份脚本后,备份为空的解决方案

发布时间 2023-06-15 12:13:45作者: Ari的小跟班

使用crontab执行备份.sh脚本后备份为空,但是自己手动执行是没问题的

参考[(163条消息) 定时任务执行mysql备份脚本备份结果为空_mysql备份脚本日期有空格怎么回事_玉无暇的博客-CSDN博客](https://blog.csdn.net/weixin_51009330/article/details/120431278#:~:text=用 crontab,自动备份MySQL的时候导出总是为空,原因是corn的环境变量中没有mysqldump,所以用crontab执行mysqldump的时候要加上绝对路径,如:%2Fusr%2Flocal%2Fmysql%2Fbin%2Fmysqldump xxxxxxx这样就可以了。)

结论就是用crontab自动备份MySQL的时候导出总是为空,原因是corn的环境变量中没有mysqldump,使用mysqldump是需要给出全路径:

例如,我原来的.sh文件为:

#!/bin/bash
  
UER="xxxxx"
PASSWORD="xxxxx!"
DATABASE="xxxx"


BACKUP_DIR="xxxxxxxxxxxx"


DATE=$(date +%Y-%m-%d-%H%M%S)


mysqldump -u $USER -p$PASSWORD --protocol=TCP -h 127.0.0.1 $DATABASE > $BACKUP_DIR/backup_$DATE.sql

自己手动执行该文件是可以正常执行的,但是一旦由crontab自动执行时,就会出错,备份出来的sql文件始终为空。

改为一下方式即可:

#!/bin/bash
  
UER="xxxxx"
PASSWORD="xxxxx!"
DATABASE="xxxx"


BACKUP_DIR="xxxxxxxxxxxx"


DATE=$(date +%Y-%m-%d-%H%M%S)


/usr/local/mysql/bin/mysqldump -u $USER -p$PASSWORD --protocol=TCP -h 127.0.0.1 $DATABASE > $BACKUP_DIR/backup_$DATE.sql