这是一个非常基本的 mysqldump 脚本,它将执行转储并将其存储在本地。
单独运行 mysqldump 和 gzip 都可以正常工作(即它们在我的路径中处于它们需要的位置)
/usr/bin/mysqldump --database $DBNAME --opt --single-transaction -u $USER -p $PASS
但是当我尝试将输出通过管道传输到 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 似乎是管道损坏错误,因此...我假设,由于 mysqldump 可以正常运行,我在写入结果时遇到了问题?可能是权限问题?
我正在写入的目录的权限是 766 (rwxrw-rw-)
我在超级用户权限下运行它(su
)
我想将其设置为通过 cron 运行,但直到我弄清楚为什么它会失败...才得以成功。
答案1
看看你是否可以做到这一点:
$ 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
答案2
检查路径:
file /var/www/vhosts/meh/mysqlbackup/
ls -ald /var/www/vhosts/meh/mysqlbackup/
并创建目录:
mkdir -p /var/www/vhosts/meh/mysqlbackup/
答案3
另一个明显的可能性是:在一个实例中有“/var/www/vhosts/meh/mysqlbackup”,而在另一个实例中有“/var/www/vhosts/meh/mysqlbackups”。也许就是这样。
答案4
对我来说,我没有以 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