Chinaunix

标题: crontab备份mysql出现的问题 [打印本页]

作者: 狼毫吴钩    时间: 2011-06-01 15:39
标题: crontab备份mysql出现的问题
本帖最后由 狼毫吴钩 于 2011-06-02 18:59 编辑

我准备用crontab备份我的mysql,写了一个sh,直接运行时能正常备份,但是加到cron里,也能执行,备份出来的文件却是0字节,为什么呢?
我是用root用户登陆的服务器,cron里是这样写的:0 3 * * * /bin/sh /home/back_mysql.sh
补充一下:我的服务器系统是centos5.5
下面是我的sh

#!/bin/bash
#This is a ShellScript For Auto DB Backup
#Setting
DBName=mysqlqqq
DBUser=root
DBPasswd=mima
BackupPath=/home/backup
LogFile=/home/backup/log/bk_bugtracker.log

NewFile="$BackupPath/$DBName"_db_$(date +%Y_%m_%d).tgz
DumpFile="$BackupPath/$DBName"_db_$(date +%Y_%m_%d).sql
OldFile="$BackupPath/$DBName"_db_$(date +%Y_%m_%d --date='3 days ago').tgz

echo "-------------------------------------------">> $LogFile
echo $(date +"%Y-%m-%d %H:%M:%S")>> $LogFile
echo "--------------------------">> $LogFile

#Delete Old File
if [ -f $OldFile ]
then
        rm -f $OldFile>> $LogFile 2>&1
        echo "[$OldFile] Delete Old File Success!">> $LogFile
else
        echo "[$OldFile] No Old Backup File!">> $LogFile
fi

#Create new backupfile
if [ -f $NewFile ]
then
echo "[$NewFile] The Backup File is exists,Can't Backup!">> $LogFile
else
mysqldump -u $DBUser -p$DBPasswd $DBName> $DumpFile
tar czvf $NewFile $DumpFile>> $LogFile 2>&1
echo "[$NewFile] Backup Success!">> $LogFile
rm -rf $DumpFile
fi
echo "-------------------------------------------">> $LogFile
echo>> $LogFile
echo>> $LogFile
作者: pcuer    时间: 2011-06-01 16:29
回复 1# 狼毫吴钩


    这样写,失败是必然的
作者: 狼毫吴钩    时间: 2011-06-01 16:35
我用root用户,contab -e,也写了,也是失败的吗?
请楼上的兄弟指出哪里的问题,多谢了
作者: 狼毫吴钩    时间: 2011-06-01 18:10
二楼的兄弟,人呢,说了 一句就没影了
作者: 狼毫吴钩    时间: 2011-06-02 08:18
把二楼的兄弟顶出来
作者: 狼毫吴钩    时间: 2011-06-02 10:54
二楼的人呢
作者: 飞鸿无痕    时间: 2011-06-02 12:38
回复 1# 狼毫吴钩


    0 3 * * * /bin/sh /home/ back_mysql.sh 中间多了个空格吧
作者: 狼毫吴钩    时间: 2011-06-02 13:58
本帖最后由 狼毫吴钩 于 2011-06-02 14:40 编辑

回复 7# 飞鸿无痕


哪中间?/bin/sh /home  还是/home/ back_mysql.sh     home/back_mysql.sh这个是发帖的问题,在命令中是无空格的
作者: 飞鸿无痕    时间: 2011-06-02 15:40
回复 8# 狼毫吴钩


    0 3 * * * /bin/sh /home/back_mysql.sh
这样不行吗??
作者: 狼毫吴钩    时间: 2011-06-02 16:02
回复 9# 飞鸿无痕


    这就是这么写的,结果是执行sh这个文件,但生成的备份文件字节为0,也就是说,它好象没有把数据库备份出来,我是用root登陆的啊。
在网上查了一下,sh文件的顶部也写了#!/bin/bash等
作者: 909413335    时间: 2011-06-02 17:53
1:直接执行back_mysql.sh,看能否备份成功?
2:如果能,那么百度一下crontab,就不会有问题了。
作者: 狼毫吴钩    时间: 2011-06-02 17:57
回复 11# 909413335


    直接执行是成功的,放到crontab里也执行,但只是生成了个空文件,没把mysql备份进扶持。已经百度了,目前没找到好方法。
作者: 狼毫吴钩    时间: 2011-06-02 18:57
在一楼加上了我的sh,大家帮看看,有没有问题
作者: feillex    时间: 2011-06-03 08:44
我准备用crontab备份我的mysql,写了一个sh,直接运行时能正常备份,但是加到cron里,也能执行,备份出来的 ...
mysqldump -u $DBUser -p$DBPasswd $DBName> $DumpFile
mysqldump 使用绝对路径

狼毫吴钩 发表于 2011-06-01 15:39

或者在脚本前部加上PATH环境变量
  1. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
复制代码

作者: 狼毫吴钩    时间: 2011-06-03 09:21
回复 14# feillex


    我是菜鸟,如果加上PATH,那前面用不用加#号。另外,写绝对路径如何写,好哥们,帮人帮到底,呵
作者: gerryok    时间: 2011-06-04 06:35
这个看看结果
作者: chris_zhu    时间: 2011-06-04 13:36
1. crontab默认查找路径ATH=/sbin:/bin:/usr/sbin:/usr/bin
    which mysqldump看看mysqldump是否在上述路径里
2. /var/log/cron看看有什么报错没
作者: 狼毫吴钩    时间: 2011-06-04 13:58
回复 17# chris_zhu


    我执行了which mysqldump
结果:/usr/local/mysql/bin/mysqldump
和你说的不一样,怎么改?
作者: chris_zhu    时间: 2011-06-04 14:21
回复 18# 狼毫吴钩

在脚本里mysqldump写成绝对路径形式
作者: 狼毫吴钩    时间: 2011-06-04 14:36
回复 19# chris_zhu


    哥,我不太会啊,我的脚本代码在一楼,帮我标注一下怎么改,谢谢
作者: 狼毫吴钩    时间: 2011-06-04 18:50
/usr/local/mysql/bin/mysqldump -u....
应该是这样吧,明天试一下
作者: 狼毫吴钩    时间: 2011-06-05 09:15
成功,果真是绝对路径的事
作者: xikder    时间: 2011-06-07 10:01
本帖最后由 xikder 于 2011-06-07 10:04 编辑

没设置环境变量吧
作者: wangle315065    时间: 2011-06-11 17:22
学习
。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2