Без использования стороннего софта
Резервное копирование 1С баз postgreSQL на Windows Server 2016. Скрипт
Резервное копирование нескольких баз с распределением по отдельным директориям в Windows среде создадим batch-скрипт и создадим скрипт бэкапа . А далее настроем перенос полученных бэкапов на отдельное хранилище в сети с последующим удалением успешно переданных бэкапов.
Бесплатно и стабильно
Используем стандартные утилиты PostgreSQL
Повышаем собственный скилл в batch
Понимание данного материала поможет Вам успешно модернизировать скрипт под свои нужды и оптимизировать ресурсы, необходимые для проведения создания резервных копий баз данных на PostgreSQL.
-
Исходные данные
Входные условия для автоматизации бэкапа баз 1С на PostgreSQL который установлен на Windows Server. -
Пишем скрипт бэкапа баз
Разберем по косточкам скрипт бэкапа нескольких баз данных PostgreSQL. -
Автоматизируем запуск скрипта
Экономим свои ресурсы и настраиваем автоматическое создание резервных копий баз данных 1C на Windows Server. -
Повышаем безопасность резервных копий
Как обезопасить созданные БЭКАПы от вирусов и падения самого сервера и переносить резервные копии отдельное сетевое хранилище,
Исходные данные
Входные условия
- PostgreSQL16 для 1С сервера стоит на Windows Server 2016.
- Есть FTP сервер под Бэкапы.
- Баз данных 1С – несколько.
- Выделенный сервер: HP ProLiant DL360 GEN9 2xE5-2680v4, RAM:128 Гб, SSD 2x1TB 2.5 Sata3 за 13,5 т.р./мес
- Необходим автоматический бэкап 1С баз на PostgreSQL.
- Без установки сторонних программ, языков и т.п.
Итак решаем задачу посредством обычного batch–скрипта в файле с расширением .bat ну или .cmd (итак, пишем батник).
Пишем скрипт бэкапа баз данных 1С
Создаём батник в любимом Вашем текстовом редакторе или блокноте, например Notepad++.
Разберем по шагам скрипт
Установим переменные окружения и укажем где лежат исполняемые утилиты PostgreSQL, нам потребуется утилита pg_dump:
CLSECHO OFFCHCP 1251SET PGBIN=C:\Program Files\PostgreSQL 1C\16\bin
Укажем, что скрипт будет запускаться локально на сервере и укажем пользователя и пароль БД, при необходимости можно задать IP сервера БД
SET PGHOST=localhostSET PGPORT=5432SET PGUSER=postgresuserSET PGPASSWORD=pguser_pass
Заменим строки объявления переменных на строки получения нашей пары
ключей из файла <полный_путь_до файла>\.env
c последующим присвоением значений соответствующим переменным:
SET PGUSER=postgresuserSET PGPASSWORD=pguser_passFOR /f "tokens=1,2 delims=:" %%a IN (C:\BAC\.env) DO ( SET PGUSER=%%a SET PGPASSWORD=%%b )
Объявим первую базу, которую будем резервировать а также переменную для счетчика:
SET PGDATABASE=Base_name_1REM Обьявим переменную для счетчикаSET I=1
Начинаем обрабатывать первую базу: перейдем в папку из которой запущен наш bat-ник и сформируем имя файла резервной копии и файла отчета с присвоением даты создания.
Также будем раскладывать все бэкапы в свои подпапки SET DUMPDIR=%PGDATABASE%
с именами соответствующих баз SET DUMPFILE=%PGDATABASE%%DATETIME%.sql
.
:SstartSET /a I=I+1%~d0CD %~dp0SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%SET DUMPFILE=%PGDATABASE%%DATETIME%.sqlSET DUMPDIR=%PGDATABASE%SET LOGFILE=%PGDATABASE%_%DATETIME%.logSET DUMPPATH="Backup\%DUMPDIR%\%DUMPFILE%"SET LOGPATH="Logback\%LOGFILE%"
Для начала проверим, есть ли необходимые директории и если нет - создадим их. Далее переходим собственно к созданию дампа базы и лога, при этом анализируем код завершения операции.
REM Создание резервной копии, создаем необходимые директории, в том числе и для ЛоговIF NOT EXIST Backup MD BackupIF NOT EXIST Backup\%DUMPDIR% MD Backup\%DUMPDIR%IF NOT EXIST Logback MD LogbackCALL "%PGBIN%\pg_dump.exe" >=%DUMPPATH% 2>%LOGPATH%IF NOT %ERRORLEVEL%==0 GOTO ErrorGOTO Successfull
В случае получения ошибки удаляем поврежденную резервную копию и делаем соотвествующую запись в журнал.
:ErrorDEL %DUMPPATH%ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup.log
далее переходим посредством счетчика к следующей базе. В случае удачного резервного копирования базы просто делается запись в журнал.
IF %I%==2 GOTO SecondIF %I%==3 GOTO ThirdIF %I%==4 GOTO FourthIF %I%==5 GOTO FifthIF %I%==6 GOTO SixthGOTO End:SuccessfullECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.logIF %I%==2 GOTO SecondIF %I%==3 GOTO ThirdIF %I%==4 GOTO FourthIF %I%==5 GOTO FifthIF %I%==6 GOTO SixthGOTO Cleaning
Присваиваем переменной имя следующей базы SET PGDATABASE=Base_name_2
и возвращаемся в начало процесса обработки (дампа)
базы по метке :Sstart и так до конца перебора интересующих нас баз:
:SecondSET PGDATABASE=Base_name_2GOTO Sstart:ThirdSET PGDATABASE=Base_name_3GOTO Sstart:FourthSET PGDATABASE=Base_name_4GOTO Sstart:FifthSET PGDATABASE=Base_name_5GOTO Sstart:SixthSET PGDATABASE=Base_name_6GOTO Sstart
Теперь проведем очистку от старых БЭКАП-ов, чтобы не дожидаться момента, когда нам просто не хватит места на диске для работы. В скрипте настроено удалять все что старше 31 дня, но следует учитывать размеры баз и их количество с учетом размеров диска, на который создаются бэкапы:
:Cleaningforfiles /p "C:\BAC\Backup" /S /D -31 /C "cmd /c del /f /a /q @file"forfiles /p "C:\BAC\Logback" /S /D -31 /C "cmd /c del /f /a /q @file"IF NOT %ERRORLEVEL%==0 GOTO EndECHO %DATETIME% Очистка от старых бэкапов проведена успешно! >> backup.log
Эту очистку конечно можно проводить отдельным батником по отдельному заданию для Windows, я сделал в одном батнике. После всех операций закончим работу скрипта.
:End
Полный вариант скрипта
Полный batch-скрипт создания резервных копий баз данных 1С на PostgreSQL с комментариями.
CLSECHO OFFCHCP 1251REM Установка переменных окруженияREM Укажем где лежат исполняемые утилиты PostgreSQL нам потребуется pgdump:SET PGBIN=C:\Program Files\PostgreSQL 1C\16\binREM Батник будет запускаться локально на сервере:SET PGHOST=localhostSET PGPORT=5432REM Укажем пользователя и пароль пользователя в Postgres, взяв пару ключей из отдельного файла .env с указанием пути до негоFOR /f "tokens=1,2 delims=:" %%a IN (C:\BAC\.env) DO ( SET PGUSER=%%a SET PGPASSWORD=%%b )REM Укажем первую базу, которую будем резервировать:SET PGDATABASE=Base_name_1REM Объявим переменную для счетчикаSET I=1:SstartSET /a I=I+1REM Смена диска и переход в папку из которой запущен bat-файл%~d0CD %~dp0REM Формирование имени файла резервной копии и файла-отчетаSET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%SET DUMPFILE=%PGDATABASE%_%DATETIME%.sqlSET DUMPDIR=%PGDATABASE%SET LOGFILE=%PGDATABASE%_%DATETIME%.logSET DUMPPATH="Backup\%DUMPDIR%\%DUMPFILE%"SET LOGPATH="Logback\%LOGFILE%"REM Создание резервной копии, создаем необходимые директории, в том числе и для ЛоговIF NOT EXIST Backup MD BackupIF NOT EXIST Backup\%DUMPDIR% MD Backup\%DUMPDIR%IF NOT EXIST Logback MD LogbackCALL "%PGBIN%\pg_dump.exe" >=%DUMPPATH% 2>%LOGPATH%REM Анализ кода завершенияIF NOT %ERRORLEVEL%==0 GOTO ErrorGOTO SuccessfullREM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале:ErrorDEL %DUMPPATH%REM MSG * "Ошибка при создании резервной копии базы данных. Смотрите backup.log."ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup.logIF %I%==2 GOTO SecondIF %I%==3 GOTO ThirdIF %I%==4 GOTO FourthIF %I%==5 GOTO FifthIF %I%==6 GOTO SixthGOTO EndREM В случае удачного резервного копирования просто делается запись в журнал:SuccessfullECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.logIF %I%==2 GOTO SecondIF %I%==3 GOTO ThirdIF %I%==4 GOTO FourthIF %I%==5 GOTO FifthIF %I%==6 GOTO SixthGOTO Cleaning:SecondSET PGDATABASE=Base_name_2GOTO Sstart:ThirdSET PGDATABASE=Base_name_3GOTO Sstart:FourthSET PGDATABASE=Base_name_4GOTO Sstart:FifthSET PGDATABASE=Base_name_5GOTO Sstart:SixthSET PGDATABASE=Base_name_6GOTO Sstart:Cleaningforfiles /p "C:\BAC\Backup" /S /D -31 /C "cmd /c del /f /a /q @file"forfiles /p "C:\BAC\Logback" /S /D -31 /C "cmd /c del /f /a /q @file"IF NOT %ERRORLEVEL%==0 GOTO EndECHO %DATETIME% Очистка от старых бэкапов проведена успешно! >> backup.log:End
Все что Вам остается, это заменить имя пользователя postgresuser базы PostgreSQL, его пароль pguser_pass, и имена баз данных (Base_name_1)
Автоматизация запуска скрипта по времени
Ставим задачу в планировщик задач.
Запускаем планировщик:
Пуск – Панель Управления – Администрирование – Планировщик заданий.
Создаем задачу -> Задаем ей имя в планировщике
и устанавливаем триггеры (расписание начала задачи). Я ставлю еженедельно задачу в рабочие дни ночью.
Далее указываем Действие: Создать -> программу сценарий: (находим нашу программу) run_backup.cmd жмем Ок.
Всё, наш Скрипт создан и установлен в планировщик Windows. Осталось проверить его работоспособность: прямо в планировщике задач выбираем нашу задачу и вызвав правой кнопкой мыши контекстное меню, выбираем “Запустить” – далее смотрим результат. радуемся жизни или анализируем причины записи ошибок в лог.
Повышаем безопасность бэкапов
Подробнее о том, как организовать перенос бэкапов баз данных на удаленные сетевые хранилища:
Улучшайте Ваши IT-инструменты
Когда резервные копии наших баз данных 1С на сервере PostgreSQL под Windows Server создаются, укладываются по своим директориям и радуют глаз, стоит задуматься над тем, чтобы обезопасить эти БЭКАПы от вирусов и падения самого сервера. А значит есть смысл организовать БЭКАП-сервер на отдельном железе и переносить резервные копии туда, либо использовать другие сетевые хранилища.