AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 224191
Accepted
Gumuliokas
Gumuliokas
Asked: 2018-12-06 04:44:06 +0800 CST2018-12-06 04:44:06 +0800 CST 2018-12-06 04:44:06 +0800 CST

postgresql configurando o diretório wal_archive

  • 772

Eu tive um problema com o servidor PostgreSQL.

Assumi o servidor PostgreSQL do meu ex-colega e hoje meu servidor travou devido ao espaço em disco preenchido com wal_archives.

Normalmente, os segmentos wal eram colocados no diretório raiz /wal_archive/, eu verifiquei - está vazio. Algum tempo atrás eu verifiquei e tinha alguns segmentos...

Eu cavei mais fundo e descobri que todos os segmentos wal estavam armazenados no pg_data/pg_xlogdiretório.

Como isso pôde acontecer? While postgresql.confestá configurado assim (mostrando apenas o segmento ativado de linhas de 'registro antecipado')

wal_level = hot_standby                 # minimal, archive, hot_standby, or 
archive_mode = on               # allows archiving to be done
archive_command = 'test ! -f /wal_archive/%f && cp %p /wal_archive/%f'  

Por que meu diretório wal_archive agora está vazio enquanto as configurações de configuração mostram informações diferentes?

O wal_archivediretório era de propriedade do arquivo do usuário root
pg_hba.confnão possui nenhum usuário de replicação - suponho que não haja replicação no servidor também. Não há arquivos como recovery.confem qualquer lugar.

cp: não é possível stat 'pg_xlog/000000010000033C00000081': Nenhum arquivo ou diretório
2018-12-05 14:37:54 EET [7540-1860] LOG: comando de arquivamento falhou com o código de saída 1
2018-12-05 14:37:54 EET [7540-1861] DETAIL: O comando de arquivamento com falha foi: test ! -f/wal_archive/000000010000033c00000081 && cp pg_xlog/000000010000033c00000081/wal_archive/000000010000033c00000081
2018-12-05 14:37:54 EET [7540-18662]

Também devido ao pânico, apaguei acidentalmente grande parte dos segmentos wal no diretório xlog, para iniciar o servidor. Tudo está funcionando bem agora, mas quero garantir que não haverá problemas no futuro.

postgresql replication
  • 1 1 respostas
  • 2573 Views

1 respostas

  • Voted
  1. Best Answer
    jjanes
    2018-12-06T13:19:32+08:002018-12-06T13:19:32+08:00

    "pg_xlog" é o diretório de trabalho em que os arquivos WAL são armazenados enquanto o PostgreSQL ainda pode precisar dos arquivos WAL, ou seja, para recuperação de uma queda de energia ou outra falha "soft". Eles são removidos de lá apenas quando o PostgreSQL tem certeza de que não são mais necessários para esse propósito, e uma vez que "archive_command" tenha sido concluído com sucesso.

    Não podemos dizer o que aconteceu com o seu "/wal_archive/", mas aqui está uma história plausível:

    Você tinha algum tipo de sistema de arquivos de rede (NFS, CIFS, etc.) montado usando "/ wal_archive" como ponto de montagem. Essa montagem falhou e nunca foi restabelecida. Isso significa que o sistema de arquivos original contendo seus arquivos WAL ainda está flutuando em algum lugar, mas o computador não sabe mais como acessá-lo. Você vê o antigo ponto de montagem /wal_archive como um diretório vazio porque é assim que as montagens funcionam no Linux. O usuário que está executando seu servidor postgres provavelmente não pode gravar nesse diretório residual, porque quando a montagem foi perdida, as permissões também foram. Portanto, o archive_command está falhando com erros de permissão, mas você nunca percebeu isso porque não estava procurando no log do servidor. Ele tentou repetidamente arquivar o arquivo WAL fora do pg_xlog, mas falhou repetidamente. Desde que falhou, ele nunca poderia remover o arquivo de pg_xlog, até que finalmente encheu. Em pânico, você removeu alguns dos arquivos do pg_xlog. Agora ele ainda está tentando arquivar esse arquivo, mas agora está falhando por um motivo diferente, o arquivo não está mais em pg_xlog, conforme demonstrado pela mensagem de erro "cp: cannot stat 'pg_xlog/000000010000033C00000081'".

    Agora que você está funcionando novamente, os arquivos devem estar aparecendo no /wal_archive/ ou deve haver erros no arquivo de log do servidor informando que o archive_command falhou.

    Observe que o archive_command que você está usando não é perfeitamente seguro. Ele não sincroniza o conteúdo do arquivo recém-copiado em /wal_archive/ antes de relatar o sucesso, portanto, uma falha no tempo certo pode significar que o arquivo recém-arquivado não existe em nenhum lugar. Você pode querer mudar para soluções enlatadas como "pgbackrest" ou "barman", ou usar replicação de streaming, para evitar esse tipo de armadilha.

    Observe também que qualquer backup que você acha que tem provavelmente será inválido, a menos que você também esteja fazendo backups lógicos (como com pg_dump). É melhor você pegar novos e testá-los.

    • 1

relate perguntas

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve