PostgreSQL. Содержит ли один архивный файл информацию только для конкретной базы данных в кластере или для всего кластера?
Примечание: этот вопрос касается PostgreSQL версии 13.
На моем сервере Ubuntu у меня есть кластер с именем
main
в котором есть 2 базы данных (первая для фруктовой компании, а вторая для автомобильной).
Вот мои настройки файла postgresql.conf:
wal_level = replica
archive_mode = on
archive_command = 'pxz --compress --keep --force -6 --to-stdout --quiet %p > /datadrive/postgresql/13/wal_archives/%f.xz'
Это создает файлы.xz в
/datadrive/postgresql/13/wal_archives/
как и ожидалось. Например: имя файла может выглядеть так:
0000000100000460000000A4.xz
Теперь мой вопрос относительно этого процесса архивирования следующий:
- Является ли этот конкретный файл.xz архивом всех баз данных в кластере postgresql? т.е. содержит ли этот конкретный файл xz архив как для фруктов, так и для баз данных автомобилей, или он содержит только архив только для одного из них?
- Что такое архивный файл? Это просто один файл WAL или точка архива + файл WAL?
Я прочитал официальную документацию, найденную здесь и здесь, а также посмотрел на большое количество вопросов по stackru и обмену стеками баз данных, и мне так и не удалось получить хорошее понимание концепции архива.
1 ответ
Такой файл называется "сегментом WAL". WAL является сокращением от "журнала упреждающей записи" и представляет собой журнал транзакций, который содержит информацию, необходимую для воспроизведения изменений данных для всего кластера базы данных. Таким образом, он содержит данные для всех баз данных в кластере.
WAL - это бесконечный поток только для добавления, который разбивается на сегменты фиксированного размера. Архив WAL - это не более чем точная копия сегмента WAL.
Архивы WAL используются вместе с базовой резервной копией для выполнения восстановления на определенный момент времени. Другие варианты использования файлов WAL - это восстановление после сбоя и репликация, но для этого не требуются архивные сегменты WAL.