私は EC2 の経験があまりないので、RDS のデータベースのダンプを作成し、それを S3 バケットにコピーする cron ジョブを設定したいと考えています。
#!/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 を直接編集しないでください。
$MYSQL_USER
これにより、backup.gz の問題は解決されますが、 @ が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 .