Postgresql бэкап windows: Резервное копирование и восстановление «1С»-баз на PostgreSQL в Windows c помощью pgAdmin, bat-файлов и планировщика / Хабр
Содержание
Резервное копирование и восстановление «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
Создание бэкапа базы PostgreSQL для Windows
В PostgreSQL есть утилита, которая создает дамп базы данных и называется она pg_dump. Для того чтобы автоматизировать процесс создания бэкапов баз PostgreSQL нужно будет создать bat-файл, который будет вызывать утилиту pg_dump и вызывать его с помощью планировщика заданий. Результатом выполнения такого сценария будет ежедневное копирование базы данных PostgreSQL, ведение журнала с информацией о датах и результатах выполнения, сохранение подробных сведений о ходе выполнения каждой резервной копии в отдельный текстовый файл и в случае неудачи отображение диалогового окна с сообщением. Содержимое bat-файла следующее:
REM ПРИМЕР СОЗДАНИЯ РЕЗЕРВНОЙ КОПИИ БАЗЫ ДАННЫХ POSTGRESQL CLS ECHO OFF CHCP 1251 REM Установка переменных окружения SET PGBIN=c:\Program Files\PostgreSQL\9.2.4-1.1C\bin SET PGDATABASE=ut SET PGHOST=localhost SET PGPORT=5432 SET PGUSER=postgres SET PGPASSWORD=123456 REM Смена диска и переход в папку из которой запущен bat-файл %~d0 CD %~dp0 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="Backup\%DUMPFILE%" SET LOGPATH="Backup\%LOGFILE%" REM Создание резервной копии IF NOT EXIST Backup MD Backup CALL "%PGBIN%\pg_dump.exe" --format=custom --verbose --file=%DUMPPATH% 2>%LOGPATH% REM Анализ кода завершения IF NOT %ERRORLEVEL%==0 GOTO Error GOTO Successfull REM В случае ошибки удаляется поврежденная резервная копия и делается соответствующая запись в журнале :Error DEL %DUMPPATH% MSG * "Ошибка при создании резервной копии базы данных.Смотрите backup.log." ECHO %DATETIME% Ошибки при создании резервной копии базы данных %DUMPFILE%. Смотрите отчет %LOGFILE%. >> backup.log GOTO End REM В случае удачного резервного копирования просто делается запись в журнал :Successfull ECHO %DATETIME% Успешное создание резервной копии %DUMPFILE% >> backup.log GOTO End :End
Справочную информацию о командах, испульзуемых в этом файле можно получить из командной строки набрав следующую команду: «[Имя команды] /?»
Многие использованные здесь команды достаточно распространены и известны, поэтому хочется акцентировать внимание на нескольких менее известных.
Строки 15, 16 выполняют переход в папку в которой находится файл «backup.bat». «%0» возвращает имя bat-файла; «%~d0» и «%~dp0» возвращают соответственно диск и путь к bat-файлу. Подробные сведения о работе с параметрами файла можно посмотреть по этой ссылке.
В строке 19 формируется строковое представление даты и времени в нужном формате. При формировании происходит обращение к переменным окружения DATE и TIME, которые хранят текстовое представление даты и времени соответственно. После имени переменной указывается строка вида «:~m,n», где m — позиция в строке, n — количество символов.
В строке 27 вызывается утилита резервного копирования pg_dump.exe. Вызов выполняется с применением команды CALL, это позволяет дождаться завершения утилиты и проанализировать результат выполнения. Вызов утилиты завершается строкой «2>%LOGPATH%». Эта строка означает что поток ошибок STDERR, номер которого 2, приложения pg_dump.exe перенаправляется в файл, имя которого сохранено в переменной окружения LOGPATH. Так как приложение pg_dump.exe выводит все сообщения в стандартный поток ошибок, то в файле LOGPATH будет сохранен подробный отчет о выполнении резервного копирования.
В строках 37 и 42 выполняется перенаправление вывода в файл backup.log. Перенаправление осуществляется оператором «>>». Различие между операторами «>» и «>>» в том, что первый каждый раз создает новый файл, затирая ранее записанные данные, а второй — дописывает данные в существующий файл. Таким образом можно вести журнал с подробными сведениями о результатах резервного копирования.
Проверяем как работает bat-файл. Если дампы базы создаются, то можно приступать к созданию задачи для планировщика заданий Windows.
Создаем задание, которое будет запускать bat-файл каждый день в ночное время.
Ежедневные бэкапы со временям породят проблему свободного пространства на жестком диске. Можно чистить ручками, но лучше уж автоматизацию сделать полной. Решается этот вопрос также созданием bat-файла и задачи в планировщике заданий Windows.
Содержимое bat-файла такое:
forfiles /p "E:\BACKUP\Backup" /S /D -5 /C "cmd /c del /f /a /q @file"
Здесь указана команда при выполнении которой будут удаляться файлы старше 5 дней.
В планировщике заданий можно создать задачу на исполнения этого bat-файла раз в неделю.
Резервное копирование и восстановление базы данных PostgreSQL в Windows
Postgres предлагает три принципиально разных подхода к резервному копированию своих данных:
- Дамп SQL (или логический)
- Резервное копирование на уровне файловой системы (или физическое)
- Непрерывное архивирование (или восстановление на определенный момент времени)
В этой статье описывается, как создавать резервные копии баз данных PostgreSQL в Windows. Если вам нужно сделать резервную копию баз данных PostgreSQL в Linux, мы рекомендуем вам ознакомиться с этой статьей: Как автоматизировать резервное копирование баз данных PostgreSQL в Linux.
Теперь давайте обсудим эти три метода один за другим, но если вы предпочитаете инструменты с графическим интерфейсом, вы можете использовать наше бесплатное приложение для создания резервных копий базы данных, которое, по сути, является мощной оболочкой для pg_dump, которая создает дампы SQL.
Как создать файл дампа PostgreSQL
В Postgres для извлечения базы данных в файл сценария или другой архивный файл используется утилита pg_dump. Важным преимуществом этой утилиты является то, что вы можете восстанавливать ее дампы на более новых версиях PostgreSQL или на машинах с другой архитектурой. Другие методы резервного копирования, такие как резервное копирование на уровне файлов и непрерывное архивирование, привязаны к конкретной версии и архитектуре сервера.
Простейшее использование этой команды:
pg_dump имя_базы_данных > database.sql
или:
pg_dump имя_базы_данных -f database.sql
Эта команда создает файл SQL, содержащий команды, необходимые для воссоздания базы данных в том же состоянии, в котором она находилась во время резервного копирования.
Если вы получили сообщение об ошибке «pg_dump не распознается как внутренняя или внешняя команда», добавьте путь к каталогу bin PostgreSQL в переменную среды PATH (в моем случае это «C:\Program Files\PostgreSQL\11\bin»). ). Вариант изменения переменной окружения — запуск команды с полным путем, например:
«C:\Program Files\PostgreSQL\11\bin\pg_dump» имя_базы_данных > database.sql
Команда должна быть запущена пользователем с привилегиями для чтения всей информации базы данных. Если у вашего пользователя Windows недостаточно прав для вашей базы данных, вы можете запустить эту команду от пользователя Postgres:
pg_dump -U postgres имя_базы_данных > database.sql
Запуск pg_dump в пакетном режиме (автоматический)
Если вы планируете автоматически создавать резервные копии базы данных, вам может потребоваться избавиться от запроса пароля. Это будет полезно, если вы запускаете резервное копирование в пакетном режиме или сценариях, где нет пользователя для ввода пароля. Вы можете сделать это, назначив пароль переменной PGPASSWORD:
УСТАНОВИТЬ PGPASSWORD=мой_пароль pg_dump -U postgres имя_базы_данных > database.sql
В качестве альтернативы, если вы не хотите хранить пароль в пакетном файле, вы можете поместить учетные данные в %APPDATA%\postgresql\pgpass.conf в следующем формате:
имя хоста:порт:база данных:имя пользователя:пароль
Звездочки могут заменить имя хоста и базу данных.
Следующие команды создадут каталог и добавят запись в файл одним пакетом:
компакт-диск %appdata% мкдир postgresql компакт-диск postgresql echo localhost:5432:my_database:postgres:my_password >> pgpass.conf
Резервное копирование удаленного сервера
Если вам необходимо создать резервную копию удаленного сервера, добавьте параметры -h и -p:
pg_dump -h host_name -p port_number имя_базы_данных > база данных.sql
Если схема вашей базы данных содержит OID (например, внешние ключи), вы должны заставить pg_dump выгружать и OID, используя параметр -o. Если ваше приложение никаким образом не ссылается на столбцы OID, эту опцию использовать не следует.
Резервное копирование одной таблицы
Для создания дампа одной таблицы используйте параметр -t:
pg_dump -t имя_таблицы имя_базы_данных > table.sql
В этом случае pg_dump не будет создавать дамп любых других объектов базы данных, связанных с выбранной таблицей. Это означает, что нет никакой гарантии, что вы сможете без ошибок восстановить этот дамп на чистой базе данных.
В старых (до 8.2) версиях PostgreSQL параметр -t имя_таблицы выводил все таблицы с указанным именем. Современные движки Postgres сбрасывают все видимое в ваш путь поиска по умолчанию. Если вы хотите вернуться к старому поведению, вы можете написать -t «*.имя_таблицы» .
Кроме того, вы должны написать что-то вроде -t имя_схемы.имя_таблицы , чтобы выбрать таблицу определенной схемы вместо старых опций, таких как -n имя_схемы -t имя_таблицы .
Сжатие сценария резервного копирования
Если вам нужно сжать выходной файл, вы должны использовать параметр -Z:
pg_dump -Z6 имя_базы_данных > database.gz
Эта команда вызывает сжатие всего выходного файла, как если бы он был загружен через gzip с уровнем сжатия 6 (может варьироваться от 0 до 6).
Другой способ получить файл резервной копии меньшего размера — использовать пользовательский формат файла для резервной копии.
Как восстановить файл дампа PostgreSQL
Поскольку текстовые файлы, сгенерированные pg_dump, содержат набор команд SQL, их можно передать утилите psql. Сама база данных не будет создана psql, поэтому вы должны сначала создать ее самостоятельно из template0. Итак, общая форма команды для восстановления дампа:
createdb -T template0 имя_базы_данных psql имя_базы_данных < database.sql
Прежде чем приступать к восстановлению дампа SQL и воссозданию объектов с первоначальным владельцем и/или разрешениями, крайне важно убедиться, что все пользователи, которым были предоставлены разрешения на доступ к объектам или владеющие объектами в загруженной базе данных, уже существует. В противном случае процесс восстановления завершится неудачно.
Восстановление удаленной базы данных
Если вам необходимо восстановить базу данных на удаленном сервере, вы можете подключить к ней psql с помощью опций -h и -p:
psql -h имя_хоста -p номер_порта имя_базы_данных < database.sql
Можно создавать дамп базы данных напрямую с одного сервера на другой благодаря возможности pg_dump и psql записывать или читать из каналов, например:
pg_dump -h исходный_хост имя_базы | psql -h host_host имя_базы_данных
Эта команда создаст копию базы данных:
createdb -T template0 new_database pg_dump существующая_база данных | psql new_database
Обработка ошибок
При возникновении ошибки SQL сценарий psql продолжает выполняться; это по умолчанию. Такое поведение можно изменить, запустив psql с переменной ON_ERROR_STOP, а при возникновении ошибки SQL выполнить выход из psql со статусом выхода 3.
psql --set ON_ERROR_STOP=on имя_базы_данных < database.sql
В случае ошибки вы получаете частично восстановленную базу данных. Чтобы избежать этого и завершить восстановление, либо полностью успешное, либо с полным откатом, настройте восстановление всего дампа как одну транзакцию. Для этого используйте параметр -1 для psql:
psql --set ON_ERROR_STOP=on -1 имя_базы_данных < database.sql
Как сделать резервную копию нескольких баз данных PostgreSQL одновременно
Pg_dump может создавать дамп только одной базы данных за раз, и информация о табличных пространствах или ролях не будет включена в этот дамп. Это происходит потому, что они не для каждой базы данных, а для всего кластера. Существует программа pg_dumpall, поддерживающая удобный сброс всего содержимого кластера базы данных. Он сохраняет определения ролей и табличных пространств (данные всего кластера) и выполняет резервное копирование каждой базы данных в данном кластере. pg_dumpall работает следующим образом: он выдает команды для повторного создания табличных пространств, пустых баз данных и ролей, а затем вызывает pg_dump для каждой базы данных. Хотя каждая база данных будет внутренне непротиворечивой, моментальные снимки разных баз данных могут быть не полностью синхронизированы.
Основное использование этой команды следующее:
pg_dumpall > all_databases.sql
Psql и опция -f могут быть использованы для восстановления результирующего дампа:
psql -f all_databases.sql postgres
Независимо от того, какая база данных к которому вы подключаетесь, файл сценария, созданный с помощью pg_dumpall, будет содержать все необходимые команды для создания и подключения к сохраненным базам данных.
Как создать резервную копию PostgreSQL в архивный файл пользовательского формата
Хотя простой текстовый формат, создаваемый pg_dump, является естественным и простым, в то же время он не очень гибкий, поскольку может создавать огромные выходные файлы. В качестве альтернативы PostgreSQL имеет приятную небольшую функцию, которая позволяет пользователям экспортировать так называемый «пользовательский формат», формат, который архивируется по умолчанию (без дополнительных шагов) и обеспечивает значительную гибкость, особенно при повторном импорте.
Чтобы создать файл резервной копии в пользовательском формате дампа, необходимо добавить параметр -Fc:
pg_dump -Fc имя_базы_данных > database.dump
Этот формат файла должен использоваться с pg_restore для перестроения базы данных. Это позволяет pg_restore выбирать, что восстанавливать, или даже переупорядочивать элементы перед восстановлением. Форматы архивных файлов предназначены для передачи между архитектурами.
Чтобы восстановить пользовательский формат файла, используйте следующую команду:
pg_restore -d имя_базы_данных database.dump
С помощью параметра -j можно значительно сократить время восстановления большой базы данных на сервер, работающий на многопроцессорной машине. Это достигается за счет выполнения самых трудоемких частей pg_restore, а именно тех, которые загружают данные, создают ограничения или создают индексы с помощью нескольких одновременных задач. Каждое задание представляет один поток или один процесс; он использует отдельное соединение с сервером и зависит от операционной системы. Например, эта команда восстановит базу данных в четырех одновременных заданиях:
pg_restore -j 4 -d имя_базы_данных database.dump
Используйте следующее, чтобы удалить базу данных и воссоздать ее из дампа:
dropdb имя_базы_данных pg_restore -C -d имя_базы_данных database.dump
При использовании параметра -C данные всегда восстанавливаются в соответствии с именем базы данных, указанным в файле дампа.
Выполните следующее, чтобы перезагрузить дамп в новую базу данных:
createdb -T template0 имя_базы_данных pg_restore -d имя_базы_данных database.dump
Другие форматы резервных копий PostgreSQL
pg_dump предоставляет два других формата выходных файлов: каталог и tar. Оба они восстанавливаются с помощью утилиты pg_restore.
Чтобы создать архив в формате каталога, необходимо использовать параметр -Fd:
pg_dump -Fd имя_базы_данных -f database.dump
Будет создан каталог с одним файлом для каждой таблицы и BLOB-объекта дампа, а также так называемый файл Table of Contents, описывающий объекты дампа в машиночитаемом формате, который может прочитать pg_restore. Стандартные инструменты Unix могут использоваться для управления архивом в формате каталога; например, инструмент gzip можно использовать для сжатия файлов в несжатом архиве. Этот формат поддерживает параллельные дампы, сжатые по умолчанию.
Формат tar совместим с форматом каталога: при извлечении архива в формате tar создается действительный архив в формате каталога. Однако формат tar не поддерживает сжатие. Кроме того, при использовании формата tar нельзя изменить относительный порядок элементов данных таблицы в процессе восстановления.
Чтобы создать tar-файл, используйте параметр -Ft:
pg_dump -Ft имя_базы_данных -f database.tar
Как создать резервную копию определений объектов базы данных
Время от времени возникает необходимость резервного копирования только определений объектов базы данных, что позволяет восстановить только схему. Это может быть полезно на этапе тестирования, когда вы не хотите оставлять заполненными старые тестовые данные.
Используйте следующую команду для резервного копирования всех объектов во всех базах данных, включая роли, базы данных, табличные пространства, таблицы, схемы, индексы, функции, триггеры, ограничения, привилегии, представления и права собственности:
pg_dumpall --schema-only > определения .sql
Используйте следующую команду для резервного копирования только определения роли:
pg_dumpall --roles-only > roles.sql
Используйте следующую команду для резервного копирования определения табличных пространств:
pg_dumpall --tablespaces-only > tablespaces.sql
Резервное копирование на уровне файловой системы
Альтернативной стратегией резервного копирования является прямое копирование файлов, которые PostgreSQL использует для хранения данных в базе данных. Можно использовать любой метод резервного копирования файловой системы, например:
xcopy «C:\Program Files\PostgreSQL\11\data» «D:\backup» /E
Затем вы сможете запустить новый экземпляр сервера с тем же именем выпуска в этой папке (обратите внимание, что вы должны запустить эту команду на уровне администратора):
pg_ctl start -D «D:\backup»
Этот метод дает следующие преимущества:
- Быстрее, чем логическое резервное копирование (дамп SQL), так же быстро, как простое копирование файлов
- Резервное копирование всего экземпляра (кластера)
- Не вызывает конфликта блокировок и не зависит от других подключений, освобождающих свои блокировки
- Практически мгновенный процесс восстановления — нет необходимости выполнять операторы SQL для возврата данных
и в то же время подразумевает некоторые ограничения:
- Требует закрытия БД
- Можно восстановить только на той же основной версии PostgreSQL
- Отдельные базы данных или отдельные таблицы не могут быть восстановлены: необходимо восстановить все или ничего
- Создает очень большие резервные копии, поскольку включает все индексы и раздувание и поэтому может быть намного больше, чем дампы SQL
Непрерывное архивирование
Метод непрерывного архивирования сочетает резервное копирование на уровне файловой системы с резервным копированием файлов WAL (в котором сохраняются все изменения, внесенные в файлы данных базы данных). Этот способ более сложен в администрировании, чем любой из предыдущих подходов, но он имеет ряд существенных преимуществ:
- В качестве отправной точки нет необходимости иметь идеально непротиворечивую резервную копию файловой системы. Воспроизведение журнала исправит любое внутреннее несоответствие в резервной копии (это не имеет существенного отличия от того, что происходит во время восстановления после сбоя). Таким образом, вам не нужно создавать снимок файловой системы, достаточно tar или аналогичного средства архивации.
- Непрерывного резервного копирования можно добиться, просто продолжая архивировать файлы WAL. Это особенно ценно для больших баз данных, где не всегда удобно выполнять полное резервное копирование.
- Нет необходимости воспроизводить записи WAL до конца. Вы можете остановить воспроизведение в любой момент и получить непротиворечивый снимок существующей базы данных. Таким образом, этот метод поддерживает так называемое «восстановление на момент времени»: базу данных можно восстановить в ее состояние в любое время с момента создания резервной копии базы данных.
- Если вы постоянно передаете ряд файлов WAL на другую машину, которая была загружена с одним и тем же базовым файлом резервной копии, у вас будет система горячего резерва: вторая машина может быть запущена в любое время с почти текущей копией базы данных. .
Как и в случае простого метода резервного копирования файловой системы, этот метод может поддерживать восстановление только всего кластера базы данных, но не его подмножества. Кроме того, для этого требуется большое хранилище архивов: базовая резервная копия может быть объемной, а загруженная система будет генерировать много мегабайт трафика WAL, который необходимо архивировать. Однако этот метод резервного копирования является предпочтительным во многих ситуациях, когда требуется высокая надежность.
Мы не будем описывать все процессы настройки непрерывного архивирования, так как они исчерпывающе описаны в документации.
Как создать резервную копию базы данных PostgreSQL с помощью SQLBackupAndFTP
Если вы предпочитаете графический интерфейс для управления своими резервными копиями, вы можете попробовать нашу бесплатную утилиту под названием SQLBackupAndFTP. Внутреннее использование pg_dump повышает удобство использования и предоставляет множество других полезных функций, таких как:
- выполнение резервного копирования по расписанию
- уведомление, если что-то пошло не так
- отправка резервной копии в один из известных облачных сервисов хранения (например, Dropbox, Google Drive, Amazon S3 и т. д.)
- шифрование архива
- резервное копирование файлов
- поддержка баз данных SQL Server, My SQL и Azure
Начать работу с SQLBackupAndFTP довольно просто. После загрузки и установки подключите его к своей базе данных PostgreSQL, нажав кнопку «Gear» в разделе «Connect to Database Server». В появившемся всплывающем окне выберите PostgreSQL (TCP/IP) в качестве типа сервера, затем укажите логин/пароль. После этого нажмите «Проверить соединение», чтобы проверить, все ли в порядке, и нажмите «Сохранить и закрыть», чтобы применить все настройки:
Затем вам нужно выбрать базы данных, для которых вы хотите выполнить резервное копирование, нажав на шестеренку в разделе «Выбрать базы данных»:
» в разделе «Хранить резервные копии в выбранных местах».
Вы можете отправить резервную копию в следующие облачные службы хранения: Локальная или сетевая папка, FTP-сервер, Amazon S3, Dropbox, Google Drive, OneDrive, Box, Azure Storage, OneDrive, для бизнеса, Backblaze B2, Яндекс Диск:
Если вы хотите запускать резервное копирование по расписанию, вам необходимо настроить план резервного копирования. Вы можете сделать это следующим образом: включите переключатель рядом с заголовком «Расписание резервного копирования» и нажмите кнопку «Шестеренка», чтобы получить доступ к расширенным настройкам расписания резервного копирования:
Это все. Если вам нужно создать резервную копию прямо сейчас, нажмите «Выполнить сейчас»:
При желании, если вам нужно применить некоторые параметры pg_dump, вы можете прокрутить вниз, нажать «Дополнительные настройки…», а затем снова «Дополнительные настройки…» в раздел «Параметры резервного копирования». Это даст вам следующее окно с несколькими быстрыми опциями и возможностью добавить свои собственные:
Как восстановить базу данных PostgreSQL с помощью SQLBackupAndFTP
Есть два способа восстановить ранее созданную резервную копию с помощью SQLBackupAndFTP:
- Из панели «История и восстановление», если резервная копия была создана с помощью SQLBackupAndFTP
- Использование «Задания восстановления», если резервная копия была создана другим способом, скорее всего, непосредственно с помощью утилиты pg_dump
В первом случае вам нужно найти резервную копию, которую вы хотите восстановить, в разделе «История и восстановление» главного окна, щелкнуть значок с тремя точками и выбрать «Восстановить из резервной копии». нужно выбрать, какую базу данных из какого места вы хотите восстановить, на следующем снимке экрана есть только один вариант: на последнем шаге у вас будет возможность изменить имя базы данных (если вы не хотите перезаписывать существующую базу данных) и указать пароль архива (если вы установили его при создании архива):
Как восстановить произвольный дамп SQL с помощью SQLBackupAndFTP
Если у вас есть произвольный дамп резервной копии базы данных PostgreSQL, который вы хотите восстановить на этом компьютере, вы можете воспользоваться «Заданием восстановления», доступным в SQLBackupAndFTP. Это задание берет дамп SQL из облачного хранилища и восстанавливает его в выбранной базе данных. Процедура настройки такого задания аналогична созданию резервных копий.
Создайте «Задание восстановления», нажав «Задание» > «Добавить новое задание восстановления»:
Выберите место, где находится ваша резервная копия:
В разделе «Хранить базы данных для восстановления» выберите резервную копию, которую необходимо восстановить:
Подключитесь к вашему серверу PostgreSQL в разделе «Восстановление на сервер базы данных»:
Теперь, когда вся подготовка завершена, восстановите резервную копию, нажав кнопку «Выполнить сейчас». 0073 Резервное копирование и восстановление PostgreSQL — важный фактор безопасности данных для баз данных PostgreSQL. Handy Backup — идеальное решение для этого, позволяющее выполнять горячее резервное копирование ваших данных без остановки базы данных PostgreSQL. Раскроем все возможности автоматического резервного копирования PostgreSQL под Windows с помощью Handy Backup!
Бесплатная загрузка
Версия 8.4.4, собрана 20 января 2023 г.
116 МБ
Handy Backup предоставляет ряд важных преимуществ для идеального сохранения данных PostgreSQL без замедления рутинной работы на сервере, на котором выполняется экземпляр ядра базы данных PostgreSQL.
Совместимость Handy Backup была протестирована с PostgreSQL 15.1, 14.6, 13.9, 12.13, 11.18 и 10.2. Обратите внимание, что для PostgreSQL версии 10 и более поздних версий вам необходимо использовать Handy Backup с разрядностью 64 бита. Выбор разрядности осуществляется на этапе установки программы.
Горячее резервное копирование PostgreSQL
Handy Backup может сохранять всю информацию базы данных без остановки ядра базы данных. Все операции (включая транзакции) будут продолжаться, и пользователю, выполняющему резервное копирование данных, не нужно останавливать или частично замедлять работу сервера.
Автоматический выбор данных
Handy Backup позволяет выбрать схему резервного копирования PostgreSQL, базы данных, процедуры или настройки для сохранения с помощью инструмента под названием «PostgreSQL» для всех этих действий. Это действие работает полностью в автоматическом режиме, ища и сохраняя любые данные, выбранные пользователем.
Использование копий PostgreSQL для репликации, зеркального отображения и клонирования баз данных
Чтобы использовать автоматическое резервное копирование PostgreSQL с максимальной эффективностью, пользователь должен иметь возможность изменять, реплицировать или зеркально отображать базу данных или резервную копию схемы. Handy Backup сохраняет копии PostgreSQL в родном, читаемом формате, доступном для изменения, и позволяет клонировать и тиражировать резервные копии.
Удобный графический пользовательский интерфейс для создания задач и управления ими
Handy Backup позволяет создавать новые задачи резервного копирования и восстановления PostgreSQL за несколько шагов с помощью эффективного, но простого в использовании мастера создания задач. Переключите его в простой режим для быстрого создания задачи резервного копирования или в расширенный режим для доступа ко всем функциям Handy Backup. Управляйте всеми задачами с помощью одного и того же элегантного графического интерфейса!
В дополнение к основным преимуществам, перечисленным выше, Handy Backup предоставляет некоторые другие функции, которые делают его эффективным, быстрым и надежным программным обеспечением для резервного копирования PostgreSQL:
- Планирование резервного копирования по периоду или событию, такому как вход/выход из системы или подключение USB-накопителя;
- Полное, инкрементное, дифференциальное и смешанное резервное копирование с временными метками и версионными резервными копиями;
- Различные способы уведомления пользователей о выполненных задачах, включая электронные письма и отчеты;
- Функции управления, от запуска в качестве службы Windows до запуска других приложений с задачей;
- Встроенные инструменты для дополнительного шифрования данных, защищенных протоколов сетевого хранения и облачного API.
Handy Backup предоставляет множество современных вариантов хранения данных, в том числе:
- Локальные диски и внешние USB-диски;
- Устройства NAS, общие сетевые папки или другие сетевые машины * ;
- Файловые серверы FTP, SFTP и FTPS;
- Облачные сервисы на основе протоколов S3 и WebDAV;
- Популярное коммерческое хранилище, например OneDrive для бизнеса, Google Диск и S3.
* Доступ к локальным дискам на удаленных сетевых компьютерах возможен только после совместного использования этих дисков в качестве сетевых ресурсов или сопоставления как частей дисковой системы Windows. В качестве альтернативы вы можете подключиться к удаленным дискам, используя решение Server Network для создания и хранения файлов дампа восстановления PostgreSQL.
Рекомендуемое решение
Версия 8.4.4, сборка от 20 января 2023 г. 116 МБ
Backup Software от ООО «Новософт». 249 долларов США за лицензию.
Решение для малого бизнеса может выполнять резервное копирование, восстановление, сжатие, шифрование, клонирование и зеркалирование ваших баз данных PostgreSQL и любых других данных на одном сервере. Бесплатная 30-дневная пробная версия!
Чтобы создать задачу для автоматического резервного копирования базы данных или схемы, выполните шаги, описанные здесь:
- В Handy Backup создайте новую задачу резервного копирования. Выберите PostgreSQL в группе Database на шаге 2.
- Если у вас нет подключения к PostgreSQL, создайте новое, выбрав параметр, разрешающий это.
- Чтобы создать новое подключение, введите в диалоговое окно параметры подключения к вашей СУБД.
- Откройте существующее соединение и выберите внутри него таблицы PostgreSQL для резервного копирования.
- На шаге 3 выберите хранилище данных для набора таблиц резервного копирования PostgreS.
- В расширенном режиме выберите тип резервной копии на шаге 4. Кроме того, при необходимости настройте временные метки и сохранение версии резервной копии.
Совет: Мы не рекомендуем выбирать инкрементальное резервное копирование PostgreSQL, так как оно может не дать никакого бонуса с точки зрения места и, особенно, времени, используемого для резервного копирования. Вместо этого используйте дифференциальное резервное копирование, когда это возможно!
- Перейдите к созданию других параметров задачи, как описано в Руководстве пользователя для задач резервного копирования.
Примечание: У вас должны быть достаточные права пользователя, чтобы использовать оператор PostgreSQL SELECT для создания резервной копии PostgreSQL с помощью предоставленного инструмента.
Handy Backup сохраняет данные резервной копии PostgreSQL как обычную базу данных, и пользователи могут открывать эти резервные копии как стандартные файлы PostgreSQL, чтобы изменять, исследовать или восстанавливать информацию. Чтобы создать задачу резервного копирования восстановления PostgreSQL, выполните следующие действия:
- Создайте новую задачу. Выберите задачу восстановления на шаге 1 в простом или расширенном режиме.
- На шаге 2 откройте хранилище с файлами дампа восстановления PostgreSQL. Выберите здесь файл backup.hbi .
- Перейти к следующему шагу. Продолжайте создавать задачу, как описано в Руководстве пользователя.
Примечание: В расширенном режиме вы можете изменить место восстановления резервной копии PostgreSQL, чтобы создать клон или зеркало исходной базы данных.
Мы рекомендуем использовать только ручные методы резервного копирования и восстановления PostgreSQL при сохранении копии какой-либо базы данных, которая активно используется. Однако для регулярного резервного копирования и дополнительного восстановления после какой-либо аварии вы можете использовать полностью автоматизированный сценарий резервного копирования восстановления PostgreSQL.
В этом видео-примере мы покажем, как сделать резервную копию базы данных PostgreSQL с помощью Handy Backup. Это полное пошаговое руководство, в котором показан весь процесс создания задач для резервного копирования и восстановления PostgreSQL.
Примечание: Если у вас остались вопросы по резервному копированию PostgreSQL, не стесняйтесь задавать их нам по электронной почте или следите за нами в социальных сетях!
С помощью Handy Backup вы можете восстановить свою базу данных в другом месте, чем исходный набор данных. Используя эту технику, вы можете быстро клонировать или зеркалировать базу данных резервных копий PostgreSQL в столько копий, сколько вам нужно.
Скачать бесплатно
Версия 8.4.4, собрана 20 января 2023 г.
116 МБ
Попробуйте функцию автоматического резервного копирования PostgreSQL с помощью Handy Backup в течение 30-дневного бесплатного пробного периода , немедленно загрузив новейшую версию Handy Backup с нашего сайта!
Информация о лицензировании
Резервное копирование PostgreSQL доступно в двух версиях Handy Backup — Small Business и Server Backup.