Каждый сисадмин рано или поздно сталкивается с проблемой создания бекапов. А также ломает голову над их автоматизацией. Сегодня разберем резервное копирование в 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
❗ Если данный материал вам помог или понравился - подпишитесь на канал и участвуйте в обсуждении в комментариях.
🚀 Подпиской вы очень поможете каналу и стимулируете автора писать вести блог.
🔥 Не пропустите обновления и новые статьи!
💰 Поддержать проект