Есть два сервера. Один - это сервер базы данных на месте; другой - внешний резервный сервер. Поскольку локальный сервер базы данных уже содержит около 900 ГБ данных, резервное копирование очень важно. Изначально мы использовали ежедневный pg_dumpall
, но по соображениям производительности это больше не вариант.
Поскольку обновление сервера базы данных, включая обновление самого postgresql (с postgresql 9.1 до 9.4) все равно должно было быть, я решил попробовать перейти на использование доставки WAL на внешний сервер, чтобы резервные копии работали. Вот что я сделал до сих пор:
wal_level
установлен на hot_standby
, archive_mode
к on
, и archive_command
к test ! -f /srv/pg_wal/%f && cp %p /srv/pg_wal/%f
ssh oldserver pg_dumpall | psql
для чтения данных, что создает большие объемы сегментов WALrestore.conf
в каталоге данных стороннего сервера, содержащем restore_command = 'cp /srv/pg_wal/%f "%p"'
и standby_mode = on
.recovery.conf
, поэтому снова остановил сервер и переместил файл на правильное имя.К сожалению, похоже, что это не работает. Когда я смотрю файл журнала прямо сейчас, я вижу следующее:
2016-07-25 12:30:59 CEST [137390-71] LOG: record with zero length at 0/2000200
2016-07-25 12:31:04 CEST [137390-72] LOG: restored log file "000000010000000000000002" from archive
2016-07-25 12:31:04 CEST [137390-73] LOG: record with zero length at 0/2000200
2016-07-25 12:31:09 CEST [137390-74] LOG: restored log file "000000010000000000000002" from archive
Это повторяется снова и снова.
Проверка pg_xlog
каталог на внешнем сервере показывает, что там есть два файла: один 000000010000000000000002
, у которого такая же контрольная сумма, как и у одноименного в /srv/pg_wal
; другой ... 03, чего нет.
Мой /srv/pg_wal
содержит все сегменты WAL, включая также 000000010000000000000001
(самый первый сегмент, сделанный исходным сервером базы данных). Однако мне кажется, что я не могу загрузить их на сторонний сервер.
Вопрос: могу ли я в данной ситуации каким-то образом заставить внешний сервер принимать эти логи WAL? Если да, как мне действовать?
Технически я мог бы создать новую базовую резервную копию и скопировать ее на новый сервер, но из-за большого количества данных, уже имеющихся на сервере, и низкой пропускной способности между двумя сайтами, я бы предпочел не делать этого, если я могу избежать Это.