Як PostgreSQL обробляє контрольні точки посеред резервної копії, підтримуваної WAL?


17

На 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 щось інше між цими двома командами, я хотів би це знати, щоб зрозуміти, який вплив він може мати.

Просвіти мене, будь ласка.

Відповіді:


7

Ти запитав:

як postgreSQL буде обробляти відновлення вмістом pg_data, що містить деякі непослідовні файли.

pg_start_backup()переконайтеся, що файл даних принаймні такий новий, як контрольний пункт. Після відновлення застосовуються журнали.

Якщо дані старі, журнал оновить їх.

Якщо дані нові, журнал матиме однаковий вміст. Немає шкоди писати це знову.

Дані ніколи не новіші, ніж журнал, тому що журнали записуються вперед (WAL).


Ти запитав:

... xfs-freeze...

xfs-freezeце не схоже pg_start_backup(), це не робить знімок. Для цього вам потрібен менеджер томів.


Ти запитав:

... навіщо створювати простір таблиць і створювати заяви бази даних не підтримуються, якщо WAL може відтворити все?

Це підтримується, лише якась маленька готча. Дивіться http://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5. Коваджі

Команди CREATE TABLESPACE заносяться в WAL з буквальним абсолютним шляхом, і тому вони будуть відтворені у вигляді творінь таблиці з тим самим абсолютним шляхом. Це може бути небажаним, якщо журнал відтворюється на іншій машині. Це може бути небезпечно, навіть якщо журнал відтворюється на одній машині, але в новий каталог даних: повтор все одно буде перезаписати вміст вихідного простору таблиць. Щоб уникнути можливих подібних випадків, найкращою практикою є використання нового резервного резервного копіювання після створення або випадання табличних просторів.


про xfs-freeze Я знаю, що це залежить також від диспетчера томів, це було лише частиною процедури знімків. але ми впевнені, що відновлення WAL добре впорається з повторенням журналів перед вакуумною таблицею на бінарній таблиці після вакууму? і чи важливий вміст глобального / pg_control? чому створити простір таблиць і створити заяви бази даних не підтримуються, якщо WAL може відтворити все?
regilero

CREATE TABLESPACEпрацює. див. оновлену відповідь. Я не впевнений VACUUM, але не можу уявити, чому це не стане.
J-16 SDiZ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.