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 файлы физически есть, лежат и их никто не трогает. Что может быть\куда посмотреть еще?

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

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

Aborigen1020 ()
Ответ на: комментарий от 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 ()
Ответ на: комментарий от 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)