Postgresql backup windows: Automated backup on windows — PostgreSQL wiki

Содержание

Резервное копирование и восстановление «1С»-баз на PostgreSQL в Windows c помощью pgAdmin, bat-файлов и планировщика / Хабр

PostgreSQL

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

Введение

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

psql-1.png

Открытие pgAdmin

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

psql-2.png

«C:\Program Files\pgAdmin 4\v6\pgAdmin4.ico»

psql-3.png

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

psql-4.png

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

psql-1.png

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

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

2.1. С помощью pgAdmin

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

psql-5.png

***

psql-6.png

***

psql-7.png

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

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

psql-8.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-11.png

***

psql-12.png

***

psql-13.png

***

ps-14.png

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

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

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

psql-14.png

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

psql-16.png

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

psql-16.png

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

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-19.png

***

psql-20.png

***

psql-21.png

***

psql-22.png

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

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

4.1. Вручную

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

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

psql-23.png

***

psql-24.png

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

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

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-26.png

***

psql-27.png

***

psql-28.png

***

psql-29.png

***

psql-30.png

***

psql-31.png

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

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

psql-32.png

***

psql-33.png

***

psql-34.png

***

psql-35.png

***

psql-36.png

***

psql-37.png

***

psql-38.png

Приложения

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

psql-39.png

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

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

Резервное копирование и восстановление «1С»-баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

10.10.2022
Статьи экспертов

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

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

Введение

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


  • Резервное копирование и восстановление баз PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика.docx (версия от 12.10.2022)

windows — Как сделать резервную копию и восстановить базу данных PostgreSQL в Windows7?

спросил

Изменено
1 год, 5 месяцев назад

Просмотрено
81к раз

Я новичок в базе данных Postgres. Мне нужно получить резервную копию с производственного сервера (версия pgAdmin 9)..2.4) и восстановить его на моем локальном компьютере (у меня pgAdmin версии 9.4). Я попытался получить резервную копию, щелкнув правой кнопкой мыши базу данных -> Резервное копирование, чтобы получить файл .backup. Как показано на изображении ниже:

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

Я также хочу знать, могут ли разные порты в обеих системах создавать проблемы при восстановлении резервных копий. Когда я попытался восстановить резервную копию той же системы, проблем не было.

  • окна
  • postgresql
  • pgadmin

2

Для резервного копирования базы данных вы можете использовать pg_dump.exe :

  1. Open Powershell

  2. Перейдите в папку bin Postgres. Например:

     cd "C:\Program Files\PostgreSQL\9. 6\bin"
     
  3. Введите команду для создания дампа базы данных. Например:

     ./pg_dump.exe -U postgres -d my_database_name -f D:\Backup\<имя-файла-резервной копии>.sql
     
  4. Введите пароль для вашего пользователя postgres

Для восстановления базы данных вы можете использовать psql.exe . (Обратите внимание, следующее извлечено из полезного ответа Александра Омельченко, который был удален по непонятным мне причинам.)

  1. Open Powershell

  2. Перейдите в папку bin Postgres. Например:

     cd "C:\ProgramFiles\PostgreSQL\9.6\bin"
     
  3. Введите команду для восстановления базы данных. Например:

     ./psql.exe -U postgres -d my_database_name -f D:\Backup\<имя-файла-резервной копии>.sql
     
  4. Введите пароль для вашего пользователя postgres

1

Я застрял здесь при создании файла дампа базы данных из-за несоответствия версий.
Поэтому я следую приведенной ниже команде, чтобы получить резервную копию и восстановить.

 pg_dump -h localhost -U postgres -p 5432 YourDbName > BackupFileName.dump
 

В качестве альтернативы вы можете попробовать приведенный ниже код cmd. Если у вас возникли проблемы с восстановлением из pgAdmin4, вы можете попробовать это.
Сначала вы должны найти путь pg_restore.exe. Обычно это

C:\Program Files\PostgreSQL\12\bin>

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

 pg_restore.exe --verbose --clean -U "postgres" --dbname имя_базы_данных c:\database.backup
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Пакетный файл

— Резервное копирование Postgresql с .

bat в Windows

Задавать вопрос

спросил

Изменено
2 года, 1 месяц назад

Просмотрено
11 тысяч раз

Я хочу создать резервную копию базы данных postgresql с файлом .bat в Windows

Я пробовал с этим кодом:

 @echo off
for /f "tokens=1-4 delims=/" %%i in ("%date%") do (
  установить dow=%%i
  установить месяц=%%j
  установить день=%%k
  установить год=%%l
)
установить datestr=%month%_%day%_%year%
эхо-датастр — это %datestr%
установить BACKUP_FILE=odoo_%datestr%.backup
эхо имя файла резервной копии: %BACKUP_FILE%
УСТАНОВИТЬ PGPASSWORD=openpgpwd
эхо на
bin\pg_dump -i -h localhost -p 5432 -U openpg -F c -b -v -f %BACKUP_FILE% формирование
 

Но я ничего не получил.

И с этим кодом:

 @echo off
SET PG_BIN="C:\Program Files\OpenERP 7.0-20150818\PostgreSQL\bin\pg_dump.exe"
НАБОР PG_HOST=локальный хост
НАБОР PG_PORT=5432
SET PG_DATABASE=формирование
НАБОР PG_USER=openpg
УСТАНОВИТЕ PG_PASSWORD = openpgpwd
НАБОР PG_PATCH=D:\odoo
НАБОР ФЕЧАЙХОРА=%дата:/=%-%время:-0,8%
НАБОР ФЕЧАЙХОРА=%ФЕЧАЙХОРА::=-%
НАБОР ФЕЧАЙХОРА=%ФЕЧАЙХОРА: =0%
НАБОР PG_FILENAME=%PG_PATH%\%PG_DATABASE%-%FECHAYHORA%.sql
%PG_BIN% - i -h %PG_HOST% -p %PG_PORT% -U %PG_USER% %PG_DATABASE% > %PG_FILENAME%
 

У меня такая же проблема.

Я хочу использовать его позже в планировщике заданий Windows.

  • postgresql
  • пакетный файл
  • резервная копия

4

Этот ответ был предоставлен автором:

Думаю, это решение для всех:

 @echo Резервная база данных %PG_PATH%%PG_FILENAME%
@эхо выключено
НАБОР PG_BIN="C:\Program Files\PostgreSQL\bin\pg_dump.