Файловые резервные копии бесполезны для баз данных. Если вы загрузите запущенный каталог данных PostgreSQL, вы получите поврежденную кучу файлов, которые не будут приниматься никаким разумным восстановлением. Резервные копии баз данных нуждаются в собственных инструментах, и, что более важно, они нуждаются в своевременном восстановлении.
Настройка архива WAL
Архивные копии WAL завершили сегменты WAL в безопасном каталоге. Без этого PostgreSQL перерабатывает старые файлы WAL, и вы теряете возможность воспроизводить их после определенного момента.
Сначала создайте резервные каталоги:
| |
Откройте файл конфигурации PostgreSQL:
| |
Добавить или изменить эти настройки.
| |
Перезагрузите PostgreSQL, чтобы применить изменения:
| |
Автоматизация ежедневных резервных копий
Ручные резервные копии хороши для тестирования. Производственные системы нуждаются в автоматизированных, запланированных резервных копиях. Системные таймеры являются надежной альтернативой cron, со встроенной логистикой и устойчивостью при перезагрузке.
Резервное копирование PostgreSQL и Timer
Сначала создайте резервный сценарий:
| |
Добавьте следующий сценарий:
| |
Сделайте его исполняемым:
| |
Создание системного сервисного блока:
| |
Определите службу для работы в качестве пользователя Postgres с низким приоритетом ввода/вывода:
| |
Создайте блок таймера:
| |
Расписание его работы ежедневно в 01:00 с сохранением включено:
| |
Настройка Persistent=true гарантирует, что резервная копия будет запущена при следующей возможности, если система была отключена в запланированное время.
Включите и запустите таймер:
| |
Восстановление к точному второму
Восстановление PITR следует строгой последовательности: остановите сервер, замените каталог данных базовым резервным копированием, настройте параметры восстановления и запустите сервер. PostgreSQL воспроизводит архивированные сегменты WAL до тех пор, пока не достигнет целевого времени, а затем переходит в нормальное состояние.
Остановить PostgreSQL:
| |
Уберите поврежденный каталог данных с дороги. Не удаляйте его, если вам нужно исследовать:
| |
Создайте новый каталог данных и извлеките в него резервную копию базы:
| |
Создайте файл recovery.signal. Это говорит PostgreSQL ввести режим восстановления при запуске:
| |
Откройте конфигурацию PostgreSQL, чтобы добавить параметры восстановления:
| |
Добавьте эти три строки в конце файла. Замените метку времени на безопасное время восстановления:
| |
Запустите PostgreSQL. Он автоматически входит в режим восстановления:
| |
Очистите поврежденный каталог данных, как только вы будете удовлетворены восстановлением:
| |
Резервное копирование MariaDB и Timer
Создайте сценарий резервного копирования MariaDB:
| |
Добавьте следующий сценарий:
| |
Сделайте его исполняемым:
| |
Создайте системный сервис:
| |
Определите его как root (для резервного копирования mariadb необходим доступ файловой системы к каталогу данных):
| |
Создайте таймер:
| |
Расписание в 02:00 ежедневно, через час после резервной копии PostgreSQL, чтобы избежать разногласий по поводу ввода/вывода, если оба работают на одном хосте:
| |
Включите и запустите таймер:
| |
Убедитесь, что оба таймера активны:
| |
Вы должны увидеть оба перечислены с их следующими триггерами:
| |
Включить Binary Logging
Бинарная регистрация может быть включена в вашей системе. Чтобы обеспечить правильные настройки для PITR, создайте специальный файл конфигурации.
Откройте новый файл конфигурации для настроек резервного копирования:
| |
Добавить следующую конфигурацию:
| |
Перезапустить MariaDB для применения:
| |
Создайте резервный каталог:
| |
Восстановление к точному второму
MariaDB PITR представляет собой двухфазный процесс. Во-первых, восстановить резервную копию базы, чтобы вернуться к точке резервной копии во времени. Затем переиграйте двоичные журналы до метки времени цели, чтобы восстановить все изменения, внесенные между резервной копией и катастрофой.
Остановить MariaDB:
| |
Переместите текущий (испорченный) каталог данных в сторону:
| |
Восстановите резервную копию базы с помощью --copy-back:
| |
Исправить право собственности на восстановленный каталог данных. MariaDB требует, чтобы пользователь mysql владел всеми файлами:
| |
Запустите MariaDB с восстановления резервной копии базы:
| |
MariaDB PITR полностью готов. Резервное копирование базы восстановило. Очистите старый каталог данных:
| |
Производственные соображения
Прохождение выше использует агрессивные настройки, чтобы сделать демонстрацию быстрой. Производственные среды требуют различной настройки.
archive_timeout: Мы использовали 60 секунд для тестирования. В производстве установите это на 300 (5 минут) или 600 (10 минут). Более низкие значения генерируют больше файлов WAL и потребляют больше дискового пространства, но уменьшают максимальное окно потери данных. 5-минутный тайм-аут означает, что вы теряете максимум 5 минут транзакций, если сервер и архивный диск WAL выходят из строя одновременно.
Место хранения резервного копирования: Храните резервные копии на физически отдельном диске или удаленном сервере. Резервная копия, сидящая на том же диске, что и каталог данных, умирает вместе с ней. Монтажи NFS, S3-совместимое хранилище объектов или выделенный сервер резервного копирования через rsync/scp - все это жизнеспособные варианты.
Тест восстанавливается регулярно. Запланируйте ежемесячный тест восстановления на постановочном сервере. Резервная копия, которую вы никогда не тестировали, не является резервной копией. Автоматизируйте проверку восстановления, если это возможно: восстановите, запустите запрос, проверьте количество строк, сорвитесь.
Мониторинг отставания архива WAL для PostgreSQL. Если команда архива выходит из строя, сегменты WAL накапливаются в pg wal/ и в конечном итоге заполняют диск. Контролируйте колонки last_archived_wal и last_failed_wal из pg_stat_archiver. Для полного стека мониторинга см. мониторинг PostgreSQL с Prometheus и Grafana.
Использование диска-binlog MariaDB: Двоичные журналы быстро растут в больших базах данных. Установите expire_logs_days, чтобы соответствовать вашему резервному хранению. Если вы храните 7 дней резервных копий, 14 дней блогов дают вам адекватное совпадение. Мониторинг использования диска в /var/lib/mysql/ для файлов binlog и настройка мониторинга MariaDB с Prometheus и Grafana, чтобы улавливать проблемы, прежде чем они обострятся.
Шифрование и разрешения: Файлы резервного копирования содержат все ваши данные. Установите 700 разрешений каталогов, принадлежащих пользователю базы данных. Для наружного хранения шифруйте в состоянии покоя. pg_basebackup от PostgreSQL не шифруется изначально, но вы можете использовать gpg или использовать зашифрованную файловую систему. MariaDB поддерживает mariadb-backup резервное копирование --encryp - шифрование со встроенным шифрованием AES.
Завершение
Восстановление производственной базы данных в 3 часа утра является достаточно напряженным процессом без предварительного чтения документации.
Помните, что создание резервных копий - это только половина работы. Регулярные восстановительные испытания, мониторинг и документация завершают надежную стратегию резервного копирования. Когда наступает катастрофа, ваша подготовка определяет, занимает ли восстановление минуты или становится кризисом.
Если вам понравился этот пост, поделитесь им со своими друзьями в социальных сетях, используя кнопки обмена ниже, или просто оставьте комментарий в разделе комментариев. Спасибо.