Скрипт Bash в EC2 завершается ошибкой из-за разрешений

Скрипт Bash в EC2 завершается ошибкой из-за разрешений

У меня нет достаточного опыта работы с 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. Кажется, вы даже не дошли до того, чтобы беспокоиться о S3 (хотя эта часть выглядит нормально).

Вам следует запустить скрипт резервного копирования как пользователь без прав root, поэтому /home/ec2-userпока переместите его в .

Затем вам следует запустить cron под учетной записью ec2-user и использовать его sudo -u ec2-user crontab -eдля редактирования crontab пользователя ec2-user. Не редактируйте 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 .

Связанный контент