Estou fazendo a replicação postgresql emitindo:
No mestre :
>select pg_start_backup('clone', true);
>\q
#tar -cz main -f main.tar.gz
(Explicação: main é o diretório de dados no meu sistema /var/lib/postgresql/9.6/main)
Então eu transfiro main.tar.gz para o slave ....
Sobre o escravo :
--Uncompressing main.tar.gz....
#tar -zxf main.tar.gz
--Copying previously created recovery.conf
#cp recovery.conf main/
--And then just starts the slave
#service postgresql start
No mestre :
--And stoping backup mode on the master:
>select pg_stop_backup();
O que recebo é que a replicação está funcionando bem e realmente funciona bem.
Mas estou com dúvida após ler a documentação oficial que após a cópia devo copiar o pg_xlog em uma etapa adicional... https://wiki.postgresql.org/wiki/Binary_Replication_Tutorial
Mas eu nunca faço isso e nunca tive um problema - faço muitos testes, como contar todas as linhas da tabela, tanto no mestre quanto no escravo e muito mais, mas o que de pior pode acontecer?
Funciona bem, até que não funciona. Então você obtém um backup que não inicia, inicia, mas não conecta o mestre para transmitir novos dados, ou talvez um que seja iniciado, mas esteja silenciosamente corrompido (improvável, mas eu não descartaria isso). Você testou esse método para um servidor muito grande sob carga muito pesada?
Se você usar
pg_basebackup
o , ele cuidará disso para você ou notificará que o backup falhou antes que você descubra isso da maneira mais difícil, ou notificará que você precisa ter um arquivo WAL separado. Dependendo de qual versão do PostgreSQL e quais opções você der aopg_basebackup
.