На PostgreSQL v9.0 у меня работает система архивации WAL. Таким образом, WAL регулярно архивирует файлы (когда создается 3 WAL или если WAL старше 15 минут).
Теперь я добавляю двоичный пакет каталога PG_DATA (исключая подкаталог pg_xlog). Для этого я выполнить pg_start_backup(),
двоичную копию, а pg_stop_backup()
.
Мне кажется, я хорошо понимаю, что делают pg_start_backup и pg_stop_backup: первый создает контрольную точку, а последний гарантирует, что последний файл WAL заархивирован.
Из официальной документации видно, что для копии двоичных данных мы должны:
Выполните резервное копирование, используя любой удобный инструмент для резервного копирования файловой системы, такой как tar или cpio (не pg_dump или pg_dumpall). Нет необходимости или нежелательно останавливать нормальную работу базы данных, пока вы делаете это.
Так что я довольно озадачен. Это означает, что контрольная точка может быть выполнена, пока мы делаем копию. Я видел много документации, утверждающей, что команда copy должна разрешать изменения данных при выполнении копирования, я в порядке с этим, просто вопрос поиска правильного инструмента. Но мой вопрос заключается в том, как postgreSQL будет обрабатывать восстановление с содержимым pg_data, содержащим некоторые файлы, которые являются несовместимыми (некоторые до контрольной точки, некоторые после)?
При воспроизведении журналов транзакций Postgresql сможет перевести все эти файлы в правильное состояние? Я видел, что создание таблиц и операции удаления опасны во время выполнения резервного копирования. Разве не существует таких опасных операций, как вакуумные команды? Pg_backup приостанавливает вакуумные операции? Должен ли я сделать копию файла global / pg_control в конце начала двоичного процесса копирования? Должен ли я использовать файловую систему с поддержкой моментальных снимков (например, с xfs-freeze), чтобы ускорить процесс восстановления?
Я видел, что сбой сценария резервного копирования не запускает pg_stop_backup автоматически, поэтому есть вероятность, что мое состояние резервного копирования будет действовать в течение длительного времени (пока мои nagios не позвонят кому-нибудь, чтобы починить pg_stop_backup ()). Так что, если что-то в PostgreSQL отличается между этими двумя командами, я бы хотел это знать, чтобы понять, какое влияние это может оказать.
Просвети меня, пожалуйста.