Задумал я архивировать базы PostgreSQL…
Желание похвальное. Тем более, что может статься, что когда-нибудь кто-нибудь «грохнет» свою базу, а тут я, как чёрт из табакерки, с архивной копией… Рыцарь в белых доспехах, да и только!!!
🙂
Надо сказать, что PostgreSQL у меня работает на Windows Server, обслуживает базы 1С…
Появились у меня мысли:
- мне лень;
- мне лень менять скрипт архивирования баз PostgreSQL в случае добавления/удаления баз;
🙂
Получился вполне себе скромный скрипт, который делает всё, что мне нужно.
Вот его текст:
@echo off
rem Скрипт архивирования всех баз PostgreSQL
rem Путь к исполняемым файлам PostgreSQL
set PGBINPATH=C:\Program Files\PostgreSQL\9.6.7-1.1C\binrem Путь к папке с архивами
set BACKUPPATH=F:\Program Files\Postgresrem Переходим в папку с исполняемыми файлами PostgreSQL
c:
cd «%PGBINPATH%»rem Получаем список всех баз PostgreSQL
psql -A -q -t -U postgres -c «select datname from pg_database» > C:\Windows\Temp\pgbases.txt
rem для каждой БД создадим собственную поддиректорию в BACKUPPATH
for /F %%B in ( C:\Windows\Temp\pgbases.txt ) do ( mkdir «%BACKUPPATH%\%%B» )
rem делаем архивную копию каждой базы
for /F %%B in ( C:\Windows\Temp\pgbases.txt ) do ( pg_dump -U postgres %%B > «%BACKUPPATH%\%%B\%%B-%date%-%time:~0,2%.%time:~3,2%.%time:~6,2%.dump» )
В папке с архивами для каждой базы создаётся своя директория, в которую-то и сохраняются архивные копии.
PS.
Слишком старые архивные копии удаляются отдельным скриптом. 🙂
PPS.
В Linux я создал файл ~/postgresbackup.sh со следующим содержимым
#!/bin/bash
PATH=»/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin»
myfile=»/root/pgbases.txt»
backupdir=»/mnt/raid5/backup/postgres»
mydate=`date`# Получаем список всех баз PostgreSQL
psql -A -q -t -U postgres -c «select datname from pg_database» > $myfilefor var in $(cat $myfile)
do
echo «BackUp DB $var»# для каждой БД создадим собственную поддиректорию
mkdir -p «$backupdir/$var»# делаем архивную копию каждой базы
pg_dump -U postgres $var > «$backupdir/$var/$mydate.dump»done