backup e restore no PostgreSQL

Propaganda
BANCO DE DADOS WEB
AULA 8
backup e restore no PostgreSQL
professor Luciano Roberto Rocha
www.lrocha.com
Procedimentos de backup/restore
Como tudo que contém dados importantes, devem ser
feitas cópias de segurança dos bancos de dados do
PostgreSQL regularmente.
Embora o procedimento seja essencialmente simples, é
importante possuir uma compreensão básica das técnicas e
princípios subjacentes.
O PostgreSQL nos disponibiliza três ferramentas para
realização de cópias de segurança: pg_dump, pg_dumpall e
pg_restore.
As ferramentas acima descritas são programas executáveis
externos (não comandos) e podem ser encontrados na pasta
bin dentro do diretório de instalação do PostgreSQL.
2
O utilitário pg_dump
O pg_dump é um aplicativo para fazer cópia de
segurança de um banco de dados do PostgreSQL. São
feitas cópias de segurança consistentes, mesmo que o
banco de dados esteja sendo utilizado ao mesmo tempo.
O pg_dump não bloqueia os outros usuários que estão
acessando o banco de dados (leitura ou escrita).
A idéia por trás do Método SQL-dump é gerar um arquivo
texto contendo comandos SQL que, ao serem processados
pelo servidor, recriam o banco de dados no mesmo estado
em que este se encontrava quando o arquivo foi gerado.
A forma básica de utilização deste programa é:
pg_dump nome_do_banco_de_dados > arquivo_de_saída
3
O utilitário pg_dump
As cópias de segurança geradas pelo pg_dump podem ser
feitas no formato de script, personalizado ou tar.
As cópias de segurança no formato de script são arquivos de
texto puro, contendo os comandos SQL necessários para
reconstruir o banco de dados no estado em que este se
encontrava quando foi salvo.
Como estes scripts contém um conjunto de instruções SQL,
para restaurar os dados a partir destes scripts, deve ser
utilizado o terminal psql .
Os arquivos de script podem ser utilizados para reconstruir o
banco de dados até em outras máquinas com outras
arquiteturas; com algumas modificações, até mesmo em
outros produtos gerenciadores de banco de dados SQL.
4
Realizar cópias de segurança
Exemplos:
Para salvar um banco de dados:
$ pg_dump -U nome_do_usuário meu_bd > db.out
Para restaurar este banco de dados:
$ psql -U nome_do_usuário -d banco_de_dados -f db.out
Parâmetros:
-d nome_do_banco_de_dados
nome do banco de dados a se conectar.
-f nome_do_arquivo
o arquivo de backup que contém os comandos SQL (script)
-U nome_do_usuário
o usuário dono do banco a ser acessado ou um superusuário.
5
Utilizar formatos personalizados
Os formatos personalizado e tar devem ser utilizados com o
aplicativo pg_restore para reconstruir o banco de dados.
Estes formatos permitem que o pg_restore selecione o que será
restaurado, ou mesmo reordene os itens antes de restaurá-los, e
também permitem salvar e restaurar os "objetos grandes", o que
não é possível com a cópia de segurança em arquivo de script.
O formato de arquivo de saída mais flexível é o "personalizado"
(-Fc) permite a seleção e a reordenação de todos os itens da
cópia de segurança, e é comprimido por padrão.
O formato “tar” (-Ft) não é comprimido e não permite
reordenar os dados ao restaurar, mas por outro lado pode ser
manipulado pelas ferramentas padrão do Unix, como o tar ou
mesmo o winrar.
6
Utilizar formatos personalizados
O comando abaixo gera a cópia de segurança do banco de
dados utilizando o formato personalizado (custom dump format):
pg_dump -U usuário –Fc nome_do_banco_de_dados > nome_do_arquivo
Parâmetros:
F formato
Seleciona o formato da saída. O formato pode ser um dos seguintes:
p
Gera um arquivo de script SQL no formato texto-puro (o padrão)
t
Gera um arquivo tar adequado para servir de entrada para o pg_restore. A utilização deste
formato de arquivo permite reordenar e/ou excluir objetos do banco de dados ao fazer a
restauração.
c
Gera um arquivo personalizado adequado para servir de entrada para o pg_restore.
Este é o formato mais flexível, porque permite a reordenação da restauração dos dados,
assim como das definições dos objetos. Além disso, este formato é comprimido por padrão.
7
Utilizar formatos personalizados
O formato de cópia de segurança personalizado não é um script
para o psql, devendo ser restaurado pelo pg_restore.
Para restaurar o backup do banco de dados criado
anteriormente deve-se usar o seguinte comando:
pg_restore -U usuário -d
novo_banco_de_dados nome_do_arquivo
Parâmetros:
-d novo_banco_de_dados
Seleciona o banco de dados no qual os dados serão restaurados.
nome_do_arquivo
O arquivo que contém a cópia de segurança personalizada.
-U usuário
O nome do usuário do PostgreSQL dono do novo banco de dados ou um
superusuário.
8
Restauração seletiva de dados
Para reordenar os itens do banco de dados, primeiro é necessário criar um
arquivo contendo a lista de conteúdo (índice) da cópia de segurança:
pg_restore -l backup.arquivo > backup.list
O arquivo de listagem consiste de um cabeçalho e uma linha para cada
item iniciado por um número que corresponde ao seu identificador interno
de arquivamento:
; Archive created at Fri Jul 28 22:28:36 2000
;
dbname: birds
;
TOC Entries: 74
;
Compression: 0
;
Dump Version: 1.4-0
;
Format: CUSTOM
;
; Selected TOC Entries:
;
2; 145344 TABLE species postgres
3; 145344 ACL species
6; 145402 TABLE species_records postgres
8; 145416 TABLE ss_old postgres
9; 145416 ACL ss_old
10; 145433 TABLE map_resolutions postgres
11; 145433 ACL map_resolutions
12; 145443 TABLE hs_old postgres
13; 145443 ACL hs_old
9
Restauração seletiva de dados
Cada linha do arquivo pode ser transformada em comentário,
excluída ou reordenadas. Por exemplo:
10; 145433 TABLE map_resolutions postgres
;2; 145344 TABLE species postgres
;4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
;8; 145416 TABLE ss_old postgres
Se o arquivo backup.list for usado como entrada do pg_restore,
somente serão restaurados os itens 10 e 6, nesta ordem:
pg_restore -d banco -L backup.list
backup.arquivo
Onde:
-L arquivo_da_listagem
Restaura apenas os elementos presentes no arquivo_da_listagem, e na ordem
que aparecem neste arquivo.
10
Backup de bancos grandes
Como o PostgreSQL permite a existência de tabelas maiores
do que o tamanho máximo de arquivo do sistema
operacional, pode ser problemático fazer a cópia de
segurança de uma tabela como esta em um arquivo, uma vez
que o arquivo resultante provavelmente terá um tamanho
maior que o máximo permitido pelo sistema operacional.
Para superar esses possíveis problemas podemos realizar
cópias de segurança comprimidas, usando qualquer
programa de compressão disponível em modo texto.
Uma boa opção é utilizar o programa de compressão
padrão do sistema Unix chamado gzip que também está
disponível para Windows.
11
Backup de bancos grandes
Exemplo:
Para realizar um backup comprimido passamos o nome do programa
compactador como parâmetro por meio do operador | (pipe):
pg_dump -U postgres empresa
|gzip > c:\backup\empresa_bkp.gz
Para restaurar utilizamos o utilitário gunzip:
gunzip -U postgres -c c:\backup\empresa_bkp.gz |psql empresa
No Windows o aplicativo gunzip.exe nada mais é do que uma cópia
de gzip.exe renomeada, para isso execute o seguinte comando no
prompt:
copy gzip.exe gunzip.exe
12
Salvar todos os bancos de dados
O aplicativo pg_dumpall permite salvar todos os bancos de
dados de um agrupamento do PostgreSQL em um arquivo de
script.
O pg_dumpall também salva os objetos globais, comuns a
todos os bancos de dados (O pg_dump não salva estes
objetos).
Como o pg_dumpall lê tabelas de todos os bancos de
dados, muito provavelmente será necessário se conectar
como um superusuário para poder gerar uma cópia
completa.
Também será necessário o privilégio de superusuário para
executar o script produzido, para poder criar usuários e
grupos, e para poder criar os bancos de dados.
13
Salvar todos os bancos de dados
O script SQL é escrito na saída padrão. Devem ser
usados operadores de linha de comando para
redirecionar para um arquivo:
Exemplos:
Para salvar todos bancos de dados:
$ pg_dumpall > db.out
Para recarregar este banco de dados deve ser utilizado, por
exemplo:
$ psql -f db.out template1
Neste caso o banco de dados a se conectar não tem importância,
porque o arquivo de script criado pelo pg_dumpall contém os comandos
apropriados para criar e conectar aos bancos de dados salvos.
14
Salvar todos os bancos de dados
O pg_dumpall precisa conectar várias vezes ao servidor
PostgreSQL (uma vez para cada banco de dados). Se for
utilizada autenticação por senha, provavelmente será solicitada
a senha cada uma destas vezes. Neste caso é conveniente criar
o arquivo .pgpass (Unix) ou pgpass.conf (Windows)
O arquivo .pgpass, armazenado na pasta base (home) do
usuário, é um arquivo que contém senhas a serem utilizadas se a
conexão requisitar uma senha (e a senha não tiver sido
especificada de outra maneira). No Microsoft Windows o
arquivo se chama %APPDATA%\postgresql\pgpass.conf (onde
%APPDATA% se refere ao subdiretório de dados do aplicativo no perfil
do usuário).
Exemplo:
C:\Users\Marcio\APPDATA\roaming\posgresql\pgpass.conf
15
Salvar todos os bancos de dados
O arquivo pgpass deve conter linhas com o seguinte formato:
nome_do_host:porta:nome_do_banco:nome_do_usuário:senha
Os quatro primeiros valores podem ser um texto, ou * para
corresponder a qualquer coisa. Ex.:
localhost:5432:*:postgres:12345
As permissões de acesso ao arquivo .pgpass não devem
permitir o acesso por todos os usuários ou para grupos; isto é
conseguido pelo comando chmod 0600 ~/.pgpass. Se as
permissões forem mais rígidas que esta, o arquivo será ignorado
(Entretanto,atualmente as permissões não são
verificadas no Microsoft Windows).
16
Download