В интернете много различной информации о том как сделать бэкап , 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 FilesPostgreSQL9.6.7-1.1Cin"
set PATH7Z="C:Program Files7-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%
eindexdb.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
Послесловие: Можно доработать механизм хранения резервных файлов до хранения и помесячно.. Все в Ваших руках…
Вот и все! Удачи Вам и хорошего дня)
Использую следующие cmd скрипты.
для архивации
— «C:Program FilesPostgreSQL9.6.6-1.1Cinpg_dump.exe» -h localhost -p 5432 -U postgres -w -d dbNAME -F c -o -v -Z 9 -f «D:BACKUP\%date%.dbNAME.backup»
для обслуживания
— «C:Program FilesPostgreSQL9.6.6-1.1Cinvacuumdb.exe» -h localhost -p 5432 -U postgres -w -e -z -a
«C:Program FilesPostgreSQL9.6.6-1.1Cin
eindexdb.exe» -h localhost -p 5432 -U postgres -w -e -a
Кто подскажет, как доработать скрипты чтобы сохранялись логи с полным текстом обслуживания баз ?
Поидее можно сбрасывать вывод в файл >>
Например:
pg_dump —dbname %%i —host %mhost% —port %mport% —username %musername% —role %mrole% —no-password —file %PGTMP%\%%i_%f_name%.pgsql.backup >>%logfile%
где logfile — Ваш файл