Возможно ли быстро создавать /восстанавливать моментальные снимки базы данных с помощью PostgreSQL?

Прежде всего, я разработчик, а не администратор базы данных или системный администратор; будьте осторожны:)

Я работаю над рабочим процессом приложения, когда одно действие пользователя вызывает сложные изменения в базе данных - создание сотен записей в некоторых таблицах, обновление сотен записей в других и т. д. Всего всего около 12 таблиц (из из ~ 100) затронуты этим действием. Из-за сложности мне очень сложно вручную отменить все изменения, прежде чем я смогу запустить еще один тест. В течение большей части моего времени разработки я могу просто вставить инструкцию «ROLLBACK» в конце рабочего процесса, но когда я приближаюсь к выполнению своих изменений, мне нужно проверить реальную вещь.

У меня есть локальная копия рабочей базы данных для работы. В моем случае сброс и восстановление между тестами быстрее, чем запись сценария для отмены всех изменений. Это быстрее, но это все равно замедляет меня (восстановление занимает около 20 минут на моем стареющем ноутбуке). Есть ли способ сохранить моментальный снимок текущего состояния базы данных, а затем быстро восстановить его?

Я гарантированно являюсь единственным пользователем в системе, и у меня есть root-доступ. Дамп базы данных составляет ~ 100 МБ, когда tar'ed и gzip'ed. Версия PostgreSQL - 8.3.

Заранее благодарим за полезные идеи.

40 голосов | спросил Zilk 21 J0000006Europe/Moscow 2011, 02:53:22

6 ответов


30

Вы можете использовать моментальные снимки уровня файловой системы, но это часто довольно громоздко, требует специальных файловых систем и не всегда доступно, особенно для ноутбуков старшего возраста. ; -)

Как насчет создания базового состояния как базы данных, а затем создайте из него новую базу данных для тестового запуска, используя функциональность CREATE DATABASE ... TEMPLATE. После теста вы выбросите эту базу данных. Тогда ограничение скорости - это всего лишь время для cp -R каталога базы данных. Это примерно так же быстро, как вы получите без магии снимков файловой системы.

ответил Peter Eisentraut 23 J0000006Europe/Moscow 2011, 00:43:15
5

Если ваша база данных находится в Virtualbox , вы можете легко сохранять моментальные снимки и восстанавливать моментальные снимки как состояния базы данных и самой ОС в течение нескольких секунд (или 1-2 минуты, если у вас действительно есть много данных в базе данных или ОС или очень маленькая память, выделенная виртуальной машине) бесплатно.

В вашем /большинстве случаев было бы лучше установить легкий Linux (чем сервер Windows) для запуска виртуальной машины, где размещена база данных, учитывая, что у вас мало ресурсов, доступных на вашем ноутбуке.


На рабочем месте я использую резервные копии снимков MediaTemple для достижения того же результата (но это 20 $ за резервный слот и специфично для этой службы веб-хостинга, так что это может вам не подойти).

ответил wildpeaks 1 J000000Friday11 2011, 16:45:36
5

Используйте Stellar , это похоже на git для баз данных:

  

Stellar позволяет быстро восстанавливать базу данных, когда вы, например.   записи миграции баз данных, переключения ветвей или обмена данными с SQL.   Поддерживаются PostgreSQL и MySQL (частично).

ответил David Portabella 12 J0000006Europe/Moscow 2016, 20:00:14
3

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

ответил Jack Douglas 21 J0000006Europe/Moscow 2011, 12:12:03
1

Нашел этот вопрос, пытаясь сделать то же самое, и закончил использовать git в каталоге данных postgresql. Отмена изменений так же просто, как:

git reset --hard
ответил user92843 22 PMpFri, 22 Apr 2016 17:59:41 +030059Friday 2016, 17:59:41
0

Еще один вариант, который можно было бы экспериментировать, состоял в том, чтобы фактически сохранить копию каталога данных postgresql, а затем просто переписать существующий каталог с копией, когда вы хотите ее восстановить. Это потребует больше места на диске, но, безусловно, будет быстрее, чем восстановление из резервной копии. Я не уверен, что если бы это было быстрее, чем метод шаблона, то сначала было бы неплохо сделать некоторые тесты.

ответил Haroldo_OK 16 Jpm1000000pmMon, 16 Jan 2017 13:38:40 +030017 2017, 13:38:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132