Я исследую запуск регулярных дампов MySQL в корзину S3 в рамках стратегии аварийного восстановления (частично вызванной нынешней нулевой стоимостью входящей передачи данных!). В случае аварии я бы хотел восстановить файл дампа с S3 в новый экземпляр RDS. Несмотря на обширные поиски, я не могу найти никаких примеров этого. Кто-нибудь знает возможно ли это?
Чтобы дать немного контекста, это база данных MySQL, работающая в режиме чтения и чтения, которая работает круглосуточно и требует 500 ГБ. Я планирую использовать репликацию MySQL на подчиненное устройство, из которого мы можем затем получить дампы для отправки на S3 в случае сбоя хоста (мы используем одного и того же хостинг-провайдера для главного и подчиненного сервера репликации, хотя они находятся в разных центрах обработки данных ).
Вы можете использовать Инструмент AWS CLI и STDIN в интерфейсе командной строки ("-") для этого:
mysql -u db_user -ppassword database_name < aws s3 cp s3://mysqldump_bucket_name/mysqldump.sql -
В -
часть aws s3 cp
команда направляет вывод в STDOUT, который читается mysql.
В настоящее время в RDS нет такой функции, как описано в:
https://forums.aws.amazon.com/message.jspa?messageID=213853
Но ребята из AWS рекомендуют такую процедуру:
У меня это сработало, когда я попытался сделать резервную копию сервера mysql, работающего на моей машине, на RDS mysql. (на моей машине были окна, но он должен работать и для дампа mysql linux)
mysqldump -u root -p --databases 'mydatabase' > dump.sql
затем просто загрузите в экземпляр RDS:
mysql -h myrds.com -u myuser -p < dump.sql
Я сделал это так, чтобы запустить задачу Fargate.
Создайте контейнер Docker со сценарием оболочки, содержащим оператор pipe:
aws s3 cp $DATA_LOCATION - | mysql --host=$MYSQL_HOST --user=$MYSQL_USER --password=$MYSQL_PASS --database=$database
Загрузите его где-нибудь у AWS (например, ECR).
Затем создайте кластер (если у вас его еще нет) и определение задачи, которое запускает контейнер, с ролью, которая может видеть корзину S3. Также составьте конфигурацию сети, которая может видеть экземпляр RDS. (Я сделал все это в Pulumi, а не в AWS CLI, поэтому в этом разделе нет примеров.)
Затем соберите все это вместе и запустите задачу с помощью этого вызова:
aws ecs run-task --task-definition=$TASK_ARN --cluster=$CLUSTER_ARN --network-configuration=$TASK_NETWORK --launch-type="FARGATE"
Затем очистите кластер, определение задачи и роль, если вам нужно было их создать.