В интернете много различной информации о том как сделать бэкап , vacuum и reindeх баз postgresql.. Можно написать кучу bat файлов, на каждую базу и угомониться. В данном опусе собран и опробован инструмент для "ленивых" админов... Ведь нужно, не только обслужить,выполнить резервное копирование, но и предусмотреть, чтобы удалялись старые резервные копии, дабы избежать переполнения диска.
- Итак, набор состоит из 3х bat файлов, при помощи которых, мы осуществляем обслуживание и резервное копирование..
1. db_vacuum_reindex.bat - цикличное выполнение vacuum и reidex для объявленных баз массива
2. db_backup.bat - цикличное резервное копирование и анализ (удаление) старых копий
(для работы нужен еще и архиватор 7z.exe )
3. params.bat - набор параметров для работы вышеперечисленных bat файлов.
- Вводимые параметры файла (params.bat):
set WORKPATH=d:\scripts - основная директория, где хранятся скрипты и поддиректории резервных копий, темп и т.д.
set PGBASES=(base1 base2 base3 base4) - Массив обрабатываемых баз postgres
Основные директории исполняемых файлов postgres и 7z
set PGBINPATH="C:\Program Files\PostgreSQL\9.6.7-1.1C\bin"
set PATH7Z="C:\Program Files\7-Zip"
Прочие Переменные
SET PGPASSWORD= ******* - Ваш пароль на postgres
Количество дней хранения резервных копий
SET DAYSAGO=2
Подключение к sql серверу
set mhost=127.0.0.1
set mport=5432
set musername="postgres"
set mrole="postgres"
- В файле db_vacuum_reindex.bat происходит цикличный перебор всех баз объявленного массива vacuum и reidex
for %%i IN %PGBASES% DO (
echo start vacuum %%i >>%logfile%
%PGBINPATH%\vacuumdb.exe --dbname %%i --host %mhost% --port %mport% --username %musername% --no-password --echo --full --analyze >>%logfile%
Реиндексация
%PGBINPATH%\reindexdb.exe --dbname %%i --host %mhost% --port %mport% --username %musername% --no-password --echo >>%logfile%
...
- В файле db_backup.bat происходит резервное копирование
for %%i IN %PGBASES% DO (
@echo ******* %%i ******** >>%logfile%
%PGBINPATH%\pg_dump --dbname %%i --host %mhost% --port %mport% --username %musername% --role %mrole% --no-password --file %PGTMP%\%%i_%f_name%.pgsql.backup >>%logfile%
....
архивирование
%PATH7Z%\7z.exe a -tzip %PGTMP%\%%i_%f_name%.pgsql.zip %PGTMP%\%%i_%f_name%.pgsql.backup >>%logfile%
После чего происходит анализ поддиректорий резервных копий и удаление ненужных
-----------------------------------------------------
Состав zip файла поставки:
db_backup.bat
db_vacuum_reindex.bat
params.bat
Послесловие: Можно доработать механизм хранения резервных файлов до хранения и помесячно.. Все в Ваших руках...
Вот и все! Удачи Вам и хорошего дня)
P.S. Недавно у клиента начал сыпаться ssd.. 3 базы умерло, бекап спас) Восстановление созданных батниками бекапов идет через psql и лучше всего в созданную чистую базу (тоже через psql). 1с сервер подключаете к базе стандартными методами.