PostgreSQL - Как включить архивирование WAL журналов - archive_mode

  • Последнее обновление: 3 Апреля 2024 г.
  • Просмотры: 44
  • Автор: Админ
PostgreSQL - Как включить архивирование WAL журналов - archive_mode

Коллеги всем привет.

В сегодняшней статье мы поговорим о том как включить режим архивирования WAL журналов в PostgreSQL.

WAL журналы переводятся как - Write Ahead Log. Включения архивирования wal журналов очень важное действия если вы хотите защитить данные любой критической базы данных. Если сказать простыми словами, то архивирование это процесс создания резервной копии всех транзакций, которые произошли в базе данных, чтобы потом была возможность восстановить базу данных на любой момент времени в случаи серьёзного сбоя.

В PostgreSQL абсолютно любая транзакция которая выполнилась, то сначала она записывается в файл WAL журнал, а затем уже применяется к фактическим файлам данных базы данных. Пока вы продолжаете добавлять и изменять данные в базе данных, файлы WAL продолжают генерироваться. В терминах PostgreSQL копирование сгенерированных WAL журналов называется архивированием, которое в случае чего используется для резервного копирования и восстановления, восстановления на определенный момент времени и репликации базы данных на резервный сервер.

 

Содержание статьи:

  1. Проверка состояния режима архивирования.
  2. Создания директории для архивных WAL журналов.
  3. Включаем режим архивирования.
  4. Перезапускаем базу данных.
  5. Проверка.
  6. Сжатие WAL журналов перед архивацией.

 

1. Проверка состояния режима архивирования.

За архивирования WAL журналов в PostgreSQL отвечает параметр archive_mode. У параметра может быть два значения, либо on, либо off. Чтобы нам проверить включено ли архивирования, мы можем воспользоваться sql запросами.

sql> SHOW archive_mode;

postgresql archive mode

Или

sql> SELECT name, setting FROM pg_settings WHERE name like 'archive%';

postgresql archive mode

Как видим в обоих результатах режим архивирования у нас выключен.


 

2. Создания директории для архивных WAL журналов.

Прежде чем нам включить режим архивирования WAL журналов, то нам нужно для начала создать где-нибудь директорию куда наш PostgreSQL будет помещать WAL журналы. Я обычно создаю эту директорию рядом с директорией где у нас развернута база данных. Директория будет называться pg_wal_archive.

$. mkdir -p /app/postgresql/pg_wal_archive


 

3. Включаем режим архивирования.

После того как мы создали директорию для наших WAL журналов, то теперь мы можем включить режим архивирования на базе данных. За включения режима архивирования в PostgreSQL отвечают два важных параметра, первый параметр называется archive_mode, а второй archive_command

Параметр archive_mode нужно перевести с режима off на on. В параметр archive_command нужно прописать локальную команда которая будет выполняться для архивирования завершенного сегмента WAL журнала. Добавить эти параметры нужно в основной конфигурационный файл который называется postgresql.conf.

archive_mode = on
archive_command = 'cp -i %p /app/postgresql/pg_wal_archive/%f'

Переменные являются статическими, по этому нужно после внесения изменений обязательно перезапустить базу данных.


 

4. Перезапускаем базу данных.

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

$. pg_ctl restart


 

5. Проверка.

После перезапуска базы данных проверяем результат. Первое это выполним sql запрос для проверки параметров архивации.

sql> SELECT name, setting FROM pg_settings WHERE name like 'archive%';

postgresql archive mode

Как видим режим archive_mode имеет значения on, а значит архивирования WAL журналов включено.

 

Второе мы проверим как у нас происходит перенос WAL журналов в нашу директорию которую мы создали.

$. cd /app/postgresql/pg_wal_archive

postgresql archive mode

Как видим WAL журналы успешно переносятся в нашу созданную директорию.


 

6. Сжатие WAL журналов перед архивацией.

Каждый WAL журнал имеет размер 16 мегабайт, и если журналов будет очень много то место на вашем диске быстро закончиться. Мы можем решить эту проблему путем архивирования методом gzip каждого WAL журнала перед тем, как он будет отправлен в нашу директорию. Для того чтобы это сделать нам нужно поменять значения параметра archive_command.

с:

cp -i %p /app/postgresql/pg_wal_archive/%f

на:

gzip < %p > /app/postgresql/pg_wal_archive/%f

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


 

Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.

 

ПОХОЖИЕ СТАТЬИ

PostgreSQL как установить часовый пояс Time Zone
Postgresql - Список пользователей
PostgreSQL изменить порт подключения 5432
PostgreSQL - Как проверить привилегии пользователя