mysqldump 错误:无法打开 38:没有此文件

mysqldump 错误:无法打开 38:没有此文件

在我的 ubuntu 服务器中我想对我的数据库进行 mysql 备份,但是出现以下错误:

run-backup.sh: 10: run-backup.sh: cannot open 38: No such file

我在我的主目录中创建了一个 sql-backup 目录,所以我不知道这个错误意味着什么......

另外,有没有一种方法可以让 mysql 不要求输入 mysql 密码,因为我已经在 shellscript 文件中提供了 $dbpass。

这是我的 shell 脚本文件(已更改凭据):

#!/bin/bash
##this script will backup mysql and upload it to google drive 
##directory name
dirname=/home/GabotronES/sql-backups
##database name
database=wooloveapp
##database username
dbuser=GabotronES
##database password
dbpass=xxxxxxxxxxxxxxxxxxxxxxxx
## rclone remote name
remoteName=gabotrones
##spaces folder name
bucketFoldername=sql-backups
##todays date to add to new zip filename
datestring=$(date +\%Y_\%m_\%d_\%H)


mysqldump -u $dbuser -p$dbpass $database | gzip > "${dirname}/${database}-${datestring}.sql.gz"
##wait for 10 seconds
sleep 10

rclone --config=/home/GabotronES/gabotron.conf copy "${dirname}/${database}-${datestring}.sql.gz" $remoteName:$bucketFoldername

exit 0;

提前致谢。

答案1

如果行号正确,则表明错误出在赋值语句中dbpass=xxxxxxxxxxxxxxxxxxxxxxxx

由于 RHS 不受引号保护,因此 shell 将尝试对其进行解释。例如,如果密码以 结尾,<38它将尝试从38当前目录中命名的文件重定向标准输入,并且(假设不存在这样的文件)您将收到如下错误:

$ bash -c 'dbpass=xxxxxxxxxxxxxxxxxxxxx<38'
bash: 38: No such file or directory

(在 bash 中)

$ sh -c 'dbpass=xxxxxxxxxxxxxxxxxxxxx<38'
sh: 1: cannot open 38: No such file

(在sh

解决方案是确保正确引用作业右侧的字符串:

dbpass='xxxxxxxxxxxxxxxxxxxxxxxx'

出于类似的原因,你也应该双倍的引用变量扩展,例如mysqldump -u "$dbuser" -p"$dbpass" "$database"

有关更详细的讨论(包括其他 shell 略有不同的规则),请参阅忘记在 bash/POSIX shell 中引用变量的安全隐患

相关内容