Postgresql为不同的集群分别备份

时间:2015-07-16 11:54:21

标签: bash postgresql database-backups

我有这个脚本用于备份postgresql数据库

#!/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 {} \;

服务器上只使用了一个集群,所以一切都很好。但现在创建了一个新的集群。所以我开始考虑是否能正确完成备份,如果不能确保如何正确地为每个集群进行备份?

此脚本现在会遍历每个群集并为所有群集中的所有数据库执行备份吗?如果是这样,可能会有名称冲突。

我怎样才能确保它会在不同群集的不同目录中进行备份?

1 个答案:

答案 0 :(得分:0)

我通过创建第二个脚本来备份另一个群集数据库来解决这个问题。嗯,它不是很优雅,但它的工作原理。如果有人可以编写更多通用脚本(并且一个脚本可以用于所有数据库备份),那么它会考虑不同的备份目录和集群,请将其作为答案发布(因为这将是更好的解决方案)

第二个脚本看起来像这样(当然最好将两个脚本合并为一个):

#!/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 {} \;