На PostgreSQL v9.0 працює система архівування WAL. Таким чином, WAL зберігає регулярно архівовані файли (коли створено 3 WAL або якщо WAL старше 15 хвилин).
Тепер я додаю бінарний пакунок каталогу PG_DATA (виключаючи піддіректорію pg_xlog). Для цього я виконую pg_start_backup(),
двійкову копію та a pg_stop_backup()
.
Я думаю, що я досить добре розумію, що роблять pg_start_backup та pg_stop_backup, перший робить контрольну точку, а останній гарантує, що останній файл WAL архівується.
З офіційної документації видно, що для копії двійкових даних ми повинні:
Виконайте резервне копіювання, використовуючи будь-який зручний інструмент резервного копіювання файлової системи, наприклад tar або cpio (не pg_dump чи pg_dumpall). При цьому не потрібно ні бажано зупиняти нормальну роботу бази даних, поки ви це робите.
Тож я зовсім здивований. Це означає, що контрольна точка може бути виконана під час виготовлення копії. Я побачив багато документації, в якій сказано, що команда копіювання повинна дозволяти змінювати дані під час виконання копії, я добре з цим, просто питання про необхідний інструмент. Але моє запитання полягає в тому, як postgreSQL буде обробляти відновлення вмістом pg_data, що містить деякі непослідовні файли (деякі - до контрольної точки, інші - після)?
Після відтворення журналів транзакцій Postgresql зможе привести всі ці файли в потрібний стан? Я бачив, що створювати таблиці та операції падіння небезпечні під час виконання резервного копіювання. Чи немає небезпечних операцій, таких як вакуумні команди? Чи призупиняє pg_backup вакуумні операції? Чи потрібно зробити копію глобального / pg_control-файла наприкінці початку процесу бінарної копії? Чи потрібно використовувати файлову систему з підтримкою знімка (як, наприклад, xfs-freeze) для швидшого відновлення?
Я бачив, що аварія сценарію резервного копіювання не запустить файл pg_stop_backup автоматично, тому є ймовірність, що мій стан резервного копіювання живе довго (поки мої нагіоси не зателефонують комусь, щоб виправити pg_stop_backup ()). Тож якщо в PostgreSQL щось інше між цими двома командами, я хотів би це знати, щоб зрозуміти, який вплив він може мати.
Просвіти мене, будь ласка.