Автор статьи: технический руководитель проектов внедрения 1С:ERP Внедренческого центра «Раздолье» Дмитрий Малышев.
Введение
pgAdmin — это интерфейс для администрирования баз данных PostgreSQL, в моём понимании это аналог MS SQL Management Studio. Ставится pgAdmin отдельно от PostgreSQL. Инструкцию установки найдите, пожалуйста, в интернет поисковиках. В данной инструкции будет описано как с помощью pgAdmin, bat-файлов и Планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.
Открытие pgAdmin
Через пуск или в проводнике открываем приложение.
"C:\Program Files\pgAdmin 4\v6\pgAdmin4.ico"
Вводим пароль доступа (за дается ранее пользователем).
Откроется интерфейс управления базами данных.
Создание резервной копии
Рассмотрим создание резервной копии из pgAdmin и командным bat-файлом.
2.1. С помощью pgAdmin
Выбираем базу в дереве, правой кнопкой мыши открываем контекстное меню, где выбираем создание резервной копии/Backup… Указываем полный путь для сохранения копии, формат Custom и жмем [Создать / Create].
***
***
2.2. С помощью командного файла *.bat
Запускаем двойным кликом мыши командный файл backup_pdadmin_UH_IMD_everyday.bat, в котором уже прописан вызов архиватора формат и путь файла копии.
Копии сохраняются сюда.
Содержимое командного файла:
REM СОЗДАНИЯ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ POSTGRESQL
CLS
ECHO OFF
CHCP 1251
REM Установка переменных окружения
SET PGDATABASE=IMD_UH
SET PGHOST=localhost
SET PGPORT=5432
SET PGUSER=postgres
SET PGPASSWORD=ЗДЕСЬ_УКАЖИТЕ_ПАРОЛЬ_для_пользователя_postgres
REM Формирование имени файла резервной копии и файла-отчета
SET DATETIME=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2% %TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%
SET DUMPFILE=%PGDATABASE% %DATETIME%.backup
SET LOGFILE=%PGDATABASE% %DATETIME%.log
SET DUMPPATH="E:\UH_IMD\Backup\%DUMPFILE%"
SET LOGPATH="E:\UH_IMD\Backup\%LOGFILE%"
REM Создание резервной копии
IF NOT EXIST Backup MD Backup
CALL "C:\Program Files\pgAdmin 4\v6\runtime\pg_dump.exe" --format=custom --verbose --file=%DUMPPATH% 2>%LOGPATH%
REM Анализ кода завершения
IF NOT %ERRORLEVEL%==0 GOTO Error
GOTO Successfull
REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале
:Error
DEL %DUMPPATH%
MSG * "ERROR to create backup!!! See the information E:\UH_IMD\Backup\backup.log."
ECHO %DATETIME% Ошибка при создании резервной копии %DUMPFILE%. Смотрите %LOGFILE%. >> backup.log
GOTO End
REM В случае удачного резервного копирования просто делается запись в журнал
:Successfull
ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.log
GOTO End
:End
Пояснения:
SET PGDATABASE=IMD_UH - здесь имя базы данных на СУБД равно IMD_UH, у вас будет свое поменяйте обязательно.
E:\UH_IMD\Backup - здесь путь хранения backup у вас будет свой, поменяйте.
C:\Program Files\pgAdmin 4\v6\runtime - папка утилиты pg_dump.exe для создания дампов, пусть может чуть отличаться, например, вместо v6 будет v4. И не забудьте pgAdmin установить, он ставится отдельно.
SET PGPASSWORD=ЗДЕСЬ_УКАЖИТЕ_ПАРОЛЬ_для_пользователя_postgres - тут укажите реальный пароль от пользователя postgres СУБД PostgreSQL
Восстановление резервной копии
Есть несколько способов: Из командной строки, из pgAdmin, заранее подготовленным командным файлом. Мы рассмотрим: pgAdmin.
3.1. С помощью pgAdmin
3.1.1. В существующую базу
Выбираем базу, вызываем правой кнопкой ее контекстное меню, где выбираем действие Восстановить / Restore.
Далее указываем путь к резервной копии, и в настройках ставим предварительно очищать существующую базу (иначе она не восстановится из-за конфликта таблиц).
***
***
***
3.1.2. В новую базу
3.1.2.1. Создаем новую базу в PostgreSQL
На корне дерева баз вызываем правой кнопкой мыши контекстное меню и действие Создать / Create – Базу данных / Database.
Задаем имя новой базы.
Выбираем обязательно схему создания template0 (иначе на следующем шаге база не развернется из backup из-за конфликта таблиц).
Для контроля смотрим итоговый запрос, и жмем кнопку [Сохранить]/[Save].
3.1.2.2. Восстанавливаем базу из архива в PostgreSQL
После создания пустой новой базы, её нужно восстановить из архива. Для этого смотрите пункт выше 3.1.1. Для восстановления в существующую базу, выполняем всё тоже самое только для базы с именем NewBaseName
3.1.2.3. Создаем новую базу 1С NewBaseName
После того как развернули базу на СУБД PostgreSQL её требуется опубликовать на сервере 1С, чтобы пользователи получили к ней доступ. Для этого выполним действия по созданию базы 1С и связывании её с существующей базой на СУБД.
***
***
***
***
Не забываем ставь флаг «Установить блокировку регламентных заданий», если это копия.
Удаление старых резервных копий
4.1. Вручную
Удаляем архивы старше 30 дней вручную. Затем чистим корзину на рабочем столе.
В проводнике папка E:\UH_IMD\Backup.
***
4.2. С помощью командного файла *.bat
Запускаем двойным щелчком мыши командный файл. В файле указана очистка в каталоге файлов старше 30 дней.
Его содержимое:
forfiles /p "E:\UH_IMD\Backup" /S /D -30 /C "cmd /c del /f /a /q @file"
Пояснения:
E:\UH_IMD\Backup - здесь путь хранения backup'ов, у вас будет свое поменяйте обязательно.
30 - срок в днях хранения backup'ов
Автоматическое выполнение резервного копирования
Использован стандартный планировщик заданий Windows каждый день в 5:00 утра запуск, выполнения командного файла (архив рабочей базы примерно 1 час создается).
***
***
***
***
***
***
Автоматическое выполнение очистки копий старше 30 дней
Использован стандартный планировщик заданий Windows каждую субботу в 10:00 утра запуск, выполнения командного файла.
***
***
***
***
***
***
Приложения
Пример содержимого общего файла логов backup.log.
Пример содержимого файла лога конкретной выгрузки UH_IMD 2022-10-07 5-00-00.log
P.S. Коллеги, сразу скажу, что я не системный администратор, а программист 1С. Системщик решил бы, может быть, элегантнее.
Хотя ситуация сложилась такая, что я делал настройки и эту инструкцию с bat-никами по просьбе системных администраторов (как бы странно это ни звучало). Нечасто такими настройками занимаюсь, поэтому не судите строго.
Добавил 2 батника, по обновлению статистики и реиндексации:
Они для регламентного обслуживания. 1С завершать для их работы не обязательно, но 1С будет притормаживать или пойдет блокировка на период реиндексации. В планировщик заданий Windows на эти батники добавьте задачи раз в неделю на свои базы, в Нерабочее время. Также есть служебная база postgres на нее тоже раз в неделю добавьте обслуживание.
Файл vacuumdb_BaseName.bat - обновление статистики.
Его содержимое:
vacuumdb -d UH_IMD -Z -v -j 1
Пояснения:
Обновление статистики базы с именем UH_IMD (тут поставьте свою) в 1 поток.
Можно поменять на обновление статистики во всех базах в 4 потока, тогда будет текст:
vacuumdb -a -Z -v -j 4
Файл reindexdb_BaseName.bat - реиндексация таблиц в базе.
Его содержимое:
reindexdb -d UH_IMD -v -j 1
Пояснения:
Обновление индексов в базе с именем UH_IMD (тут поставьте свою) в 1 поток.
Можно поменять на обновление статистики во всех базах в 4 потока, тогда будет текст:
reindexdb -a -v -j 4
Также обратите внимание на программу Effector Saver — программа резервного копирования 1С:Предприятия (поищите в инете).
Делает копии в MS и PostgreSQL, настройка хранения и удаления. Есть возможность подключать скрипты и выполнять тестирование исправление 1С. Есть бесплатная версия (которой должно хватить), и есть также платная с плюшками.
Ищите для работы вот этот материал с инструкциями для скачивания и использования:
backup_pgadmin_BaseName_everyday.bat
delete_backup_BaseName_older than 30 days.bat
Резервное копирование и восстановление баз PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика.docx
vacuumdb_BaseName.bat
reindexdb_BaseName.bat
Комментарии (9)
Sleuthhound
10.10.2022 19:49Посмотрите в сторону pg_probackup, они есть под винду - это куда лучше, проще и главное эффективней.
Stillgray
11.10.2022 02:54Вообще не надо postgresql под винду. Сотня-другая пользователей, и тормоза становятся невыносимыми.
А так, pg-probackup (https://github.com/postgrespro/pg_probackup) рулит:автоматическая ротация архивов,
автоматическое слияние инкрементальной и полной копии,
полные, инкрементальные, PITR архивные копии,
непрерывное архивирование сегментов wal, с удалением ненужных сегментов,
защита указанного числа полных резервных копий и глубины РК в днях,
сжатие архивных копий и сегментов wal,
прогнозируемое время восстановления,
ещё много всего, навскидку не упомню.
Но с него такой развесистой статьи не получится :) Настройка в полдюжины команд, и пара в кроне.
P.S. Кто-нибудь объяснит мне, почему везде pg_probackup, а пакет называется pg-probackup?
Sergey-S-Kovalev
10.10.2022 20:26+3Простите, я не могу перестать кричать после прочтения этой статьи. Спать пора, а я не могу остановиться :)
Через пуск или в проводнике открываем приложение.
"C:\Program Files\pgAdmin 4\v6\pgAdmin4.ico"Тыкая на файл иконки, Вы приложение не запустите.
Удаляем архивы старше 30 дней вручную. Затем чистим корзину на рабочем столе.
В проводнике папка E:\UH_IMD\Backup.Выглядит надежно.
Автоматическое выполнение очистки копий старше 30 дней
Использован стандартный планировщик заданий Windows каждую субботу в 10:00 утра запуск, выполнения командного файла.Просто замечу, что если у Вас 30 дней не будет делаться по какой то причине резервное копирование, то у вас не будет ни одной резервной копии
Пример содержимого общего файла логов backup.log.
А заходить и смотреть в него до выполнения резервного копирования, или после? В журнале на вахте пометку нужно будет делать, что осмотр произведен?
P.S. Коллеги, сразу скажу, что я не системный администратор, а программист 1С. Системщик решил бы, может быть, элегантнее.
С десяток лет уже не оправдание, знание основ SQL для 1С специалистов уже давно обыденность.
Автор статьи: технический руководитель проектов внедрения 1С:ERP Внедренческого центра «Раздолье» Дмитрий Малышев.
Вы уверены что под этой статьей, на 90% состоящей из копипасты стандартных мануалов стоит писать название компании и свою должность?
Вопрос на засыпку: у меня 200+ баз, от 10-15 гигабайт каждая, где в статье отсутствует фрагмент про инкрементные бэкапы?
Простите меня, но такие примеры "внедрений" просто ужасны.
nick-for-habr
11.10.2022 09:31Первая реакция была схожая, но я как «админ адинэс» уже давно принял для себя за правила относится к подобному творчеству разрабов 1С философски ))
Ну нет там толковых сисадминов, точнее — их единицы. У нас (в России) вообще традиционно системным инженерам внимание уделяется по остаточному принципу, т.к. мало кто понимает — что они вообще делают, а в сфере 1С — это вообще тухляк. Пресловутая «миста» забита подобными статьями чуть больше, чем полностью: торжество магических практик налицо.
По этому не пинайте автора — он играет как может )) Сказали «давай статью IT-тематики в блог на Хабре, ща продвигаться будем» — он и дал, что мог.Sergey-S-Kovalev
11.10.2022 14:03+1На всякий случай акцентирую внимание: В блоге компании занимающейся внедрениями ERP решений, технический руководитель проектов внедрений выкладывает статью под своим авторством, в которой на уровне компетенций джуна описывает процесс обслуживания типовой (даже не ERP) конфигурации 1С с хранением базы в PostrgeSQL.
Чего я ожидаю от этой статьи написанной техруком из специализированной компании занимающейся внедрением? Как минимум выжимку из внутрикорпоративного чеклиста/гайдлайна/деплоймент воркфлоу в создании которого, естественно, участвовали специалисты этой компании в своей области, как минимум сисадмины + DBA + 1С Эксперты ибо это то что делают внедренцы в инфраструктурах заказчиков. Это такой живой документ, который актуализируется после каждого внедрения.
Чего мы получаем?
Неточности в процессах, морально вредные и устаревшие практики, наколеночная автоматизация, настройки по умолчанию не подходящие для маломальски больших инсталляций. Даже банальный код CMD/BAT файлов не оформлен тегами блоков кода.
Давайте закроем глаза и поставим натянутую четверочку как в современном образовании? Ну старался же человек? Или нет? А что я сделаю, если вдруг узнаю что эта компания что то захочет у меня внедрять что то?
dbax
11.10.2022 15:16Не говоря о том что для любого мало-мальски грамотного администратора РСУБД "дамп" вообще ни каким боком не является синонимом "бекапа"!
slavius
11.10.2022 12:47За то, что не нужно искать команды для pg_dump - спасибо. Отдельно спасибо за команду forfiles.
А вот
Ищите для работы вот этот материал с инструкциями для скачивания и использования:
ну это как-то неправильно... тем более что это есть по тексту, просто не отдельными файлами.
Или это такой способ повысить поисковый индекс сайта "компании";)
LeshaRB
Улыбнул скриншот
Как надо чистить корзину.....
ERP Автор
:)