Skip to content

Instantly share code, notes, and snippets.

@popovnv
Forked from rsyuzyov/postgres-clone-db-on-zfs
Created March 15, 2019 07:43
Show Gist options
  • Select an option

  • Save popovnv/025bf958ad3bd21c5013339c22b21d1d to your computer and use it in GitHub Desktop.

Select an option

Save popovnv/025bf958ad3bd21c5013339c22b21d1d to your computer and use it in GitHub Desktop.
postgres-clone-db-on-zfs
Как максимально быстро и с минимальным расходом дискового пространства получать копии баз для разработки.
Предположим, есть сервер баз данных под управлением postgres, назовем его srv-db
И есть сервер разработки, на котором тоже есть postgres, назовем его srv-dev.
Требуется по мере надобности создавать в онлайне за несколько минут получать копии для тестирования и разработки.
Для этого проводим подготовительные работы:
1. Размещаем кластер postgres на zfs
2. Настраиваем потоковую асинхронную репликацию srv-db -> srv-dev
Делаем копиии:
3. Делаем снимок zfs, затем клон на основе снимка
4. Создаем пустую базу 1С, если не создавали ранее
5. Заменяем каталог базы на симлинк к базе с клонированного диска
Время создания копии вручную - 3-5 минут, скриптом - 10 секунд.
По месту: изначально клон не занимает место, по мере работы пишутся изменения.
Операцию можно выплнять как для всех разработчиков с любой необходимой периодичностью, так и индивидуально по требованию.
===
Пример: создание копии базы trade-dev-ivanov из базы trade-dev-base
- Установить нужное ПО, если не установлено: choco install putty pgadmin -y
- Подключиться из windows через putty: username@computername
- Создать новую пустую базу 1С, посмотреть OID trade-dev-base и trade-dev-ivanov: предположим, что это 16384 и 725498
(OID можно посмотреть в свойствах базы в pgadmin, либо c помощью /opt/pgpro/1c-11/bin/oid2name)
- Сделать снимок (назвать его 20190215) и клон на основе снимка:
sudo zfs snapshot zpool0/db@20190215
sudo zfs clone zpool0/db@20190215 zpool0/db/ivanov
- Сделать владельцем пользователя postgres:
sudo chown postgres:postgres /zpool0/db/iavnov
- Остановить кластер postgres для подмены базы:
sudo systemctl stop postgrespro-1c-11
- Удалить каталог новой базы и заменить на симлинк от базы
rm -rf /var/lib/pgpro/1c-11/data/base/725498
ln -s /zpool0/rubtsov/pgpro/1c-11/data/base/16384 /var/lib/pgpro/1c-11/data/base/725498
- Запустить postgres:
sudo systemctl start postgrespro-1c-11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment