2015-07-16 2 views
0

У меня есть этот скрипт для резервного копирования баз данных PostgreSQLPostGreSQL отдельных резервных копий для различных кластеров

#!/bin/bash 
# Location to place backups. 
backup_dir="/path/to/backups/" 
#String to append to the name of the backup files 
backup_date=`date +%Y-%m-%d` 
#Numbers of days you want to keep copie of your databases 
number_of_days=7 
databases=`psql -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'` 
for i in $databases; do 
    if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then 
    echo Dumping $i to $backup_dir$i\_$backup_date 
    pg_dump -Fc $i > $backup_dir$i\_$backup_date 
    fi 
done 
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {} \; 

только один кластер был использован на сервере, так что все было в порядке. Но теперь был создан новый кластер. Поэтому я подумал, что если резервное копирование будет выполнено правильно, и если не будет, чтобы убедиться, что он будет делать резервные копии правильно для каждого кластера?

Будет ли этот сценарий проходить через каждый кластер и делать резервные копии для всех баз данных во всех кластерах? Если это так, могут возникнуть столкновения имен.

Как я могу убедиться, что он будет делать резервные копии в разных каталогах для разных кластеров?

ответ

0

Я решил это, создав второй скрипт для резервного копирования других кластерных баз данных. Ну, это не очень элегантно, но это работает. Если бы кто-нибудь мог написать более универсальный скрипт (и этот сценарий мог бы использоваться для всех резервных копий БД), поэтому он учитывал бы разные резервные каталоги и кластеры, пожалуйста, отправьте его в качестве ответа (поскольку это было бы лучшим решением)

Second сценарий выглядит так (конечно, было бы лучше объединить оба сценария в один):

#!/bin/bash 
# Location to place backups. 
     backup_dir="/path/to/backups2" 
#String to append to the name of the backup files 
     backup_date=`date +%Y-%m-%d` 
#Numbers of days you want to keep copie of your databases 
     number_of_days=1 
     databases=` psql -p 5433 -l -t | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d' ` 
     for i in $databases; do 
       if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then 
         echo Dumping $i to $backup_dir$i\_$backup_date\.gz 
         pg_dump -p 5433 -Fc $i |gzip -f > $backup_dir$i\_$backup_date\.gz 
       fi 
     done 
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {} \; 
Смежные вопросы