PostgreSQL
PostgreSQL

Автор статьи: технический руководитель проектов внедрения 1С:ERP Внедренческого центра «Раздолье» Дмитрий Малышев.

Введение

pgAdmin — это интерфейс для администрирования баз данных PostgreSQL, в моём понимании это аналог MS SQL Management Studio. Ставится pgAdmin отдельно от PostgreSQL. Инструкцию установки найдите, пожалуйста, в интернет поисковиках. В данной инструкции будет описано как с помощью pgAdmin, bat-файлов и Планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

psql-1.png
psql-1.png

Открытие pgAdmin

Через пуск или в проводнике открываем приложение.

psql-2.png
psql-2.png

"C:\Program Files\pgAdmin 4\v6\pgAdmin4.ico"

psql-3.png
psql-3.png

Вводим пароль доступа (за дается ранее пользователем).

psql-4.png
psql-4.png

Откроется интерфейс управления базами данных.

psql-1.png
psql-1.png

Создание резервной копии

Рассмотрим создание резервной копии из pgAdmin и командным bat-файлом.

2.1. С помощью pgAdmin

Выбираем базу в дереве, правой кнопкой мыши открываем контекстное меню, где выбираем создание резервной копии/Backup… Указываем полный путь для сохранения копии, формат Custom и жмем [Создать / Create].

psql-5.png
psql-5.png

***

psql-6.png
psql-6.png

***

psql-7.png
psql-7.png

2.2. С помощью командного файла *.bat

Запускаем двойным кликом мыши командный файл backup_pdadmin_UH_IMD_everyday.bat, в котором уже прописан вызов архиватора формат и путь файла копии.

psql-8.png
psql-8.png

Копии сохраняются сюда.

psql-9.png
psql-9.png

Содержимое командного файла:

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.

psql-10.png
psql-10.png

Далее указываем путь к резервной копии, и в настройках ставим предварительно очищать существующую базу (иначе она не восстановится из-за конфликта таблиц).

psql-11.png
psql-11.png

***

psql-12.png
psql-12.png

***

psql-13.png
psql-13.png

***

ps-14.png
ps-14.png

3.1.2. В новую базу

3.1.2.1. Создаем новую базу в PostgreSQL

На корне дерева баз вызываем правой кнопкой мыши контекстное меню и действие Создать / Create – Базу данных / Database.

psql-14.png
psql-14.png

Задаем имя новой базы.

psql-16.png
psql-16.png

Выбираем обязательно схему создания template0 (иначе на следующем шаге база не развернется из backup из-за конфликта таблиц).

psql-16.png
psql-16.png

Для контроля смотрим итоговый запрос, и жмем кнопку [Сохранить]/[Save].

psql-17.png
psql-17.png

3.1.2.2. Восстанавливаем базу из архива в PostgreSQL

После создания пустой новой базы, её нужно восстановить из архива. Для этого смотрите пункт выше 3.1.1. Для восстановления в существующую базу, выполняем всё тоже самое только для базы с именем NewBaseName

3.1.2.3. Создаем новую базу 1С NewBaseName

После того как развернули базу на СУБД PostgreSQL её требуется опубликовать на сервере 1С, чтобы пользователи получили к ней доступ. Для этого выполним действия по созданию базы 1С и связывании её с существующей базой на СУБД.

psql-18.png
psql-18.png

***

psql-19.png
psql-19.png

***

psql-20.png
psql-20.png

***

psql-21.png
psql-21.png

***

psql-22.png
psql-22.png

Не забываем ставь флаг «Установить блокировку регламентных заданий», если это копия.

Удаление старых резервных копий

4.1. Вручную

Удаляем архивы старше 30 дней вручную. Затем чистим корзину на рабочем столе.

В проводнике папка E:\UH_IMD\Backup.

psql-23.png
psql-23.png

***

psql-24.png
psql-24.png

4.2. С помощью командного файла *.bat

Запускаем двойным щелчком мыши командный файл. В файле указана очистка в каталоге файлов старше 30 дней.

psql-25.png
psql-25.png

Его содержимое:

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 час создается).

psql-25.png
psql-25.png

***

psql-26.png
psql-26.png

***

psql-27.png
psql-27.png

***

psql-28.png
psql-28.png

***

psql-29.png
psql-29.png

***

psql-30.png
psql-30.png

***

psql-31.png
psql-31.png

Автоматическое выполнение очистки копий старше 30 дней

Использован стандартный планировщик заданий Windows каждую субботу в 10:00 утра запуск, выполнения командного файла.

psql-32.png
psql-32.png

***

psql-33.png
psql-33.png

***

psql-34.png
psql-34.png

***

psql-35.png
psql-35.png

***

psql-36.png
psql-36.png

***

psql-37.png
psql-37.png

***

psql-38.png
psql-38.png

Приложения

Пример содержимого общего файла логов backup.log.

psql-39.png
psql-39.png

Пример содержимого файла лога конкретной выгрузки UH_IMD 2022-10-07 5-00-00.log

psql-40.png
psql-40.png

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)


  1. LeshaRB
    10.10.2022 18:33

    Улыбнул скриншот

    Как надо чистить корзину.....


    1. ERP Автор
      10.10.2022 19:02

      :)


  1. Sleuthhound
    10.10.2022 19:49

    Посмотрите в сторону pg_probackup, они есть под винду - это куда лучше, проще и главное эффективней.


    1. Stillgray
      11.10.2022 02:54

      Вообще не надо postgresql под винду. Сотня-другая пользователей, и тормоза становятся невыносимыми.
      А так, pg-probackup (https://github.com/postgrespro/pg_probackup) рулит:

      • автоматическая ротация архивов,

      • автоматическое слияние инкрементальной и полной копии,

      • полные, инкрементальные, PITR архивные копии,

      • непрерывное архивирование сегментов wal, с удалением ненужных сегментов,

      • защита указанного числа полных резервных копий и глубины РК в днях,

      • сжатие архивных копий и сегментов wal,

      • прогнозируемое время восстановления,

      • ещё много всего, навскидку не упомню.

      Но с него такой развесистой статьи не получится :) Настройка в полдюжины команд, и пара в кроне.

      P.S. Кто-нибудь объяснит мне, почему везде pg_probackup, а пакет называется pg-probackup?


  1. 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 гигабайт каждая, где в статье отсутствует фрагмент про инкрементные бэкапы?

    Простите меня, но такие примеры "внедрений" просто ужасны.


    1. nick-for-habr
      11.10.2022 09:31

      Первая реакция была схожая, но я как «админ адинэс» уже давно принял для себя за правила относится к подобному творчеству разрабов 1С философски ))
      Ну нет там толковых сисадминов, точнее — их единицы. У нас (в России) вообще традиционно системным инженерам внимание уделяется по остаточному принципу, т.к. мало кто понимает — что они вообще делают, а в сфере 1С — это вообще тухляк. Пресловутая «миста» забита подобными статьями чуть больше, чем полностью: торжество магических практик налицо.
      По этому не пинайте автора — он играет как может )) Сказали «давай статью IT-тематики в блог на Хабре, ща продвигаться будем» — он и дал, что мог.


      1. Sergey-S-Kovalev
        11.10.2022 14:03
        +1

        На всякий случай акцентирую внимание: В блоге компании занимающейся внедрениями ERP решений, технический руководитель проектов внедрений выкладывает статью под своим авторством, в которой на уровне компетенций джуна описывает процесс обслуживания типовой (даже не ERP) конфигурации 1С с хранением базы в PostrgeSQL.

        Чего я ожидаю от этой статьи написанной техруком из специализированной компании занимающейся внедрением? Как минимум выжимку из внутрикорпоративного чеклиста/гайдлайна/деплоймент воркфлоу в создании которого, естественно, участвовали специалисты этой компании в своей области, как минимум сисадмины + DBA + 1С Эксперты ибо это то что делают внедренцы в инфраструктурах заказчиков. Это такой живой документ, который актуализируется после каждого внедрения.

        Чего мы получаем?

        Неточности в процессах, морально вредные и устаревшие практики, наколеночная автоматизация, настройки по умолчанию не подходящие для маломальски больших инсталляций. Даже банальный код CMD/BAT файлов не оформлен тегами блоков кода.

        Давайте закроем глаза и поставим натянутую четверочку как в современном образовании? Ну старался же человек? Или нет? А что я сделаю, если вдруг узнаю что эта компания что то захочет у меня внедрять что то?


        1. dbax
          11.10.2022 15:16

          Не говоря о том что для любого мало-мальски грамотного администратора РСУБД "дамп" вообще ни каким боком не является синонимом "бекапа"!


  1. slavius
    11.10.2022 12:47

    За то, что не нужно искать команды для pg_dump - спасибо. Отдельно спасибо за команду forfiles.

    А вот

    Ищите для работы вот этот материал с инструкциями для скачивания и использования:

    ну это как-то неправильно... тем более что это есть по тексту, просто не отдельными файлами.

    Или это такой способ повысить поисковый индекс сайта "компании";)