Я не очень разбираюсь в 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
Я думаю, что проблемы с EC2, S3 и RDS сейчас отвлекают, в основном RDS похож на любой экземпляр mysql, а EC2 похож на любую виртуальную машину Linux. Кажется, вы даже не дошли до того, что беспокоитесь о S3 (хотя это выглядит нормально).
Вы должны запустить свой сценарий резервного копирования как пользователь без полномочий root, поэтому переместите его в /home/ec2-user
на данный момент.
Затем вы должны запустить cron под пользователем ec2 - используйте sudo -u ec2-user crontab -e
для редактирования crontab пользователя ec2 - не редактируйте crontab прямо в современном дистрибутиве.
Это решит проблему с backup.gz, но вам также потребуется $MYSQL_USER
@ec2_ip
является действующим пользователем вашего экземпляра RDS. это ответ может быть информативным.
Изменить: ваша последняя проблема, вероятно, просто означает, что вам нужно изменить, например, с -u $ MYSQL_USER на -u $ MYSQL_USER - и то же самое для параметров хоста и пароля.
Эта ошибка не связана с правами самого файла скрипта (db-take-snapshot-s3.sh), а скорее к правам каталога, в котором запускается скрипт и временно сохраняет файл резервное копирование.gz.
Я рекомендую вам указать права каталога, в котором вы запускаете скрипт
ll -d .
А также добавьте разрешение на запись в этот каталог
chmod +w .
Также важно, если не получится упомянуть эту информацию (текущий каталог и текущий пользователь), чтобы мы могли больше помочь.
id
pwd
ll
ll -d .