mysql - Shell 脚本权限被拒绝 mysqldump : Got errno 32 on write only in Cron

标签 mysql bash shell cron

我有一个简单的 sh 文件来备份一些 MySql 数据库并将它们通过 FTP 传输到外部服务器。 如果从命令行调用,shell 脚本工作正常,但在计划为 cron 作业时不起作用。

所有文件都是chmdod 777

这是脚本

mysqldump -uuser-ppassword databasename | gzip > shop1.gz
mysqldump -uuser -password databasename | gzip > shop2.gz
mysqldump -uuser -ppassword databasename | gzip > timesheets.gz
mysqldump -uuser -ppassword databasename | gzip > library.gz 
tar -cvvf backup.tar *.gz

filename="backup.tar"
hostname="****"
username="****"
password="****"
ftp -un $hostname <<EOF
quote USER $username
quote PASS $password
passive
cd db_backups
binary
put $filename
quit
EOF

我得到了错误:

httpdocs/dump/db_bck.sh: line 1: shop1.gz: Permission denied
mysqldump: Got errno 32 on write
httpdocs/dump/db_bck.sh: line 2: shop2.gz: Permission denied
mysqldump: Got errno 32 on write
httpdocs/dump/db_bck.sh: line 3: timesheets.gz: Permission denied
mysqldump: Got errno 32 on write
httpdocs/dump/db_bck.sh: line 4: library.gz: Permission denied
mysqldump: Got errno 32 on write
tar: backup.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
ftp: u: unknown option

这是最终的工作脚本,以防对其他人有用:

mysqldump -u -p mydb1 | gzip > httpdocs/dump/mydb1.gz
mysqldump -u -p mydb2 | gzip > httpdocs/dump/mydb2.gz
mysqldump -u -p mydb3 | gzip > httpdocs/dump/mydb3.gz
mysqldump -u -p mydb4 | gzip > httpdocs/dump/mydb4.gz 


cd /var/www/vhosts/mydomain.com/httpdocs/dump
filename="*.gz"
hostname="ftphostname"
username="ftpusernam"
password="ftppassword"
/usr/kerberos/bin/ftp -un $hostname <<EOF
quote USER $username
quote PASS $password
passive
cd db_backups
binary
prompt
mput $filename
quit
EOF

最佳答案

确保以下(初步检查)

  1. 确保您有足够的可用磁盘空间。

  2. 增加max_allowed_packet对于 mysqldump

  3. 运行 cron 的用户的权限(检查所有内容 chownchgrpchmod)

  4. 确保 gzip 确实有效

  5. 确保您对 filename="backup.tar"

  6. 具有写入权限
  7. 尝试使用完整路径信息,例如(/var/lib/mysql/backups/shop2.gz)

  8. 最后使用touch先创建文件,然后使用cron运行脚本

关于mysql - Shell 脚本权限被拒绝 mysqldump : Got errno 32 on write only in Cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30459712/

相关文章:

linux - 我不知道我的代码有什么问题

bash - 生成包含列表中命名的 shell 变量的 JSON 映射

regex - 使用正则表达式重命名文件(Linux 命令行)

php - 如果提交另一个表单,为什么 php 在一个表单中输入空白值或重复值

php - 从出生日期显示年龄?

mysql - 使用 str_to_date 转换日期格式

git - 如何对 git ls-files 中的所有文件运行命令?

c# - LOAD DATA INFILE 有时找不到文件?

bash - 如果其子 shell 错误,则导致 bash 语句出错

linux - ls 是否尝试访问子目录?