Não é possível encontrar o "arquivo de histórico da linha do tempo" para fazer a replicação funcionar

Não é possível encontrar o "arquivo de histórico da linha do tempo" para fazer a replicação funcionar

Estou executando o PostgreSQL 9.4, tentando iniciar a replicação.

O que estou fazendo, me inspirando noinstruções no wikiedocumentação:

  1. SELECT pg_start_backup('clone', true);
  2. rsyncdo banco de dados para a suposta réplica
  3. SELECT pg_stop_backup();
  4. rsyncda pg_xlogpasta para a suposta réplica

Eu inicio a réplica e diz:

LOG:  fetching timeline history file for timeline 3 from primary server
FATAL:  could not receive timeline history file from the primary server:
    ERROR:  could not open file "pg_xlog/00000003.history": No such file or directory

Naturalmente estou procurando o .historyarquivo pg_xlog/nos dois servidores, mas não há nenhum.

Estou folheando os documentos para descobrir isso

Para fazer uso do backup, você precisará manter todos os arquivos de segmento WAL gerados durante e após o backup do sistema de arquivos. Para ajudá-lo a fazer isso, a função pg_stop_backup cria um arquivo de histórico de backup que é imediatamente armazenado na área de arquivo WAL. Este arquivo tem o nome do primeiro arquivo de segmento WAL necessário para o backup do sistema de arquivos. Por exemplo, se o arquivo WAL inicial for 0000000100001234000055CD, o arquivo de histórico de backup terá um nome como 0000000100001234000055CD.007C9330.backup.

No entanto, acontece que depois disso pg_stop_backup()ainda não há nada parecido em pg_xlog/, nem em lugar nenhum.

Então, onde posso obter esse "arquivo de histórico da linha do tempo"?

Responder1

ConformeSeis por doispost, você poderá criar um arquivo e então ele prosseguirá com a configuração da replicação, mas essencialmente é um bug do PostgresSQL em que ele precisa desse arquivo, mesmo que não seja aplicável ou seja excluído pela operação.

Observação: Para Postgresql 10 e mais recente, a função foi renomeada parapg_current_wal_lsn()

Quando o PostgreSQL promove um novo servidor primário, ele cria um marcador da divisão da linha do tempo na forma de um pequeno arquivo de texto colocado no diretório de arquivos WAL. Este arquivo torna possível obter recuperação pontual em alguns cenários de failover e failback bastante complexos.

Parece que você terá que recriar o arquivo. Você pode encontrar um muito bom resumo do arquivo .history no wiki do Postgres. Porém, como as informações estão em .pdf, elas tendem a ser mais difíceis de indexar, então você pode ter problemas para localizar o documento se ainda não souber que ele está lá.

Mas nunca voltaremos a esse cronograma, porque é antes da nossa atualização. Tudo o que precisamos para recriar um arquivo perdido é um número bom o suficiente. E você pode conseguir um executando:

# SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 1/38F70328
(1 row)

Crie um arquivo .history em seu diretório WAL com esses valores e pronto. A réplica poderá ser iniciada imediatamente.

fonte

Crie o arquivo com esses resultados (acima), mas com o nome esperado de acordo com o erro.


Recursos adicionais

  • Compreendendo os cronogramas do PostgreSQL

  • Funções de administração do sistema

    Nome: pg_current_xlog_location()

    Tipo de retorno: texto

    Descrição: Obtenha o local atual de gravação do log de transações

    pg_current_xlog_locationexibe o local de gravação do log de transações atual no mesmo formato usado pelas funções acima. Da mesma forma, pg_current_xlog_insert_location exibe o ponto de inserção do log de transações atual. O ponto de inserção é o fim "lógico" do log de transações em qualquer instante, enquanto o local de gravação é o fim do que realmente foi gravado nos buffers internos do servidor. O local de gravação é o fim do que pode ser examinado de fora do servidor e geralmente é o que você deseja se estiver interessado em arquivar arquivos de log de transações parcialmente completos. O ponto de inserção é disponibilizado principalmente para fins de depuração do servidor. Ambas são operações somente leitura e não requerem permissões de superusuário.

    Você pode usar pg_xlogfile_name_offsetpara extrair o nome do arquivo de log de transações correspondente e o deslocamento de bytes dos resultados de qualquer uma das funções acima.

    Da mesma forma, pg_xlogfile_nameextrai apenas o nome do arquivo de log de transações. Quando o local do log de transações fornecido está exatamente no limite do arquivo de log de transações, ambas as funções retornam o nome do arquivo de log de transações anterior. Geralmente, esse é o comportamento desejado para gerenciar o comportamento de arquivamento do log de transações, já que o arquivo anterior é o último que precisa ser arquivado no momento.

    fonte

informação relacionada