EC2 中的 Bash 脚本由于权限问题失败

EC2 中的 Bash 脚本由于权限问题失败

我对 EC2 不是很熟悉,想要设置一个 cron 作业来创建我的 RDS 数据库的转储并将其复制到我的 S3 存储桶中。

#!/bin/bash

AWS_ACCESS_KEY_ID=***
AWS_SECRET_ACCESS_KEY=***
BUCKET=db-snapshots

MYSQL_USER=***
MYSQL_PASSWORD=***
MYSQL_HOST=***
MYSQL_DATABASE_NAME= 'database_name'

TIMESTAMP=$(date +"%d-%b-%Y-%H-%M-%S")

#logging
LOG_ROOT="/backup/mysql_dump/logs/dump.log"

#Dump of Mysql Database into S3
echo "[db-take-snapshot]: creating backup of database $MYSQL_DATABASE_NAME start at $TSTAMP" >> "$LOG_ROOT"

mysqldump -u $MYSQL_USER \
          -p $MYSQL_PASSWORD \
          -h $MYSQL_HOST \
          --single-transaction \
          --routines --triggers \
          --database_name  $MYSQL_DATABASES_NAME| gzip > backup.gz

echo "[db-take-snapshot]:Finished backup of database and sending it in S3 Bucket at $TIMESTAMP" >> "$LOG_ROOT"

S3_KEY=$BUCKET/backups/$(date "+%Y-%m-%d")-backup.gz
aws s3 cp backup.gz s3://$S3_KEY --sse AES256

echo "[db-take-snapshot]: Copied to S3 at $TIMESTAMP" >> "$LOG_ROOT"

rm -f backup.gz

echo "[db-take-snapshot]: Backup finished at $TIMESTAMP" >> "$LOG_ROOT"

目前停用日志记录部分,上述脚本由于权限问题而失败:

/db-take-snapshot-s3.sh: line 25: backup.gz: Permission denied

权限如下:-rwxr-xr-x 1 root root 1144 Mar 21 10:30 db-take-snapshot-s3.sh

任何想法都将不胜感激

更新:

$ll -d . : drwxr-xr-x 2 root root 4096 Mar 21 11:07 .

$ll: -rwx------ 1 root root 1139 Mar 21 11:06 db-take-snapshot-s3.sh

$pwd: /etc/cron.hourly

id: uid=500(ec2-user) gid=500(ec2-user) groups=500(ec2-user),10(wheel)

更新2 好的,我mysqldump -h $MYSQL_HOST -u $MYSQL_USER -p $MYSQL_PASSWORD --all-databases > backup.sql在终端中运行,并且备份成功。

但是,它作为 bash 脚本的一部分仍然失败,并且生成的 backup.sql 的内容现在是:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

答案1

我认为 EC2、S3 和 RDS 的问题目前令人分心,基本上 RDS 就像任何 mysql 实例一样,EC2 就像任何 linux VM 一样。看来您甚至还没有到担心 S3 的地步(尽管这部分看起来不错)。

您应该以非root用户身份运行备份脚本,因此/home/ec2-user现在将其移至。

然后,您应该在 ec2-user 下运行 cron - 用于sudo -u ec2-user crontab -e编辑 ec2-user 的 crontab - 不要直接在现代发行版上编辑 crontab。

这将解决 backup.gz 问题,但您还需要确保$MYSQL_USER@ec2_ip是 RDS 实例上的有效用户。答案可能会有所帮助。

编辑:您的最新问题可能只是意味着您需要从 -u $MYSQL_USER 更改为 -u$MYSQL_USER - 主机和密码参数也同样如此。

答案2

此错误与脚本文件本身的权限无关(db-拍摄快照-s3.sh)而是运行脚本并临时保存文件的目录的权限备份.gz。

我建议您列出运行脚本的目录的权限

ll -d .

并添加该目录的写权限

chmod +w .

如果提及这些信息(当前目录和当前用户)不起作用,那么提及这些信息(当前目录和当前用户)也很重要,这样我们才能提供更多帮助。

id
pwd
ll
ll -d .

相关内容