Replicando banco de dados PostgreSQL

Nesse artigo será descrito o processo de como fazer replicação de dados PostgreSQL usando a ferramenta Slony. O Slony inclusive suporta múltiplos masters. Também é interessante observar que a replicação de dados através dessa ferramenta pode ser feita entre versão 7 e 8 do PostgreSQL sem problemas, podendo ser usado para migrar os dados da versão 7 para 8 de forma bastante simples.

[ Hits: 70.012 ]

Por: Rafael Donato em 09/05/2006


Configurações necessárias



Será necessário, para que não apareçam erros do tipo "senha não fornecida", que o arquivo ~/.pgpass seja criado com o seguinte conteúdo, nos dois servidores do cluster:

hostname:port:database:username:password

Nesse arquivo, todos os dados serão referentes ao próprio servidor onde esse arquivo está. Caso seja necessário, coloque vários, um em cada linha, no arquivo. É preciso também setar a permissão para esse arquivo:

# chmod 0600 ~/.pgpass

Para facilitar nosso trabalho, vamos agora exportar algumas variáveis de ambiente em ambos os servidores envolvidos no processo de replicação. Abra o arquivo /etc/profile e inclua o seguinte conteúdo:

CLUSTERNAME=nome_do_cluster
MASTERDBNAME=nome_do_banco_master
SLAVEDBNAME=nome_do_banco_slave
MASTERHOST=host_do_master
SLAVEHOST=host_do_slave
REPLICATIONUSER=super_usuário_do_postgres

export CLUSTERNAME MASTERDBNAME SLAVEDBNAME MASTERHOST SLAVEHOST REPLICATIONUSER

Depois digite:

# source /etc/profile

Normalmente usa-se postgres para a variável REPLICATIONUSER.

O Slony depende que as bases tenham pl/pgSQL procedural language instalado, então será necessário dar o seguinte comando:

# createlang plpgsql -h $MASTERHOST -U $REPLICATIONUSER $MASTERDBNAME

O Slony não cria automaticamente a estrutura do banco, então é necessário gerar um dump da estrutura antes de replicar no servidor slave.

No Master digite:

# pg_dump -s -U $REPLICATIONUSER -h $MASTERHOST $MASTERDBNAME > dump.sql

Copie o arquivo dump.sql para o servidor slave e no servidor slave digite:

# createdb -U postgres $SLAVEDBNAME
# cat dump.sql | psql -U $REPLICATIONUSER -h $SLAVEHOST $SLAVEDBNAME


Página anterior     Próxima página

Páginas do artigo
   1. Instalação
   2. Configurações necessárias
   3. Criando os scripts necessários
   4. Finalizando
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Instalando PostgreSQL 8.1 com extensão para dados espaciais (PostGis) e interface de gerenciamento (PgAdmin3)

PostgreSQL - Instalação inicial no Debian Wheezy 64 bits

PostgreSQL no Slackware - Importando e Exportando arquivos TXT e CSV

Programando PostgreSQL + PHP

Como instalar Postgres 8 no Linux em 10 passos rápidos

  
Comentários
[1] Comentário enviado por epgielow em 09/05/2006 - 16:12h

Otimo artigo, parabens!

[2] Comentário enviado por joaocosme em 09/05/2006 - 16:14h

eu vo ter q setar tabela por tabela q ira ser replicada?

[3] Comentário enviado por rdal em 09/05/2006 - 16:28h

à pergunta de joaocosme, sim.

[4] Comentário enviado por rdal em 09/05/2006 - 16:28h

No script é necessário explicitar todas as tabelas que irão participar do processo de replicação. Respondendo à pergunta de joaocosme, sim.

[5] Comentário enviado por kurt3dfx em 03/07/2006 - 14:05h

Pessoal o meu scritp estabelece_comunicacao_replicacao.sh está dando este erro :
<stdin>:43: ERROR: syntax error at or near _EOF_

Alguem sabe me explicar o que pode ser ?

[6] Comentário enviado por kurt3dfx em 03/07/2006 - 14:19h

resolvi hehe coisa de noob mesmo xD

só uma coisa agora
eu tenho um schema public e quando eu monto o script ele cria um _public com umas tabelas lá... o schema não seria o das tabelas ?

[7] Comentário enviado por kurt3dfx em 03/07/2006 - 15:55h

ja consegui tb !!! :DDDDDDDDDDD

[8] Comentário enviado por rdal em 04/07/2006 - 01:49h

Não, ele cria um esquema separado para a replicação.
:)

[9] Comentário enviado por kurt3dfx em 06/07/2006 - 11:48h

cara, como que automatiza isso na inicialização do servidor ? so o script não inicia... tem q ter o slon configurado

[10] Comentário enviado por kurt3dfx em 10/07/2006 - 12:21h

hein rdal, o ./replicacao_start é pra iniciar a replicação independente de dar um slon no console nao é ?? só que ele não inicia
dá uma luz ae :D
tranks

[11] Comentário enviado por diegotolentino em 01/08/2006 - 09:37h

Seu artigo é otimo e estou pensando em utilizalo em detrimento de uns scripts que estou tendo que manter no braço(e apanhando igual cabrito na horta). Agora algumas perguntas

1. a conexão entre o master e o slave é persistente? se sim, não tem como fazer um buffer e executar a replicação em intervalos de tempo (tipo usando o cron)? se for persistente tenho que abrir um handler para cada slave que eu quiser atualizar?

2. fazendo as minhas estruturas corretamente, mantendo um intervalo de primarykey reservadas para cada banco, eu poderia ter update/insert/delete no slave tambem?

[12] Comentário enviado por andersonaa em 30/08/2006 - 12:30h

O que pode ser este erro:
<stdin>:6: Error: namespace "_voipix" already exists in database of node 1
<stdin>:6: ERROR: no admin conninfo for node 134590736

[13] Comentário enviado por diegotolentino em 24/11/2006 - 17:00h

como eu resolveria o problema abaixo, onde devo ir?

<stdin>:6: fe_sendauth: no password supplied
<stdin>:6: ERROR: no admin conninfo for node 134594832

[14] Comentário enviado por diegotolentino em 28/11/2006 - 15:46h

Amigo voce pode me ajudar a resolver o problema abaixo?

isso da quando vou executar o replicacao_start.sh

NOTICE: truncate of "public"."sys_pessoa" failed - doing delete
libgcc_s.so.1 must be installed for pthread_cancel to work

[15] Comentário enviado por celiojs em 09/12/2006 - 19:04h

Muito bom seu artigo!!!!!!
Em partes atende uma necessidade que tenho:
Como eu resolveria o problema de um deles parar e esse problema ficar transparente para a minha aplicação?
Até mais, e parabéns!!!!
Célio

[16] Comentário enviado por juangaray em 03/01/2007 - 10:59h

como eu faço para criar as tabelas? para replicação???

[17] Comentário enviado por eltonramos em 20/08/2007 - 12:26h

A replicação é na hora?
Online?

[18] Comentário enviado por fdmarp em 27/04/2009 - 20:20h

Legal ... deveria haver mais iniciativas de se escrever sobre dicas de postgres

[19] Comentário enviado por aldoarendt em 21/05/2009 - 11:39h

Bom dia a todos quando executo o comando

slon $CLUSTERNAME "dbname=$MASTERDBNAME user=$REPLICATIONUSER host=$MASTERHOST"

2009-05-21 08:37:00 BRT ERROR cannot get sl_local_node_id - ERROR: schema "_teste" does not exist
2009-05-21 08:37:00 BRT FATAL main: Node is not initialized properly - sleep 10 s

[20] Comentário enviado por betolima em 20/08/2010 - 13:49h

qual seria o caminho correto?

--with-pgsourcetree=/path/to/source/postgresql-x.y.z/

path/to/source

não sei o path correto

valeu


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts