使一个简单的MySQL备份脚本通过cron运行,有权限问题

这是一个非常基本的mysqldump脚本,它将执行转储并将其存储在本地。

自己运行mysqldump就像gzip一样正常运行(也就是说,它们就是我需要在path中的地方)

/usr/bin/mysqldump --database $DBNAME --opt --single-transaction -u $USER -p $PASS 

但是,当我尝试pipe道输出到gzip,然后将其写入文件,我遇到了一个错误:

 /var/www/vhosts/meh/mysqlbackup/mysqlbackup.sh: line 18: /var/www/vhosts/meh/mysqlbackup/mehbackup.sql.gz: No such file or directory mysqldump: Got errno 32 on write 

这里是错误中引用的第18行:

 /usr/bin/mysqldump --database $DBNAME --opt --single-transaction -u$USER -p$PASS | /usr/bin/gzip -9 > $OUTDIR$OUTFILE 

该错误号32似乎是一个破pipe错误,所以…我假设,因为mysqldump可以正常运行,我有一个问题,写结果? 权限问题可能?

我正在写的目录上的权限是766(rwxrw-rw-)

我在超级用户权限下运行( su

我想设置这个通过cron运行,但直到我找出为什么这是失败的…没有爱。

看看你是否可以这样做:

 $ echo "woo" | gzip > asdf.gz $ gunzip asdf.gz cat asdf 

这应该告诉你,你的gzip的东西工作正常。 如果你没有按照我刚刚做的那样做你的gzip的东西,也许按照我刚刚做的那样来尝试。

换句话说,试试这个:

 /usr/bin/mysqldump --database $DBNAME --opt --single-transaction -u $USER -p $PASS | gzip > /var/www/vhosts/meh/mysqlbackup/dump.gz 

检查path:

 file /var/www/vhosts/meh/mysqlbackup/ ls -ald /var/www/vhosts/meh/mysqlbackup/ 

并创build目录:

 mkdir -p /var/www/vhosts/meh/mysqlbackup/ 

另一个不同的可能性是:在一个实例中有“/ var / www / vhosts / meh / mysqlbackup”,在另一个实例中有“/ var / www / vhosts / meh / mysqlbackups”。 也许就是这样。

对我来说,我不是以root用户的身份执行cron,所以我不得不改变文件夹的所有者和权限

 chown user1 /home/user1/public_html/backups chmod 755 /home/user1/public_html/backups 

然后我得到了同样的错误:没有这样的文件或目录mysqldump:得到errno 32写

我在public_html(user1的根文件夹)之前添加一个点,并正常工作。

 mysqldump -u user1_usr -h localhost -p'123123' db_db1 | gzip -f > ./public_html/backups/db-2015-11-14-0722.sql.gz