制作一个简单的 MySQL 备份脚本通过 cron 运行,存在权限问题

制作一个简单的 MySQL 备份脚本通过 cron 运行,存在权限问题

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

相关内容