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

Восстановление базы данных Postgres, управляемой Digital Ocean

Недавно мы переместили наш кластер баз данных из автономного в Digital Ocean Managed Postgres. Мы хотели бы откатить всю базу данных к недавнему моменту времени.

Резервные копии доступны до недели.

Согласно документы мы не можем напрямую восстановить базу данных из резервной копии:

Когда вы выполняете восстановление из резервной копии, мы создаем новую копию основного узла вашего кластера. Вы не можете выполнить восстановление непосредственно в первичный узел, потому что это создает альтернативные временные рамки для базы данных, которые вносят неоправданную сложность в управляемую службу. При восстановлении в новый основной узел сохраняется единая история линейной шкалы времени.

Когда новый кластер восстанавливается, это параллельный кластер (см. Изображение ниже), похоже, нет никакого способа заставить его использовать параметры соединения исходного кластера.

Единственный путь вперед, который мы видим, - это выполнить полный экспорт из нового параллельного кластера, удалить исходную базу данных и импортировать из командной строки.

Есть ли здесь другой вариант?

Измените параметры подключения для каждого приложения, чтобы они указывали на новый экземпляр базы данных в новый момент времени.

Самая быстрая и минимальная сложность на стороне базы данных. Добавление дампа и восстановления может значительно увеличить время восстановления. Избегает сложности и путаницы с двумя точками времени в одном экземпляре. Возможно, удастся сохранить старый экземпляр на некоторое время, чтобы отменить восстановление.

Более сложная на стороне приложения, может потребоваться настройка или повторное развертывание. Возможно, нетривиально, хотя должно быть возможно, если, скажем, вы должны были поменять провайдера базы данных.

В конце концов, я восстановил на другой кластер, затем скопировал БД локально и восстановил ее. Не лучшее решение, но другого выхода я не видел.

Восстановить в новый кластер

Согласно пользовательскому интерфейсу DO.

Экспорт БД в локальную

pg_dump -d '<DO new cluster connection string>' -Fc > prod_digital_ocean.dmp

Реимпорт

pg_restore --no-acl --no-owner --clean -d '< DO old cluster connection string>' prod_digital_ocean.dmp