PostgreSQL - Як увімкнути архівування WAL журналів - archive_mode

  • Останнє оновлення: 3 Квітня 2024 р.
  • Перегляди: 19
  • Автор: Адмін
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 додати файл конфігурації - include_if_exists
Postgresql - Автоматичний запуск бази даних