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-take-snapshot-s3.sh) 而是運行腳本並暫時保存檔案的目錄的權限備份.gz。

我建議您列出運行腳本的目錄的權限

ll -d .

並對該目錄新增寫入權限

chmod +w .

如果無法提及這些資訊(目前目錄和目前使用者),那麼我們可以提供更多幫助,這一點也很重要。

id
pwd
ll
ll -d .

相關內容