권한으로 인해 EC2의 Bash 스크립트가 실패함

권한으로 인해 EC2의 Bash 스크립트가 실패함

저는 EC2에 대한 경험이 없으며 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에 대해 걱정할 정도까지는 아닌 것 같습니다(비록 괜찮아 보이지만).

루트가 아닌 사용자로 백업 스크립트를 실행해야 하므로 /home/ec2-user지금은 해당 사용자로 이동하십시오.

그런 다음 ec2-user에서 cron을 실행해야 합니다. sudo -u ec2-user crontab -eec2-user의 crontab을 편집하는 데 사용하세요. 최신 배포판에서 crontab을 직접 편집하지 마세요.

$MYSQL_USER이렇게 하면 backup.gz 문제가 해결되지만 @ ec2_ip가 RDS 인스턴스에서 유효한 사용자인지 확인해야 합니다 .이것대답은 유익할 수 있습니다.

편집: 최근 문제는 아마도 예를 들어 -u $MYSQL_USER를 -u$MYSQL_USER로 변경해야 한다는 의미일 것입니다. 호스트 및 비밀번호 매개변수도 마찬가지입니다.

답변2

이 결함은 스크립트 파일 자체의 권한과 관련이 없습니다(DB-테이크-스냅샷-s3.sh) 대신 스크립트가 실행되고 임시로 파일을 저장하는 디렉터리의 권한에 해당합니다.지원.gz.

스크립트를 실행하는 디렉터리의 권한을 나열하는 것이 좋습니다.

ll -d .

또한 해당 디렉토리에 쓰기 권한을 추가하십시오.

chmod +w .

또한 이러한 정보(현재 디렉터리 및 현재 사용자)를 언급하는 것이 작동하지 않을 경우 더 많은 도움을 드릴 수 있도록 하는 것이 중요합니다.

id
pwd
ll
ll -d .

관련 정보