LINUX.ORG.RU
ФорумAdmin

В архив БД не включены WAL-файлы

 , , ,


0

3

Всем привет

Иногда в архиве, сделанного с мастера Postgresql, отсутствуют WAL-файлы. Когда в архиве есть wal, их видно:

-rw------- postgres/postgres   16777216 2021-08-09 20:45 pg_wal/000000010000187900000093
-rw------- postgres/postgres          0 2021-08-09 20:46 pg_wal/archive_status/000000010000187900000093.done

Когда в архиве нет wal, последнее содержимое архива такое:

drwx------ postgres/postgres          0 2019-10-22 08:01 pg_tblspc/
-rw------- postgres/postgres         88 2019-10-22 08:01 postgresql.auto.conf
-rw------- postgres/postgres       8192 2021-08-15 20:43 global/pg_control

Архивация выполняется командной :

pg_basebackup -p ${PORT} -D - -Ft -U user -c fast -X fetch | pigz > $dump_path

Postgresql 10. Сами wal файлы физически есть, лежат и их никто не трогает. Что может быть\куда посмотреть еще?



Последнее исправление: Aborigen1020 (всего исправлений: 1)

Ответ на: комментарий от anc

Да вроде нет, вон реплика живет спокойно:

СООБЩЕНИЕ:  начало передачи журнала с главного сервера, с позиции 1918/61000000 на линии времени 1

Aborigen1020
() автор топика

Ты же в курсе, зачем нужен Write Ahead Log? Если да, то подумай, на кой чёрт он тебе нужен при бекапе (и почему его нет). Если нет, погугли, осознай.

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

ну без них кластер не хочет работать почему-то. Руками переносить тонны wal-ов не хочется. При basebackup он должен хотя бы записать, на какой позиции он остановился, какой сегмент был последний.
а использование dump/dumpall не имеет смысла при использовании WAL

Aborigen1020
() автор топика
Ответ на: комментарий от deadNightTiger

возможно связано с тем, что есть потоковая передача WAL и на другой сервер. wal_keep_segments сейчас в мастере 320, в реплике 0 (default)

Aborigen1020
() автор топика
Ответ на: комментарий от deadNightTiger

Не очень понял, слоты же всегда подключены? max_replication_slots? по дефолту 10 всегда есть

Aborigen1020
() автор топика
Ответ на: комментарий от WitcherGeralt

ну, я восстанавливаю кластер из бэкапа, он не стартует, при разборе обнаружилось что в таком архиве нет pg wal, вообще ни 1

Aborigen1020
() автор топика

[code] pg_basebackup -p ${PORT} -D - -Ft -U user -c fast -X fetch | pigz > $dump_path [/code]

А где проверка ошибок? Вы уверены что у вас битый бекап без WAL создался при успешном завершении?

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

проверка ошибок

проверка наличия wal?
проверка содержимого/корректности wal?
проверка результата работы pg_basebackup?
проверка наличия файла в каталоге дампов?

Aborigen1020
() автор топика
Ответ на: комментарий от Aborigen1020

проверка результата работы pg_basebackup

this, у вас там pg_basebackup может падает с ошибкой типа «не могу скачать wal, они уже удалены», а вы и не в курсе.

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

если pg basebackup валится, он же делает об этом запись в логе? в конструкции

.... pg_basebackup ..... | pigz > $dump 
здесь же не проверить код выхода basebackup? у меня код возврата всегда 0, пишется в файл все нормально

Aborigen1020
() автор топика
Ответ на: комментарий от Aborigen1020

вот в логе есть поиск неактуального wal

2021-08-18 20:44:27.445 MSK [6558] user@[н/д] ОШИБКА:  запрошенный сегмент WAL 000000010000194900000069 уже удалён

а вот в архиве есть wal-ы (в отличии от ситуации, когда их там вообще ни 1)

-rw------- postgres/postgres       8192 2021-08-18 20:37 global/pg_control
-rw------- postgres/postgres          0 2021-08-18 20:40 pg_wal/archive_status/000000010000194900000068.done
-rw------- postgres/postgres   16777216 2021-08-18 20:32 pg_wal/000000010000194900000069
-rw------- postgres/postgres          0 2021-08-18 20:40 pg_wal/archive_status/000000010000194900000069.done

Aborigen1020
() автор топика
Ответ на: комментарий от Aborigen1020

здесь же не проверить код выхода basebackup?

Зависит от shell в котором выполняется этот скрипт, в bash — можно, смотрите -o pipefail

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

pipefail проверил, классная штука, раньше изголялся как мог, отслеживая коды завершения

А по теме, ощущение что своевременно не запускался pg_archivecleanup,а после того, как это обнаружилось (каталог с валами по 70гб), старые валы затерлись, и теперь их найти уже нельзя. Как-то можно увидеть, какие метки времени wal входят в «историю» для бэкапа?

Aborigen1020
() автор топика
Ответ на: комментарий от Aborigen1020

Не понятно причём тут pg_archivecleanup. WAL файлы в каталоге базы в подкаталоге pg_wal/ чистит сам postgres, удалять их там руками или через pg_archivecleanup ни в коем случае нельзя, это всё сломает.

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

все сломает

Руками конечно чистить нельзя
А archivecleanup нужно запускать для каталога, где они хранятся, иначе никакого места не хватит держать валы за все время жизни базы.

а вот у нас есть подробности с места событий:

pg_basebackup: начинается базовое резервное копирование, ожидается завершение контрольной точки
pg_basebackup: контрольная точка завершена
pg_basebackup: стартовая точка в журнале предзаписи: 198E/BC009E28 на линии времени 1
pg_basebackup: не удалось получить конечную позицию в журнале предзаписи с сервера: ОШИБКА:  запрошенный сегмент WAL 000000010000198E000000BC уже удалён

А файлы есть, права есть

└─ # ls /waldir/000000010000198E000000BC* -lh
-rwxrwxrwx 1 1026 users  252 авг 22 20:47 /waldir/000000010000198E000000BC.00009E28.backup.gz
-rwxrwxrwx 1 1026 users 2,7M авг 22 20:32 /waldir/000000010000198E000000BC.gz

Опять хочется вернуться к списку файлов WAL, которые требуются на текущий момент в бэкапе, как это глянуть?

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

У меня постгрес сам удаляет wal-файлы. Смотрите настройки. Или какие-то долгоживущие транзакции, либо как раз потому-что они не забэкаплены, поэтому postgres не удаляет старые WAL. Включен ли archive_mode, какая команда задана в archive_command? Может она не корректно отрабатывает?

Viper
()
Последнее исправление: Viper (всего исправлений: 2)

почему не поставить backup tool, которая сделает все за тебя?
pg_probackup, pgbackrest

uspen ★★★★★
()
Последнее исправление: uspen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.