저는 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 -e
ec2-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 .