Задумал я архивировать базы 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