Важным моментом в администрировании любой базы данных является вопрос сохранности данных от воздействия внешних и внутренних факторов: физическая неисправность сервера, взлом БД или ошибка пользователя. Резервное копирование занимает особое место в вопросе сохранности информации. В postgresql это реализуется встроенными и сторонними инструментами, о которых сегодня и пойдет речь.
В postgresql резервное копирование одной конкретной базы данных можно осуществить с помощью pg_dump. Во работы этой утилиты пользователь может обращаться к БД: записывать или читать данные.
Формат дампа пользователь определяет сам. Это может быть архив или скрипт. Скрипт - это текстовый файл с перечнем SQL команд. Восстановление БД с помощью скрипта реализуется несколькими путями:
psql [имя БД] < [SQL скрипт postgresql dump database]
Восстановления БД с помощью архива реализуется утилитой pg_restore.
Что выбрать: скрипт или архив? Зависит от вашей БД и цели резервного копирования. Если вы хотите перенести БД на другую машину в PostgreSQL, то подойдет скрипт. Архивы же устроены таким образом, что их можно переносить на другие платформы. Помимо прочего, восстановление с помощью pg_restore предоставит вам возможность настраивать сам процесс за счет параметров утилиты.
Важно не забывать: pg_dump создает дамп только одного экземпляра БД. При наличии глобальных объектов PostgreSQL необходимо использовать утилиту pg_dumpall, речь о которой пойдет дальше.
Синтаксис
pg_dump [параметры для подключения] [параметры дампа] [имя БД*] > [каталог, куда необходимо сохранить backup postgres database]
* Если не задать имя БД, то вместо него будет использоваться значение переменной окружения PGDATABASE. А если PGDATABASE не присвоено какое-либо значение, то pg_dump воспользуется именем пользователя, инициирующего утилиту.
Параметры для подключения
Параметры создания резервной копии
Pg_dumpall создает бэкап целого кластера или инстанса. Результат работы утилиты - SQL скрипт. Во многих аспектах эта утилита похожа на pg_dump.
Синтаксис
pg_dumpall [параметры для подключения] [параметры дампа] > [каталог, куда необходимо сохранить дамп]
Параметры для подключения
Параметры создания резервной копии
Pg_basebackup - это утилита для создания бэкапа всего инстанса или кластера. Результат работы - дамп в бинарном формате. Сам процесс нельзя настроить: вы сохраняете кластер (инстанс) целиком. В postgresql список пользователей, обладающих правом создания дампа с помощью pg_basebackup, ограничен. Для этого необходимо быть суперпользователем или обладать правом REPLICATION.
Синтаксис
pg_basebackup [параметры для подключения] [параметры создания резервной копии]
Параметры для подключения
Параметры создания резервной копии
dbaas
Pg_restore работает в связке с pg_dump. На вход поступает дамп в архивном формате, созданный с помощью pg_dump. При восстановлении вы можете настраивать различные параметры процесса.
Синтаксис
pg_restore [параметры для подключения] [параметры восстановления] [дамп базы данных]
Параметры для подключения
Параметры восстановления
Wal-g - это сторонняя утилита для выгрузки дампов в хранилища и восстановления БД. Её действие распространяется не только на PostgreSQL, но и на другие СУБД. Wal-g поддерживает работу с несколькими типами хранилищ. Мы сосредоточимся на работе с S3.
Загрузка и установка
Wal-g работает в linux-системах, для работы на Win 10 необходимо использовать сервисы наподобие WSL. Работа с wal-g начинается с github, где расположены файлы утилиты. На вкладке releases размещены версии для различных систем и СУБД. Для установки последней версии wal-g на Ubuntu 20.04 выполняем эти команды:
wget https://github.com/wal-g/wal-g/releases/download/v1.1/wal-g-pg-ubuntu-20.04-amd64.tar.gz
tar -zxvf wal-g-pg-ubuntu-20.04-amd64.tar.gz -C /usr/local/bin/wal-g
Настройка
Для настройки wal-g можно воспользоваться как переменными окружения, так и конфигурационным файлом. Мы создадим конфигурационный файл для хранилища S3 по такому шаблону bash:
cat > /var/lib/postgresql/.walg.json << EOF
{
"AWS_ENDPOINT": "https://s3.timeweb.com",
"WALG_S3_PREFIX": "s3://имя_бакета",
"AWS_ACCESS_KEY_ID": "Ключ доступа к хранилищу (логин)",
"AWS_SECRET_ACCESS_KEY": "Секретный ключ",
"WALG_COMPRESSION_METHOD": "Алгоритм сжатия:brotli, LZ4 или LZMA.",
"WALG_DELTA_MAX_STEPS": "количество дельт*",
"PGDATA": "путь к данным БД",
"PGHOST": "имя хоста"
}
EOF
chown postgres: /var/lib/postgresql/.walg.json #меняем имя владельца скрипта на postgres
*Дельта-бэкап - это бэкап разницы между текущим состоянием системы и последним полным бэкапом. Такой подход позволяет экономить пространство в хранилище. Количество дельт - это количество таких бэкапов.
Использование
За создание бэкапов в wal-g отвечает функция backup_push. Её можно использовать прямо в консоли следующим образом:
su postgres -c ’/usr/local/bin/wal-g/wal-g backup_push *путь к данным БД или PGDATA*’
pgAdmin — это утилита с графическим интерфейсом для создания дампов. Для начала работы переходим на сайт pgAdmin и загружаем подходящую версию программы:
После загрузки и установки необходимо подключиться к серверу:
Выгодные тарифы на облачные базы данных
Мы рассмотрели несколько инструментов для создания резервных копий базы данных PostgreSQL и восстановления данных из них.