PostgreSQL não oferece suporte a backups incrementais prontos para uso. Você deve usar uma ferramenta chamada pg_rman .
Você precisa instalar pg_rman
(se você estiver usando RedHat familly OS, você pode baixar a página rpm desta página), caso contrário, você terá que compilá-lo, antes de começar você precisará de alguns pacotes adicionais: libedit-dev, libpam-dev, postgresql- server-dev-9.2 .
Processo de instalação do pg_rman:
sudo su
cd ~
wget http://pg-rman.googlecode.com/files/pg_rman-1.2.4.tar.gz
tar xvfz pg_rman-1.2.4.tar.gz
cd pg_rman-1.2.4
make USE_PGXS=1
make USE_PGXS=1 install
ln -s /usr/lib/postgresql/9.2/bin/pg_rman /bin/pg_rman
Você deve configurar o PostgreSQL como abaixo (arquivo: /etc/postgresql/9.2/main/postgresql.conf ):
wal_level = archive
archive_mode = on
archive_command = 'cp "%p" "/mnt/pg_arclog/%f"'
pg_rman
configuração:
sudo su
mkdir /mnt/backup_pg_rman
mkdir /mnt/pg_arclog
pg_rman init -B /mnt/backup_pg_rman/ -D /var/lib/postgresql/9.2/main/
pg_rman
configuração (arquivo: / mnt / backup pg rman / pg_rman.ini ):
SRVLOG_PATH='/var/log/postgresql'
ARCLOG_PATH='/mnt/pg_arclog'
BACKUP_MODE = INCREMENTAL
COMPRESS_DATA = YES
Defina os direitos corretos para os diretórios pg_rman:
sudo su
chown -R postgres:postgres /mnt/backup_pg_rman
chown -R postgres:postgres /mnt/pg_arclog
Backups de disparo:
cheio
pg rman backup -B / mnt / backup pg_rman / –pgdata = / var / lib / postgresql / 9.2 / main / -b full
incremental
pg rman backup -B / mnt / backup pg_rman / –pgdata = / var / lib / postgresql / 9.2 / main /
Envie backup para S3. Basta criar um arquivo ~/send_backup_to_s3
(como usuário postgres e adicionar direitos de execução chmod +x ~/send_backup_to_s3
) e colar as seguintes linhas:
#!/bin/bash
DAY=`ls -lt /mnt/backup_pg_rman/ | grep $USER | grep -vE "tar|gz" | head -n 1 | awk {'print $9'}`
BACKUP=`ls -lt /mnt/backup_pg_rman/$DAY | grep $USER | grep -vE "tar|gz" | head -n 1 | awk {'print $9'}`
LOCAL_STORE='/mnt/backup_pg_rman/'$DAY
BACKUP_NAME=$LOCAL_STORE/$DAY_$BACKUP.tar.gz
DIRECTORY_TO_BACKUP=/mnt/backup_pg_rman/$DAY/$BACKUP
if [ ! -f $BACKUP_NAME ]
then
tar cfzP $BACKUP_NAME $DIRECTORY_TO_BACKUP
s3cmd put $BACKUP_NAME s3://backup/pg_rman/
fi
Backup automático por cron, por exemplo, um backup completo por dia e um backup incremental por hora.
10 7 * * 1-5 /bin/bash -l -c 'source /etc/environment && pg_rman backup -B /mnt/backup_pg_rman/ --pgdata=/var/lib/postgresql/9.2/main/ -b full && pg_rman validate -B /mnt/backup_pg_rman ~/send_pg_rman_backup_to_s3'
20 */1 * * 1-5 /bin/bash -l -c 'source /etc/environment && pg_rman backup -B /mnt/backup_pg_rman/ --pgdata=/var/lib/postgresql/9.2/main/ && pg_rman validate -B /mnt/backup_pg_rman && ~/send_pg_rman_backup_to_s3'
Aproveitar.