我對 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 .