LINUX.ORG.RU
ФорумAdmin

Не понимаю WAL-архивацию postgresql


0

1

Задача: организовать полный бекап кластера со всеми БД без остановки СУБД. Потом етот бекап планируется развернуть в качестве тестового кластера. Одна из баз весит 26Гб. Если pg_dumpall довольно быстро пишет дамп, то разворачивание етого бекапа при помощи psql происходит примерно по 10Мб/мин. 26Гб таким образом просто состарюсь ждать.

# psql -V
psql (PostgreSQL) 9.0.4

Прочитал вот ету статью: http://korzh.net/2011-04-rezervnoe-kopirovanie-baz-dannyx-v-subd-postgresql-o...

Попробовал организовать оба способа, но никаких файлов на выходе не получил.

Что, собственно, происходило. Когда я дошёл до строчки «select pg_start_backup('/db/backup/base/20130116');», postgres сначала матернулся:

ERROR:  WAL level not sufficient for making an online backup
HINT:  wal_level must be set to "archive" or "hot_standby" at server start.

ОК, поставил ему «wal_level = archive» и «archive_mode = on». Команда pg_backup_start затем выполнилась:

 pg_start_backup 
-----------------
 8B/20
(1 row)

Смутило, что она выполнилась быстро - за секунды и после етого в папке назначения ничего не появилось.

Далее ругнулась команда «select pg_stop_backup()»:

NOTICE:  pg_stop_backup cleanup done, waiting for required WAL segments to be archived

WARNING:  pg_stop_backup still waiting for all required WAL segments to be archived (60 seconds elapsed)
HINT:  Check that your archive_command is executing properly.  pg_stop_backup can be cancelled safely, but the database backup will not be usable without all the WAL segments.
Так как ето не ошибка, подождал 10 минут, но сообщения WARNING так и сыпались, те же самые. Файлов так и не обнаружил. Хорошо, указал ему параметр:
archive_command = 'test ! -f /db/base/backup_in_progress || cp -i %p /db/backup/archive/%f < /dev/null'
В итоге, исправляя ошибки я организовал второй вариант, On-line backup PostgreSQL.

На етот раз и «pg_start_backup» и «pg_stop_backup» выполнились без ошибок, но опять же, ничего я не нашёл.

Скажите, я вобще правильно понимаю, что можно создать полный бекап БД по указанной статье и затем развернуть его гораздо быстрее, чем при помощи psql?

Если да, то почему у меня на выходе ничего нет?

просто фиксируется изменение и ты можешь делать свой бекап. сама команда бекап не делает.

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

pg_start_backup принудительно создаёт контрольную точку в журнале, а после восстановления он прокатит базу по логам если ты их скопируешь.

То есть в том случае, если произойдут изменения, то они будут записаны в WAL-логи и применятся после запуска бэкапа.
Если WAL-логов не будет, то состояние базы после восстановления будет совпадать с состоянием на момент pg_start_backup.

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