В интернете много статей, посвящённых вопросу создания бэкапа 1С в PostgreSQL, о том, как развернуть резервную копию и какими средствами это делать лучше всего.
Однако конкретного практического материала на основе бесплатных решений нам встретить не удалось.
Предлагаемый метод довольно простой и при этом достаточно гибкий. Благодаря приведённым в статье комментариям вы без труда разберётесь, как настроить ежемесячные и ежегодные бэкапы.
Создание архивных копий
Бэкап проходит в 3 этапа:
- Делаем выгрузку из PostgreSQL (например, в 22:00)
- Архивируем выгрузку из PostgreSQL (напрммер, в 2:00)
- Удаляем старые файлы выгрузки из PostgreSQL (например, в 21:45)
На выходе остаются архивы .zip
!!! Внимание !!!
Вырузку делаем НЕ на виртуалку с PostgreSQL, а на сетевую шару на хосте. В идеале - на отдельный специально выделенный хард.
Задача 1 из 3
1.1. Заводим учётку "SQLbackup" с админскими правами и придумываем для неё пароль.
1.2. Создаём папки и шары с полным разрешением для юзера "SQLbackup" (и ещё кого-нибудь, кому будут нужны эти архивы. Сторонним 1С-никам, например):
1.2.1 Папку "C:\BackupSQL-cmd" - Туда будем складывать командные файлы .bat
1.2.2 Папку и шару "\\server1\SQLBackup\SQL\" - туда будем складывать выгрузки баз
1.2.3 Папку и шару "\\server1\SQLBackup\" - туда будем складывать архивы, т.е. готовые бэкапы
1.3. Создаём первый командный файл "BackupPGSQL.bat" (он выгружает SQL-базы в файл):
SET PGPASSWORD=123456
set DAT=%date:~6,4%%date:~3,2%%date:~0,2%
"C:\Program Files\PostgreSQL\9.4.2-1.1C\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --role "postgres" --no-password --format custom --blobs --section pre-data --section data --section post-data --encoding UTF8 --verbose --file "\\server1\SQLBackup\SQL\%DAT%-accounting.backup" "accounting"
Где:
"SET PGPASSWORD=123456" - ставим пароль от административной учётки Постгри (по умолчанию называется postgres)
"\\server1\SQLBackup\SQL\%DAT%-accounting.backup" - путь, куда мы выгружаем базу и имя файла, состоящего из сегодняшней даты и " accounting.backup" (пример: "20170830-accounting.backup")
"accounting" - имя самой базы, которую мы бэкапим
Если баз на одном сервере несколько, то просто копируем последнюю строчку с соответствующими изменениями.
1.4. Создаём второй командный файл "RemoveOldBackups.bat" (он будет удалять базы, архивация которых описана далее):
net use z: \\server1\SQLBackup\SQL /persistent:no
cd z:
forfiles /p "z:" /S /D -1 /C "cmd /c del /f /a /q @file"
:repeat
for /f "tokens=*" %%i in (' dir /b /s /ad "z:" ') do 2>nul rd /q "%%i" && goto:repeat
net use z: /delete
Где "/D -1" означает, что все файлы в папке, дата создания которых больше 1 дня удалять.
Задача 2 из 3. Effector Saver
Скачиваем Effector Saver:
Устанавливаем Effector Saver как сервис от учётки SQLbackup.
Создаём задачу "Бэкап выгрузок SQL Postgre", тип "Архивирование произвольных данных", в которой отмечаем:
- Галочка "Включить в архив файлы"
- Файлы --> Путь к файлам. Здесь указываем путь, куда мы положили выгрузки баз. В нашем примере это "\\server1\SQLBackup\SQL\"
- Настройка архивов --> Каталог архитвов. Здесь указываем путь, куда мы положим архивные файлы. В нашем примере это "\\server1\SQLBackup\"
- Настраиваем расписание.
Задача 3 из 3. Планировщик задач
Создаём две задачи от юзера "SQLbackup" - на оба .bat файла (из Задачи 1)
Необходимые опции:
- "Run whether user is logged on or not"
- "Run with hightest priveleges"
Восстановление архивной копии
1. При необходимости удаляем старую базу.
В имеющуюся базу бэкап разворачивать нельзя (база не будет работать!). В случае если PostgreSQL используется для 1С, то делаем одним из двух вариантов.
Вариант 1 (плох тем, что если баз несколько, то сервер выгонит всех пользователей сразу из всех баз).
- Останавливаем службу 1С сервера (Описание: Агент сервера 1С:Предприятия 8.х ...)
- Идём в C:\Program Files\PostgreSQL\9.4.2-1.1C\bin
- Запускаем pgAdmin3.exe
- Подключаемся к нашему серверу (2 клика мышкой на нём)
- Выбираем "Базы данных", ищем нашу базу и "Удалить..."
Вариант 2 (нужно знать административный пароль от базы, которую предстоит «грохнуть»).
- Пуск → Стрелочка вниз → Администрирование серверов 1С Предприятия → ...
- Находим наш Сервер → Кластеры → Локальный кластер → Информационные базы
- Находим нашу базу и нажимаем Удалить. Вводим пароль и удаляем (полностью!).
- Консоль пока не закрываем.
2. Создаём новую базу.
- Идём в C:\Program Files\PostgreSQL\9.4.2-1.1C\bin
- Запускаем pgAdmin3.exe
- Подключаемся к нашему серверу (2 клика мышкой на нём)
- Выбираем "Базы данных" и "Новая база данных..."
- Консоль пока не закрываем.
3. Восстанавливаем резервную копию
- Создаём новую базу. Достаточно заполнить только поле "Имя"
- По созданной базе правой кнопкой мыши → "Восстановить..."
- Просто выбираем Имя файла и нужную базу.
4. Возвращаемся в консоль "Администрирование сервера 1С"
- Правой кнопкой мыши на "Информационные базы" → Создать → Информационная база
- Вводим:
• Имя
• Сервер баз данных (для PostgreSQL - ip адрес сервера PostgreSQL!)
• Тип СУБД
• База данных
• Пользователь сервера БД и его пароль (в нашем примере, напомню, это postgres и пароль 123456)
Если вы завершите инструкцию в точном соответствии, то всё будет работать.
Мы готовы оказать вам содействие и помощь в настройке бэкапов — проконсультируйтесь с нашими экспертами и получите поддержку по любым техническим вопросам и задачам.