Нужно несколько раз в день, делать бэкап PostgreSQL базы (размер данных около 1 Гб.). pg_dump[all] слишком долго выполняется и при этом сервер ощутимо тормозит.Готовых решений для горячего бэкапа pgsql не нашел, поэтому думаю применить следующую методику:
while (перебираем все таблицы){
Ставим эксклюзивный лок на таблицу
Копируем все файлы этой таблицы и индексы.
Снимаем лок.
}Насколько такая схема оправдана, не будет ли проблем ? Слишком просто все
получается.Другая идея - реплицировать данные на второй сервер, но чувствую что проблем здесь будет горяздо больше, и не только с надежностью, но и с быстродействием.
>while (перебираем все таблицы){
> Ставим эксклюзивный лок на таблицу
> Копируем все файлы этой таблицы и индексы.
> Снимаем лок.
>}
>
>Насколько такая схема оправдана, не будет ли проблем ? Слишком просто все
>
>получается.а получаем в итоге невосстановимый бекап ;)
1-ая таблица - справочник
N-ая таблица - данные с внешним ключем указывающим на 1-ую таблицуЗа период времени с лока 1-ой таблицы до лока N-ой таблицы есть вероятность добавления записей в 1-ую таблицу и в записей в N-ую таблицу
т.е. мы в N-ой таблице получим записи которые потом не сможем восстановить, т.к. в справочной таблице их не будет и ограничение по внешнему ключу даст ексепшен. Вот и все собственно %)
Тут единственный выход все делать в одной SERIALIZABLE транзакции.
>
>Другая идея - реплицировать данные на второй сервер, но чувствую что проблем
>здесь будет горяздо больше, и не только с надежностью, но и
>с быстродействием.
тут уже стоит подумать и посмотреть поподробнее, имхо это будет путь более правильный и маштабирыемый.
>Нужно несколько раз в день, делать бэкап PostgreSQL базы (размер данных около
>1 Гб.). pg_dump[all] слишком долго выполняется и при этом сервер ощутимо
>тормозит.>Другая идея - реплицировать данные на второй сервер, но чувствую что проблем здесь будет горяздо больше, и не только с надежностью, но и с быстродействием.
В постгресовской рассылке был анонс системы репликации (slony1). Говорят, что работает очень быстро. Может, попробовать реплицировать базу на второй сервер и с него уже брать pg_dump?