330 подписчиков

Как сделать бекап базы Postgresql с помощью скрипта? Подробный разбор на личном примере.

172 прочитали
Источник: Яндекс.Картинки
Источник: Яндекс.Картинки

Каждый сисадмин рано или поздно сталкивается с проблемой создания бекапов. А также ломает голову над их автоматизацией. Сегодня разберем резервное копирование в Postgresql. А именно напишем и разберем скрипт по созданию бекапа.

---

В качестве примера у нас есть база данных Postgresql, которая называется TestDB.

СУБД установлена в C:\postgresql.

Логин и пароль к тестовой БД у нас admin

Порт доступа по умолчанию: 5432

Также выделяем папку для хранения резервной копии: D:\backup

---

Создаем в папке с СУБД (C:\postgresql) текстовый документ .txt (который мы в дальнейшем преобразим в скрипт .cmd)

Начнем! Оставляем для себя комментарий чтобы не потеряться и ставим Windows кодировку:

REM СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ POSTGRESQL

CLS

ECHO OFF

CHCP 1251

Вводим переменные для наших вышеописанных параметров (путь к папке bin, имя БД, имя хоста, номер порта, пользователь и пароль)

REM Установка переменных окружения

SET PGBIN=c:\PostgreSQL\bin

SET PGDATABASE=TestDB

SET PGHOST=localhost

SET PGPORT=5432

SET PGUSER=admin

SET PGPASSWORD=admin

Далее переходим в папку из которой запущен скрипт:

REM Смена диска и переход в папку из которой запущен bat-файл

%~d0

CD %~dp0

Обозначаем значения переменных: имя файла из текущей даты и времени, имя бекапа, имя файла журнала

REM Формирование имени файла резервной копии и файла-отчета

SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2% %TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%

SET DUMPFILE=%PGDATABASE%.backup

SET LOGFILE=%PGDATABASE%.log

Обозначаем значения переменных: путь к бекапу и путь к журналам

Мы указали папку для бекапов - D:\backup

SET DUMPPATH="D:\backup\%DUMPFILE%"

SET LOGPATH="D:\backup\%LOGFILE%"

Создаем резервную копию с помощью утилиты pg_dump, также проверяем код ошибки, для этого создаем 3 "якоря" Successfull, Error и End (если он равен 0, то бекап успешно выполнен)

REM Создание резервной копии

IF NOT EXIST Backup MD Backup

CALL "%PGBIN%\pg_dump.exe" --format=custom --verbose --file=%DUMPPATH% 2>%LOGPATH%

REM Анализ кода завершения

IF NOT %ERRORLEVEL%==0 GOTO Error

GOTO Successfull

Если код ошибки не равен 0 - то мы отправляемся к "якорю" - Error

Где мы просто записываем ошибку в журнал и в дальнейшем можем изучить, что привело к ошибке создания бекапа

REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале

:Error

DEL %DUMPPATH%

MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."

ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup.log

GOTO End

REM В случае удачного резервного копирования просто делается запись в журнал

В последнем участке кода указываем, что происходит, при успешном бекапе в якоре Successfull и завершаем исполнение скрипта

:Successfull

ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.log

GOTO End

:End

Данный скрипт сохраняем, меняем расширение на .cmd или .bat

Если данный материал вам помог или понравился - подпишитесь на канал и участвуйте в обсуждении в комментариях.
🚀 Подпиской вы очень поможете каналу и стимулируете автора писать вести блог.
🔥 Не пропустите обновления и новые статьи!
💰 Поддержать проект