LINUX.ORG.RU
решено ФорумAdmin

Правильный бэкап postgresql

 ,


1

2

Настраиваю резервное копирование постгреса (8.4). С полным бэкапом все понятно

psql -c select pg_start_backup('full_$dt');
tar cvf /mnt/pgsql/backup/full_$dt.tar.gz $PGDATA
psql -c select pg_stop_backup();
bpbackup ....

А как по правильному быть с архивлогами? В postgresql.conf указан путь до архивлогов

archive_mode = on	# allows archiving to be done
archive_command = 'cp %p /mnt/pgsql/archive/%f'
archive_timeout = 0		# force a logfile segment switch after this

При этом заметил, что в /mnt/pgsql/archive попадают не все wal из $PGDATA/pg_xlog.

Получается после бэкапа arvhive/ необходимо еще бэкапить pg_xlog, что бы в случае чего восстановиться на время перед бэкапом? Или для архивлогов тоже запускать сначала pg_start_backup(); pg_stop_backup()?

При этом заметил, что в /mnt/pgsql/archive попадают не все wal из $PGDATA/pg_xlog.

должны все попадать. Смотри что там в логах

maxcom ★★★★★ ()

В лимит открытых файлов не вляпался?

anonymous ()
Ответ на: комментарий от Evgueni

pg_dump же делает просто sql дамп => не получится делать инкрементальные бэкапы и не получится восстановить данные на конкретное время.

user_undefined ()
Ответ на: комментарий от maxcom

Действительно, куда-то я не туда посмотрел, похоже попадает все, кроме последнего (видимо текущего) wal

-bash-4.1$ ls -ltr data/pg_xlog/| tail -1
-rw-------  1 postgres postgres 16777216 Dec 26 11:30 0000000100000001000000CE
-bash-4.1$ ls -ltr archive/
total 65536
-rw------- 1 postgres postgres 16777216 Dec 26 11:27 0000000100000001000000CA
-rw------- 1 postgres postgres 16777216 Dec 26 11:28 0000000100000001000000CB
-rw------- 1 postgres postgres 16777216 Dec 26 11:29 0000000100000001000000CC
-rw------- 1 postgres postgres 16777216 Dec 26 11:29 0000000100000001000000CD

Тогда проблема решается и архивлоги можно будет делать без тормозного pg_start_backup

user_undefined ()

Получается после бэкапа arvhive/ необходимо еще бэкапить pg_xlog, что бы в случае чего восстановиться на время перед бэкапом?

AFAIU Из /mnt/pgsql/backup/full_$dt.tar.gz pg_xlogs надо вычищать, и пользоваться теми, что пришли через archive_command.

Бекапить pg_xlogs при работающем сервере нельзя.

ival ★★ ()
Ответ на: комментарий от user_undefined

мне когда-то подсказали способ: делать diff-ы между дампами, восстанавливать patch-ем.
и знаешь, это решение работает уже года 2 - без особых проблем. сильно экономит место на бекапном сторадже.

Komintern ★★★★★ ()
Ответ на: комментарий от maxcom

Можно, если start backup сделать. При этом нужно сначала сохранить данные, а потом журналы

Я всегда думал, что pg_start_backup останавливает запись данных, позволяя сделать их consistent копию. Запись в журнал при этом не отключается (и не может отключатся в работающем сервере: нельзя отрапортовать о завершении транзакции без единой записи на диск)

Если это не так, то зачем нужен start/stop backup?

ival ★★ ()
Последнее исправление: ival (всего исправлений: 1)
Ответ на: комментарий от ival

start backup выключает удаление архивных логов из pg_xlog. Чтобы все логи попали в backup. Запись данных при этом не останавливается

maxcom ★★★★★ ()
Ответ на: комментарий от Komintern

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

user_undefined ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.