Назад | Перейти на главную страницу

Можете ли вы восстановить файл дампа MySQL из корзины S3 в экземпляр RDS?

Я исследую запуск регулярных дампов 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 рекомендуют такую ​​процедуру:

http://aws.amazon.com/articles/2933

У меня это сработало, когда я попытался сделать резервную копию сервера 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"

Затем очистите кластер, определение задачи и роль, если вам нужно было их создать.