这是一个非常基本的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