Резервное копирование (бэкап) Postgresql на windows с удалением старых файлов
Posted On 2021-05-18
Резервное копирование Postgresql на windows и удаление старых файлов, я организовал с помощью bat файлов. базы копируются с помощью pg_dump. Резервные копии сжимаются средствами pg_dump. Резервные копии хранятся 7 дней. Для каждой базы данных нужно создать каталог, с названием, совпадающим с именем базы.
@echo off
cd C:\backup
set PATH=%PATH%;%ProgramFiles%\PostgreSQL 1C\12\bin;%ProgramFiles%\7-Zip
rem echo %PATH%
rem взять время заменить точки на подчеркивание. Нужно, чтобы вместо 0 не было пробела во времени
for /f "delims=:, tokens=1,2,3" %%i in ("%time%") do (set t=%%i_%%j_%%k)
set t=%t: =0%
set datestr=%date:~-4,4%_%date:~-7,2%_%date:~-10,2%_%t%
rem echo datestr is %datestr%
set BASENAME=basename
set NUM_COPY=5
set bkp_dir=C:\backup\%BASENAME%\
set BACKUP_FILE=%BASENAME%_%datestr%.bropgfull
echo backup file name is %BACKUP_FILE%
echo backup BASE name is %BASENAME%
rem Password Progress
SET PGPASSWORD=xxxxxxxxxx
echo off
rem cd "C:\Program Files\PostgreSQL 1C\12\bin"
pg_dump -h localhost -p 5432 -U postgresp -F c -b -v -f %bkp_dir%%BACKUP_FILE% %BASENAME% 2>backup.log
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %bkp_dir%%BACKUP_FILE%
REM MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."
ECHO %DATESTR% Ошибки при создании резервной копии базы данных %BACKUP_FILE%. Смотрите отчет backup.log. >> backup.log
GOTO End
REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATESTR% Успешное создание резервной копии %BACKUP_FILE% >> backup.log
GOTO End
:End
rem cd C:\backup
rem 7z a -tzip %BACKUP_FILE%.zip %BACKUP_FILE%
rem del %BACKUP_FILE%
powershell -executionpolicy bypass -command "Get-ChildItem -Path %bkp_dir% -file | Sort-Object creationtime -Descending | Select-Object -skip %NUM_COPY% | ForEach-Object {Remove-Item $_.FullName}"
К папке, где распложены эти файлы закрываем доступ всем кроме администраторов так как в файле в открытом виде хранится пароль пользователя postgres , bat файл запускаем через планировщик Windows
Ну ещё не нужно забывать про обновление статистики и вакуум.