No PostgreSQL, Backup e Recuperação são muito fáceis de usar em comparação com outros bancos de dados. Muitos deles não vão concordar com isso, ok, não vamos entrar em debate. No que diz respeito aos Backups, o PostgreSQL não suporta BACKUP INCREMENTAL, no entanto, existem ferramentas de backup muito consistentes e soluções no nível do SO para atingir esse objetivo.
Minha apresentação pictórica no PostgreSQL Backup and Recovery dá uma ideia conceitual completa. Olhando para o Diagrama, você pode descobrir quais backups podem ser usados para restaurar ou recuperar.
Backup lógico
Utilitários pg_dump,pg_restore e pg_dumpall usados para backups lógicos. pg_dump e pg_restore ajudarão a fazer backups para nível de banco de dados, nível de esquema e nível de tabela. Pg_dumpall usado para dump de nível de cluster.
Três formatos são suportados com pg_dump, formato Plain SQL, formato personalizado e formato Tar. Os dumps personalizados e de formato Tar são compatíveis com o utilitário pg_restore, enquanto os dumps do formato Plain SQL são compatíveis com o utilitário psql para restauração.
Abaixo estão os exemplos para cada nível de Backup e com os comandos de restauração relacionados.
Nota:Defina os padrões para PGDATABASE, PGUSER, PGPASSWORD e PGPORT em .bash_profile(Variáveis de ambiente no Windows)
Despejo e restauração em formato SQL simples
$ pg_dump -U username -Fp dbname > filename
or
$ pg_dump -U username dbname -f filename
or
$ pg_dump -Fp -U username dbname -f filename
For restoring use psql command
$ psql -U username -f filename dbname
or
postgres=# i SQL-file-name //in psql terminal with i option
Formato personalizado
$ pg_dump -Fc dbname -f filename
$ pg_restore -Fc -U username -d dbname filename.dmp
Formato Tar
$ pg_dump -Ft dbname -f filename
$ pg_restore -U username -d dbname filename
or
$ cat tar-file.tar | psql -U username dbname
Nota:Os dumps de Nível de Esquema e Nível de Tabelas podem ser executados da mesma maneira, adicionando opções relacionadas.
Despejo de nível de cluster:
$pg_dumpall -p portnumber > filename
For restoring use psql command
$ psql -f filename
Há uma maneira muito melhor de tomar lixeiras e restaurar métodos. Em particular, o livro de Simon Riggs e Hannu Krosing – “PostgreSQL 9 Administration Cookbook – 2010” é uma boa maneira de começar com PostgreSQL Backup and Recovery publicado por www.2ndQuadrant.com.
Backup Físico (Backup do sistema de arquivos)
Backup frio:
No backup a frio, é um backup simples do sistema de arquivos do diretório /data quando a instância do Postgres está inativa, ou seja, para obter um backup do diretório de dados auto-consistente, o servidor de banco de dados deve ser desligado antes de copiar. O PostgreSQL oferece flexibilidade para manter pg_xlog e pg_tblspce em diferentes pontos de montagem via softlink. Ao copiar o diretório /data incluindo os dados do soft link, use o comando abaixo.
tar czf backup.tar.gz $PGDATA
or
cp -r $PGDATA /backup/
or
rsync -a $PGDATA /wherever/data
Hot Backup (Backup Online):
No Hot Backup, o cluster estará ativo e em execução e o banco de dados deverá estar no modo de log de arquivamento. Duas funções do sistema notificarão a instância sobre o início e a interrupção do processo de Hot Backup (pg_start_backup(),pg_stop_backup()). Antes de prosseguir com o Backup Online, vamos discutir sobre o modo Database Archive Log, que é obrigatório para Backups Online.
Ativando o arquivamento WAL:
Próximos posts meus serão breves sobre PITR / Tunning WAL etc., atualmente analisamos o WAL Archiving. No sistema de banco de dados PostgreSQL, o banco de dados real ‘grava’ em um arquivo de adição chamado write-ahead log (WAL) no disco. Ele contém um registro das gravações feitas no sistema de banco de dados. No caso do Crash, o banco de dados pode ser reparado/recuperado a partir desses registros.
Normalmente, os logs de log de gravação antecipada em intervalos regulares (chamados de Checkpoints) correspondem ao banco de dados e, em seguida, são excluídos porque não são mais necessários. Você também pode usar o WAL como backup, pois há um registro de todas as gravações feitas no banco de dados.
Conceito de arquivamento WAL:
O log de gravação antecipada é composto por cada 16 MB de tamanho, que são chamados de segmentos. Os WALs residem no diretório pg_xlog e é o subdiretório do ‘diretório de dados’. Os nomes dos arquivos serão nomeados numericamente em ordem crescente pela Instância do PostgreSQL. Para realizar um backup com base no WAL, é necessário um backup básico, ou seja, um backup completo do diretório de dados e dos Segmentos WAL entre o backup base e a data atual.
A configuração do arquivamento de segmentos WAL pode ser escolhida definindo os dois parâmetros de configuração archive_command e archive_mode no postgresql.conf. Tornar o cluster no modo de log de arquivo requer RESTART.
archive_mode= on/off (boolean parameter)
archive_command = 'cp –i %p / Archive/Location/ f% '
Observação: %p para o arquivo a ser copiado com o caminho usado como nome de arquivo e % f sem uma entrada de diretório para o arquivo de destino.
Para mais informações sobre o Processo Archiver, consulte o post PostgreSQL 9.0 Memory &Processess.
Backup on-line:
Para fazer backup online:
Step 1 : Issue pg_start_backup('lable') in the psql terminal
postgres=# select pg_start_backup('fb');
Step 2 : OS level copy the $PGDATA directory to any Backup Location
$ cp -r $PGDATA /anylocation
Step 3 : Issue pg_stop_backup() in psql terminal.
postgres=# select pg_stop_backup();
Observação: Não é necessário que essas duas funções sejam executadas na mesma conexão de banco de dados. O modo de backup é global e persistente.
No PostgreSQL, não existe um catálogo para armazenar a hora de início e término do backup online. No entanto, quando o backup online está em andamento, alguns dos arquivos são criados e excluídos.
pg_start_backup(‘label’) e pg_stop_backup são as duas funções do sistema para realizar o Backup Online. Com pg_start_backup(‘label’) um arquivo backup_label é criado no diretório $PGDATA e com pg_stop_backup() um arquivo ‘wal-segment-number.backup’ criado em $PGDATA/pg_xlog. Backup_label fornecerá a hora de início e a localização do Checkpoint do segmento WAL, também notificará a instância do PostgreSQL que o cluster está em BACKUP-MODE. O arquivo 'wal-segment-number.backup' no diretório $PGDATA/pg_xlog descreve o horário de início e término, a localização do ponto de verificação com o número do segmento WAL.
Nota:Após pg_stop_backup(), o arquivo backup_label é excluído pela instância do PostgreSQL.
Poste seus comentários, sugestões.