Резервное копирование (бэкап) 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
Ну ещё не нужно забывать про обновление статистики и вакуум.