В этой статье мы рассмотрим процессы резервного копирования и восстановления данных в PostgreSQL, обсудим различные стратегии и методы, которые позволят обеспечить надежность и доступность ваших ценных информационных ресурсов.
Независимо от того, являетесь ли вы администратором баз данных, разработчиком или просто интересуетесь темой безопасности данных, эта статья поможет вам понять, как справиться с резервным копированием и восстановлением данных в PostgreSQL.
О том, что такое PostgreSQL, мы уже рассказывали в другом нашем руководстве.
Дамп PostgreSQL (также известный как «резервная копия» или «дамп базы данных») – это бинарный или текстовый файл, который содержит полную или частичную информацию из базы данных PostgreSQL.
Этот файл создается с целью резервного копирования данных и может быть использован для восстановления базы данных в случае сбоев, потери данных или для миграции данных между различными серверами PostgreSQL.
Дамп PostgreSQL включает в себя структуру базы данных (таблицы, индексы, представления, функции и другие объекты) и данные, хранящиеся в этой базе. Простыми словами, он представляет собой снимок состояния базы данных на момент создания дампа.
Дампы PostgreSQL играют важную роль в обеспечении безопасности данных, так как они позволяют восстановить базу данных после потери или повреждения данных, а также при выполнении операций обновления ПО или миграции данных. Они являются важным инструментом для администраторов баз данных и разработчиков, работающих с PostgreSQL.
Для работы с базами данных вам может понадобиться подходящий сервер, который сможет вместить в себя всю необходимую информацию.
RU-CENTER предлагает аренду мощных виртуальных серверов на Linux. Наши серверы оснащены SSD-дисками и используют аппаратную виртуализацию KVM для обеспечения максимальной производительности и надежности.
Кроме того, наши решения масштабируются вместе с вашим бизнесом. Вы можете легко управлять ресурсами сервера в зависимости от роста и потребностей вашей компании.
Доверьтесь нам для обеспечения надежной и масштабируемой инфраструктуры вашим проектам.
Создание резервных копий данных в PostgreSQL – это важная процедура для обеспечения безопасности данных и возможности восстановления в случае сбоев или потери информации.
Один из наиболее распространенных способов создания резервных копий в PostgreSQL – это использование утилиты «pg_dump».
Утилита «pg_dump» позволяет пользователям создавать резервные копии данных одной конкретной базы данных PostgreSQL.
Для этого необходимо выполнить следующие шаги:
Выбор между текстовым скриптом и бинарным архивом зависит от конкретных потребностей и целей резервного копирования.
Скрипт. Хорошо подходит, если вы планируете восстановить базу данных на сервере PostgreSQL и вам важно иметь читаемый и изменяемый текстовый файл. Этот способ особенно удобен для миграции данных между серверами PostgreSQL.
Восстановление базы данных с помощью скрипта можно реализовать несколькими способами:
Вы можете открыть консольный клиент PostgreSQL, подключиться к нужной базе данных и выполнить SQL-скрипт с помощью команды:
\i путь-к-скрипту
Она позволит восстановить базу данных, используя интерактивную среду командной строки PostgreSQL.
Вы также можете восстановить базу данных, используя команду «psql» из командной строки. Для этого нужно указать имя базы данных и путь к SQL-скрипту:
psql имяБД < SQL-скрипт-postgresql
Этот метод подходит для автоматизации процесса восстановления базы данных из скрипта и может быть использован в планировщиках задач.
Архив. Подходит, если вы хотите перенести данные на другую платформу, так как бинарные архивы могут быть перенесены между разными операционными системами.
Восстановления БД с помощью архива реализуется утилитой «pg_restore». Она предоставляет более гибкие настройки восстановления.
Синтаксис pg_dump
pg_dump [параметры-для-подключения] [параметры-дампа] [имяБД] > [каталог-для-резервной-копии]
Параметры для подключения
Параметр |
Значение |
`-d [имя]` или `--dbname=[имя]` |
Позволяют указать имя базы данных. |
`-h [имя]` или `--host=[имя]` |
Указывает имя сервера (по умолчанию используется значение переменной окружения PGHOST). |
`-p [порт]` или `--port=[порт]` |
Используется для обозначения порта (по умолчанию используется значение переменной окружения PGPORT). |
`-U [имя]` или `--username=[имя]` |
Позволяет указать имя пользователя. |
Параметры для создания резервной копии с использованием pg_dump
Используя эти параметры, вы можете настроить процесс создания резервной копии PostgreSQL базы данных в соответствии с вашими требованиями:
Параметр |
Значение |
`-a` или `--data-only` |
Сохраняет только данные, не включая в дамп структуру базы данных. Если использовать этот параметр, связи между таблицами также не сохраняются. |
`-b` или `--blobs` |
По умолчанию добавляет в дамп большие объекты (BLOB). |
`-B` или `--no-blobs` |
Не сохраняет большие объекты в дампе. |
`-c` или `--clean` |
Добавляет команды DROP в SQL-скрипт, что может пригодиться, если в базе данных есть объекты с одинаковыми именами. Применим только к SQL-скриптам. |
`-C` или `--create` |
Добавляет команды для создания базы данных и подключения к ней в SQL-скрипт. Применимо только к SQL-скриптам. |
`-E кодировка` или `--encoding=кодировка` |
Устанавливает определенную кодировку для дампа. |
`-f [каталог]` или `--file=[каталог]` |
Задает каталог, в который будет сохранен дамп. |
`-F [формат]` или `--format=[формат]` |
Определяет формат дампа. В PostgreSQL можно выбрать формат из следующих значений: plain (SQL скрипт, значение по умолчанию), custom (архив), directory (каталог), tar (формат .tar). |
`-j [количество]` или `--jobs=[количество]` |
Позволяет выполнить утилиту в многопоточном режиме с указанным количеством потоков. |
`-n [схема]` или `--schema=[схема]` |
Сохраняет схемы, которые соответствуют указанному шаблону. |
`-N [схема]` или `--exclude-schema=[схема]` |
Исключает схемы, соответствующие указанному шаблону. |
`-o` или `--oids` |
Сохраняет OID (Object ID) в дампе. |
`-O` или `--no-owner` |
Не добавляет в дамп команды, которые связаны с установкой владельцев объектов. |
`-s` или `--schema-only` |
Сохраняет только схемы, без данных. |
`-t [схема]` или `--table=[схема]` |
Сохраняет только таблицы, которые соответствуют указанному шаблону. |
`-T [схема]` или `--exclude-table=[схема]` |
Исключает таблицы, которые соответствуют указанному шаблону. |
`-x` или `--no-privileges` или `--no-acl` |
Не сохраняет права доступа. |
`-Z [0..9]` или `--compress=[0..9]` |
Выбирает уровень сжатия (где 0 – не сжимать, а 9 – максимальное сжатие). |
Важно отметить, что утилита pg_dump создает резервную копию только одной конкретной базы данных в PostgreSQL.
Если в вашей системе существуют глобальные объекты PostgreSQL (например, роли или таблицы), которые принадлежат всей системе, а не конкретной базе данных, то для их сохранения и восстановления необходимо использовать утилиту «pg_dumpall», о которой мы расскажем далее.
Утилита «pg_dumpall» представляет собой инструмент для создания резервной копии всего кластера PostgreSQL, включая глобальные объекты, роли пользователей, базы данных, схемы, таблицы и другие компоненты.
Результат работы этой утилиты – SQL-скрипт, который можно использовать для восстановления всего кластера PostgreSQL на другом сервере или восстановления отдельных глобальных объектов.
Важно! Для выполнения pg_basebackup требуются соответствующие права. Вы должны быть быть суперпользователем или иметь право REPLICATION.
Синтаксис pg_dumpall
pg_dumpall [параметры-для-подключения] [параметры-дампа] > [каталог-для-резервной-копии]
Параметры для подключения
Параметр |
Значение |
`-d [строка-подключения]` или `--dbname=[строка-подключения]` |
Позволяет задать строку подключения к серверу PostgreSQL. |
`-h [имя]` или `--host=[имя]` |
Устанавливает имя сервера PostgreSQL. По умолчанию используется значение переменной окружения «PGHOST». |
`-p [порт]` или `--port=[порт]` |
Задает порт, на котором работает PostgreSQL. По умолчанию, используется значение переменной окружения «PGPORT». |
`-U [имя]` или `--username=[имя]` |
Устанавливает имя пользователя для подключения к PostgreSQL. |
`-l [имя]` или `--database=[имя]` |
Позволяет выбрать конкретную базу данных, через которую будут загружены глобальные объекты. Этот параметр полезен, если в вашем кластере существует несколько баз данных и вы хотите ограничить дамп определенной базой. |
Параметры создания резервной копии
Параметр |
Значение |
`-a` или `--data-only` |
Сохраняет только данные, исключая создание структуры таблиц и других объектов. Полезно, если вам нужно только содержимое таблиц, а не схема и структура. |
`-c` или `--clean` |
Добавляет команды «DROP» перед командами «CREATE» в SQL-скрипте. Это может быть полезно, если в вашем кластере есть объекты с одинаковыми именами. |
`-f [catalog]` или `--file=[catalog]` |
Задает каталог, в который будет сохранен SQL-скрипт. |
`-g` или `--globals-only` |
Сохраняет только глобальные объекты, такие как роли, табличные пространства и т. д. |
`-o` или `--oids` |
Сохраняет OID (Object ID) в дампе, если они используются в вашей базе данных. |
`-O` или `--no-owner` |
Исключает из дампа команды, которые связаны с установкой владельцев объектов. |
`-r` или `--roles-only` |
Сохраняет только роли пользователей. |
`-s` или `--schema-only` |
Сохраняет только схемы, без данных. |
`-t` или `--tablespaces-only` |
Сохраняет только табличные пространства. |
`-x` или `--no-privileges` или `--no-acl` |
Не сохраняет права доступа (ACL) к объектам. |
Таким образом, утилита «pg_dumpall» предоставляет более широкие возможности для создания резервных копий и восстановления кластера PostgreSQL в сравнении с pg_dump, так как она охватывает все глобальные объекты и базы данных в кластере.
«pg_basebackup» – это утилита в PostgreSQL, которая предназначена для создания резервных копий всего инстанса или кластера баз данных.
С её помощью вы получите бинарный дамп, который включает в себя все данные, структуру баз данных и журналы транзакций. Всё это делает его полной копией кластера в момент создания дампа.
Важно! Процесс нельзя настроить или нацелить на конкретные компоненты кластера – вы в любом случае сохраните весь инстанс целиком.
Синтаксис pg_basebackup
pg_basebackup [параметры-для-подключения] [параметры-создания-резервной-копии]
Параметры для подключения
Параметр |
Значение |
`-d [строка-подключения]` или `--dbname=[строка-подключения]` |
Позволяет задать строку подключения к серверу PostgreSQL. |
`-h [имя]` или `--host=[имя]` |
Устанавливает имя сервера PostgreSQL. По умолчанию используется значение переменной окружения «PGHOST». |
`-p [порт]` или `--port=[порт]` |
Задает порт, на котором работает PostgreSQL. По умолчанию, используется значение переменной окружения «PGPORT». |
`-U [имя]` или `--username=[имя]` |
Устанавливает имя пользователя для подключения к PostgreSQL. |
Параметры создания резервной копии
Параметр |
Значение |
`-D [каталог]` или `--pgdata=[каталог]` |
Определяет каталог, в который будет сохранен бинарный дамп. |
`-F [формат]` или `--format=[формат]` |
Определяет формат дампа, который может иметь значения: plain (обычные файлы), tar (формат .tar). |
`-r [скорость]` или `--max-rate=[скорость]` |
Устанавливает максимальную скорость передачи данных в Кб/с. Это может быть полезно для управления загрузкой системы во время создания дампа. |
`-Z [0..9]` или `--compress=[0..9]` |
Выбирает уровень сжатия (где 0 – не сжимать, а 9 – максимальное сжатие). |
Утилита «pg_basebackup» особенно полезна для создания резервных копий и репликации PostgreSQL кластеров.
Важно! Создание бинарных дампов может занять значительное количество ресурсов и времени, особенно для больших кластеров.
«Pg_restore» – это утилита PostgreSQL, которая используется для восстановления баз данных из резервных копий, которые были созданы с использованием pg_dump.
Она работает с дампами в архивном формате и предоставляет множество параметров для настройки процесса восстановления.
Синтаксис pg_restore
pg_restore [параметры-для-подключения] [параметры-восстановления] [дампБД]
Параметры для подключения
Параметр |
Значение |
`-h [имя]` или `--host=[имя]` |
Устанавливает имя сервера PostgreSQL. По умолчанию используется значение переменной окружения «PGHOST». |
`-p [порт]` или `--port=[порт]` |
Задает порт, на котором работает PostgreSQL. По умолчанию, используется значение переменной окружения «PGPORT». |
`-U [имя]` или `--username=[имя]` |
Устанавливает имя пользователя для подключения к PostgreSQL. |
`-w` или `--no-password` |
Отключает запрос пароля при подключении. |
`-W` или `--password` |
Принудительно включает запрос пароля при подключении. |
`--role=[имя]` |
Устанавливает имя роли, от имени которой будет выполняться восстановление. |
Параметры восстановления
Параметр |
Значение |
`-a` или `--data-only` |
Восстанавливает только данные, исключая структуру базы данных. |
`-c` или `--clean` |
Удаляет одноименные объекты перед восстановлением. |
`-C` или `--create` |
Создает базу данных перед восстановлением. |
`-d [имя]` или `--dbname=[имя]` |
Подключается к указанной базе данных и восстанавливает данные в нее. |
`-e` или `--exit-on-error` |
Завершает восстановление в случае ошибки. |
`-j [количество-потоков]` или `--jobs=[количество-потоков]` |
Осуществляет восстановление в многопоточном режиме. |
`-n [схема]` или `--schema=[схема]` |
Восстанавливает объекты только из указанной схемы. |
`-N [схема]` или `--exclude-schema=[схема]` |
Исключает объекты из указанной схемы. |
`-O` или `--no-owner` |
Исключает из дампа команды, которые связаны с установкой владельцев объектов. |
`-s` или `--schema-only` |
Восстанавливает только схему, без данных. |
`-t [таблица]` или `--table=[таблица]` |
Восстанавливает только указанную таблицу. |
`-x` или `--no-privileges` или `--no-acl` |
Не сохраняет права доступа (ACL) к объектам. |
Таким образом, pg_restore предоставляет гибкие настройки для восстановления баз данных из резервных копий, что позволяет администраторам точно настроить процесс восстановления в соответствии с требованиями исходной базы данных и конфигурации.
«WAL-G» – это полезная сторонняя утилита, которая предназначена для управления резервными копиями и журналами транзакций PostgreSQL.
Она предоставляет возможность создавать бэкапы и восстанавливать базы данных PostgreSQL, а также управлять журналами WAL (Write-Ahead Logging). WAL-G также поддерживает работу с различными типами СУБД.
В нашем руководстве мы настроим непрерывное резервное копирование PostgreSQL на облачный сервис Amazon S3 с помощью WAL-G.
Для этого скачайте последнюю версию WAL-G с GitHub и распакуйте ее:
wget https://github.com/wal-g/wal-g/releases/download/v1.1/wal-g-pg-ubuntu-22.04-amd64.tar.gz
tar -zxvf wal-g-pg-ubuntu-22.04-amd64.tar.gz -C /usr/local/bin/wal-g
Теперь WAL-G установлен и готов к использованию.
Чтобы настроить WAL-G для работы с Amazon S3, вы должны создать конфигурационный файл.
В приведенном ниже примере используется файл «.walg.json», который содержит следующие настройки:
cat > /var/lib/postgresql/.walg.json << EOF
{
"AWS_ENDPOINT": "https://s3.nic.ru",
"WALG_S3_PREFIX": "s3://имя-бакета",
"AWS_ACCESS_KEY_ID": "ключ-доступа к хранилищу",
"AWS_SECRET_ACCESS_KEY": "секретный-ключ",
"WALG_COMPRESSION_METHOD": "алгоритм-сжатия",
"WALG_DELTA_MAX_STEPS": "количество-дельт-бэкапов",
"PGDATA": "путь-к-данным-БД",
"PGHOST": "имя-хоста"
}
EOF
Где:
Важно! Дельта-бэкап – это метод резервного копирования данных, который фокусируется на сохранении только изменений (дельт) между двумя состояниями данных, вместо копирования всей информации каждый раз. Это позволяет снизить объем хранимых резервных копий, сэкономить пространство на диске и время, которое тратится на создание и восстановление резервных копий.
Далее введите:
chown postgres: /var/lib/postgresql/.walg.json
Эта команда изменит владельца и группу файла «.walg.json» на «postgres». При этом права доступа к файлу останутся без изменений.
Для создания резервных копий PostgreSQL с использованием WAL-G вы можете выполнить следующую команду от имени пользователя PostgreSQL:
su postgres -c '/usr/local/bin/wal-g/wal-g backup_push [путь-к-данным-БД] или [путь-к-PGDATA]
Эта команда создаст бэкап и передаст его в хранилище Amazon S3 с использованием настроек из вашего «.walg.json» файла.
Важно! WAL-G предоставляет и другие функции: например, восстановление баз данных из бэкапов, архивация и удаление старых бэкапов, а также управление журналами WAL. Подробнее о его функциональности и командах можно узнать из официальной документации WAL-G.
«pgAdmin» – это популярная утилита с графическим интерфейсом для администрирования и управления базами данных PostgreSQL. В том числе она позволяет создавать дампы.
Чтобы с
General:
В «Name» укажите имя вашего сервера.
Connection:
Важно! Отметьте «Save Password», если вы хотите сохранить пароль для автоматического входа. В целях безопасности, мы не рекомендуем использовать эту опцию на общих компьютерах.
Готово! Вы успешно создали дамп PostgreSQL.
В этом руководстве вы узнали, как создавать резервные копии в системе управления базами данных PostgreSQL.
Следуя нашим рекомендациям, вы сможете обеспечить безопасность и надежность ваших данных, а также выполнить быстрое восстановление в случае сбоев или потери информации.
Помните, что создание регулярных резервных копий – это неотъемлемая часть стратегии обеспечения доступности и целостности данных.