Contexto: replicação master-slave no Postgres 9.4, slave morreu algumas semanas atrás:
- o escravo copiou um arquivo WAL do mestre,
- disse ao mestre que o arquivo foi copiado,
- o mestre excluiu o arquivo wal,
- o escravo tentou reproduzir o arquivo wal corrompido,
- descobriu que o arquivo está corrompido,
- e desiste de começar.
Enquanto isso, o mestre acumulou mais logs do que o próprio banco de dados.
Como posso dizer ao mestre que a replicação acabou (para reconfigurar a replicação)? Algum comentário geral sobre como proceder com esta situação?
Você deve estar usando um slot de replicação. Está fazendo com que o mestre retenha os arquivos de log, porque ainda acha que a réplica precisará deles. (Esse é o propósito de um slot de replicação). Encontre o slot e exclua-o . Em seguida, crie um novo para a nova réplica que você precisará semear.
pg_archivecleanup
comando em alguns sistemas operacionais (por exemplo, Windows Server) e configurações NAS podem ser falsamente instruídos de que o arquivo não pode ser excluído em algumas de suas verificações internas (embora as permissões de arquivo permitam excluir o arquivo), embora se as verificações forem omitidas internamente, o arquivo foi excluído com sucesso.Isso resolve alguns dos problemas que perguntei, ainda não está claro como "cancelar o registro" de um escravo em espera. Se o escravo se foi
SELECT * FROM pg_replication_slots
está vazio. Se uma replicação for reinstalada, talvez seja necessário aumentarmax_wal_senders
, pois uma conexão continua sendo usada pela replicação "antiga".