Linux定时任务脚本执行时mysqldump备份异常的问题

一、问题描述

某业务系统的mysql自动备份定时任务检查执行过程中,发现mysqldump备份出的文件默认只有4K大小,即文件成功生成了但大小不对。但检查脚本,手动执行脚本,输出结果正常。

二、分析处理

1、从故障看,既然文件生成了,那么脚本就执行了,查看/var/log/cron日志也能佐证。

2、查看脚本权限正常;

3、相关经验表明:脚本引入某些变量会导致定时任务执行失败,但本事件中走完了变量,变量后命令都执行了;

4、另获悉,crontab执行时,如果脚本中命令不是系统默认的或当前用户的环境变量中的内容,会因命令路径问题,导致相关命令执行失败,你也可以查看.bash_profile 和.bashrc来验证是否相关命令在该环境下;查看 cat /etc/profile|grep PATH,是否命令路径在该文件下,本次事件如是。
在这里插入图片描述

5、据上,我们可判定mysqldump命令应该时执行失败了,但gzip命令执行成功了,故文件可以正常生成;
在这里插入图片描述

6、处理:修改脚本,在mysqldump行前新增source /etc/profile

7、重新编辑定时任务,现场验证定时任务执行脚本正常。
在这里插入图片描述

三、附录:备份脚本

#!/bin/bash
#author:junn
#date:2022-07-20

source /etc/profile
dir="/opt/mysql/data_dump"


#获取本地时间,并格式化时间
Date=`date +%Y-%m-%d-%H-%M-%S`

#判断文件夹是否存在
if [ ! -e $dir ]
then
        echo "the source dir doesn't exist." > /opt/mysql/data_dump/mysql_bak_$Date.log
        exit 1
fi

#数据库备份,打包导出为文件

mysqldump -uroot -p'Passw0rd' --all-databases |gzip > /opt/mysql/data_dump/"$Date"_b-mysql_backup.gz

if [ $?=0 ]
then
  cd $dir
  fileName="$Date"_b-mysql_backup.gz
  file_size=`/usr/bin/du -sm ./$fileName |awk '{ print $1}'`
  if [ $file_size -gt 1000 ];then
        echo "$Date mysql backup have accomplished." >> /opt/mysql/data_dump/mysql_bak_$Date.log
        rsync -azhv "$fileName" root@:172.31.9.1/home/backup  #异地备份
  else
        echo "backup falied,please check and retry" >> /opt/mysql/data_dump/mysql_bak_$Date.log
  fi
fi

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/126120240