2013-02-17 2 views
39

У меня возник вопрос о Amazon RDS. Мне нужна база данных онлайн всего около двух часов в день, но я имею дело с довольно большой базой данных со скоростью около 1 ГБ.Amazon RDS - онлайн только при необходимости?

У меня есть два основных вопроса:

  1. Могу ли я автоматизировать чего мою базу данных RDS онлайн и в автономном режиме с помощью скриптов, чтобы сэкономить деньги?

  2. Когда я помещал автономный RDS, чтобы остановить счетчик часов работы и выставил мне счет, когда я верну его в онлайн, он будет по-прежнему иметь один и тот же контент (т. Е. Все мои данные останутся там, или у него будет быть пустой БД?). Если это так, есть ли какой-либо путь вокруг этого, а не резервное копирование до S3 и повторное его переименование?

+4

Как указано ниже, вы можете делать снимок/удаление/восстановление, чтобы «запустить/остановить» ваш экземпляр RDS. Я думаю, что проще просто установить mysql на экземпляр EC2, который вы можете запустить и остановить по мере необходимости. – datasage

+1

Позор на Амазонке, по состоянию на июнь 2016 года все еще нет такой функции – Green

+0

Снимок - это плохой вариант. Снимки сохраняются на S3. Поэтому, когда вы создаете моментальный снимок, вам будет выставлен счет за хранение. Довольно умный от Amazon не реализовывать функцию остановки/запуска, которая заставляет вас платить в любом случае. На данный момент с июня 2016 года можно создать экземпляр 'db.t2.micro' в качестве бесплатного уровня для целей тестирования. – Green

ответ

9

Вот скрипт, который будет остановить/запустить/перезагрузить экземпляр RDS

#!/bin/bash 

# usage ./startStop.sh lhdevices start 

INSTANCE="$1" 
ACTION="$2" 



# export vars to run RDS CLI 
export JAVA_HOME=/usr; 
export AWS_RDS_HOME=/home/mysql/RDSCli-1.15.001; 
export PATH=$PATH:/home/mysql/RDSCli-1.15.001/bin; 
export EC2_REGION=us-east-1; 
export AWS_CREDENTIAL_FILE=/home/mysql/RDSCli-1.15.001/keysLightaria.txt; 

if [ $# -ne 2 ] 
then 
echo "Usage: $0 {MySQL-Instance Name} {Action either start, stop or reboot}" 
echo "" 
exit 1 
fi 


shopt -s nocasematch 

if [[ $ACTION == 'start' ]] 
then 
echo "This will $ACTION a MySQL Instance" 
rds-restore-db-instance-from-db-snapshot lhdevices 
--db-snapshot-identifier  dbStart --availability-zone us-east-1a  
--db-instance-class db.m1.small 

echo "Sleeping while instance is created" 
sleep 10m 
echo "waking..." 

rds-modify-db-instance lhdevices --db-security-groups kfarrell 

echo "Sleeping while instance is modified for security group name" 
sleep 5m 
echo "waking..." 

elif [[ $ACTION == 'stop' ]] 
then 
echo "This will $ACTION a MySQL Instance" 

yes | rds-delete-db-snapshot dbStart 

echo "Sleeping while deleting old snapshot " 
sleep 10m 

#rds-create-db-snapshot lhdevices --db-snapshot-identifier dbStart 

# echo "Sleeping while creating new snapshot " 
# sleep 10m 
# echo "waking...." 

#rds-delete-db-instance lhdevices --force --skip-final-snapshot 
rds-delete-db-instance lhdevices --force --final-db-snapshot-identifier dbStart 

echo "Sleeping while instance is deleted" 
sleep 10m 
echo "waking...." 

elif [[ $ACTION == 'reboot' ]] 
then 
echo "This will $ACTION a MySQL Instance" 
rds-reboot-db-instance lhdevices ; 

echo "Sleeping while Instance is rebooted" 
sleep 5m 
echo "waking...." 

else 

echo "Did not recognize command: $ACTION" 
echo "Usage: $0 {MySQL-Instance Name} {Action either start, stop or reboot}" 

fi 
shopt -u nocasematch 
+2

Краткая инструкция о том, как включить это было бы хорошо – Green

9

Вы можете запускать экземпляры EC2 * с использованием сценариев оболочки, поэтому я предполагаю, что вы также можете использовать RDS. (см. http://docs.aws.amazon.com/AmazonRDS....html)

Но, в отличие от EC2 *, вы не можете «остановить» экземпляр RDS без «уничтожения» его. Вам необходимо создать моментальный снимок базы данных при завершении работы с базой данных. Вы будете использовать этот снимок БД при повторном запуске базы данных.

* EC2: Эластичные вычисления, аренда виртуального сервера или сервера.

29

Если вы хотите сделать это программно,

  1. Snapshot экземпляр RDS с помощью rds-create-db-snapshothttp://docs.aws.amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-CopyDBSnapshot.html

  2. Удаление запущенного экземпляра с помощью rds-delete-db-instancehttp://docs.aws.amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-DeleteDBInstance.html

  3. Восстановление базы данных из снимка с помощью rds-restore-db-instance-from-db-snapshothttp://docs.aws.amazon.com/AmazonRDS/latest/CommandLineReference/CLIReference-cmd-RestoreDBInstanceFromDBSnapshot.html

Вы также можете сделать все это с помощью веб-консоли AWS, если вы хотите сделать это вручную.

+0

Чтобы он мог записывать эти шаги в работу cron? Хм ..может быть, нет, потому что, как он мог программно узнать идентификатор экземпляра сервера БД? –

+2

Идентификатор экземпляра RDS instanced основан на том, что он назвал при создании экземпляра. – BestPractices

+0

Это тоже мое понимание. Таким образом, он мог написать сценарий, в котором говорится: 1) создать снимок «i-75gh», затем 2) убить «i-75gh» ... но где он будет восстанавливать этот снимок? Ему нужно будет запустить вторую половину процесса (создать новый экземпляр, отметить идентификатор, восстановить его снимок) вручную, n'est pas? * Тогда * ему придется обновить свой сценарий моментального снимка/убить новым идентификатором. Должен быть какой-то другой способ ... –

5

Amazon недавно обновленный их CLI включать способ запуска и остановки RDS экземпляров. stop-db-instance и start-db-instance подробно описаны шаги, необходимые для выполнения этих операций.

+1

Да! Пресс-релиз можно найти здесь: https://aws.amazon.com/about-aws/whats-new/2017/06/amazon-rds-supports-stopping-and-starting-of-database-instances/ –

Смежные вопросы