URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID11
Нить номер: 24
[ Назад ]

Исходное сообщение
"Горячий бэкап PostgreSQL "

Отправлено anonymous , 02-Июн-04 09:23 
Нужно несколько раз в день, делать бэкап PostgreSQL базы (размер данных около 1 Гб.). pg_dump[all] слишком долго выполняется и при этом сервер ощутимо тормозит.

Готовых решений для горячего бэкапа pgsql не нашел, поэтому думаю применить следующую методику:

while (перебираем все таблицы){
    Ставим эксклюзивный лок на таблицу
    Копируем все файлы этой таблицы и индексы.
    Снимаем лок.
}

Насколько такая схема оправдана, не будет ли проблем ? Слишком просто все
получается.

Другая идея - реплицировать данные на второй сервер, но чувствую что проблем здесь будет горяздо больше, и не только с надежностью, но и с быстродействием.


Содержание

Сообщения в этом обсуждении
"Горячий бэкап PostgreSQL "
Отправлено Delhin , 03-Июн-04 09:57 
>while (перебираем все таблицы){
>    Ставим эксклюзивный лок на таблицу
>    Копируем все файлы этой таблицы и индексы.
>    Снимаем лок.
>}
>
>Насколько такая схема оправдана, не будет ли проблем ? Слишком просто все
>
>получается.

а получаем в итоге невосстановимый бекап ;)
1-ая таблица - справочник
N-ая таблица - данные с внешним ключем указывающим на 1-ую таблицу

За период времени с лока 1-ой таблицы до лока N-ой таблицы есть вероятность добавления записей в 1-ую таблицу и в записей в N-ую таблицу
т.е. мы в N-ой таблице получим записи которые потом не сможем восстановить, т.к. в справочной таблице их не будет и ограничение по внешнему ключу даст ексепшен. Вот и все собственно %)
Тут единственный выход все делать в одной SERIALIZABLE транзакции.
>
>Другая идея - реплицировать данные на второй сервер, но чувствую что проблем
>здесь будет горяздо больше, и не только с надежностью, но и
>с быстродействием.
тут уже стоит подумать и посмотреть поподробнее, имхо это будет путь более правильный и маштабирыемый.


"Горячий бэкап PostgreSQL "
Отправлено dev , 08-Июн-04 14:42 
>Нужно несколько раз в день, делать бэкап PostgreSQL базы (размер данных около
>1 Гб.). pg_dump[all] слишком долго выполняется и при этом сервер ощутимо
>тормозит.

>Другая идея - реплицировать данные на второй сервер, но чувствую что проблем здесь будет горяздо больше, и не только с надежностью, но и с быстродействием.

В постгресовской рассылке был анонс системы репликации (slony1). Говорят, что работает очень быстро. Может, попробовать реплицировать базу на второй сервер и с него уже брать pg_dump?