PostgreSQL: постоянное состояние дампа без блокировки
Хорошее резервное копирование базы данных является последовательным, поэтому весь дамп представляет состояние, когда дамп был запущен. Типичной стратегией для этого в MySQL является блокировка таблицы, поэтому никакие дополнительные данные не могут быть записаны во время резервного копирования. Но блокировка базы данных - плохой пользовательский опыт (медленные ответы или даже тайм-ауты, если дамп занимает много времени). Поэтому мне интересно, есть ли у Postgres метод создания последовательных резервных копий без блокировки таблиц.
(Моя текущая стратегия резервного копирования с MySQL состоит в том, чтобы иметь подчиненное устройство только для резервных копий, поэтому ведущий может продолжать обслуживать запросы пользователей, в то время как я могу выполнять последовательный дамп. Но это приводит к другим точкам сбоя, например, репликация может прерваться)
2 ответа
Блокировка и блокировка это две разные вещи. Некоторые блокировки вообще не вызывают никаких проблем, и вы можете использовать базу данных как обычно (блокировка общего доступа), в то время как другие блокировки оказывают существенное влияние и останавливают ваш бизнес.
Самый простой способ сделать резервную копию базы данных PostgreSQL - это pg_dump. Ежедневно мы создаем резервные копии многотабайтной базы данных, обрабатывая в рабочие часы около 2500 т / с.
Не сравнивайте PostgreSQL с MySQL, двумя очень разными базами данных. Многие трудно исправить проблемы в MySQL очень просты в PostgreSQL. Создание постоянных резервных копий - одна из таких вещей.
Вам не нужен раб, чтобы сделать резервную копию. Это удобно, но не нужно.
Запуск PostgreSQL через ZFS и создание мгновенного снимка должны решить эту проблему.
Конечно, у этого снимка будет грязный журнал транзакций, поэтому вам нужно будет перенести снимок в клон (записываемый снимок), затем запустить отдельный экземпляр PostgreSQL для очистки / воспроизведения журналов, а затем создать дамп из второго экземпляра. Наконец, вы должны закрыть 2-й экземпляр сервера базы данных и удалить клон.
Если у вас недостаточно ОЗУ для запуска двух экземпляров PostgreSQL на производственном сервере, вы можете перенести снимок базы данных на вторичный сервер (с помощью zfs send, zfs receive) и создать там дамп.