潘老师最近写了一个MySQL定时备份的shell脚本,但是发现通过定时任务执行的备份文件大小是空的,而通过手工执行脚本生成的备份文件是正常有数据的,原因在于这里定时任务执行的脚本中出现了错误。
原因分析
首选我们来定位原因,通过查看crontab的执行日志:
tail -100 /var/log/cron
这里我查看了cron日志的最后100行,发现了问题所在。具体如图:
/home/mysql/script/mysqlbackup.sh: line 34: mysqldump: command not found
也就是说crontab在执行我的备份脚本时发现mysqldump
指令找不到,这其实是很奇怪的事,mysql环境变量也是配置了的,而且单独执行shell脚本时也没问题,但crontab执行就找不到,可能是因为这个环境变量配置只针对某个用户有效,而crontab执行的默认用户并没有该环境变量配置导致的。
解决办法
咱不管它具体什么原因,直接一招解决即可。
1)先找到mysqldump
指令全路径,可以通过如下指令:
whereis mysqldump
我这里发现是在/home/mysql/mysql/bin/mysqldump
。
2)然后只需要将原shell脚本中的mysqldump
改为全路径的/home/mysql/mysql/bin/mysqldump
即可,然后再次上传就解决了这个问题。
总结
以上就是crontab定时执行mysql备份脚本出错导致数据为空的原因和解决方案,找到原因基本就找到了方案。