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 / user-10167

Edward's questions

Martin Hope
Edward
Asked: 2012-07-17 13:03:58 +0800 CST

Elimine e restaure o banco de dados PostgresSQL sem perder as configurações

  • 0

Parece uma pergunta simples e fácil, mas sou muito novo na administração do PostgreSQL e não tenho certeza da melhor maneira de fazer as coisas. Eu tenho um banco de dados PostgreSQL (9.1) que de alguma forma foi corrompido (ocorreu erros no log Write-Ahead) e estou tentando descarregar, reinicializar e restaurá-lo para recuperá-lo em um estado estável.

No entanto, parece que initdba maneira recomendada de criar um novo banco de dados estável, na verdade, cria um cluster de banco de dados inteiro. Para executar este comando, primeiro eu teria que descartar meu cluster de banco de dados, mas a documentação do pg_dropclustercomando diz que ele remove "todos os arquivos que pertencem a um determinado cluster PostgreSQL; isso inclui o diretório de dados, o arquivo de log e todos arquivos de configuração." Não quero excluir os logs e arquivos de configuração, apenas os dados.

Como há apenas um banco de dados criado pelo usuário em meu cluster (ou seja, aquele que estou tentando restaurar), eu poderia simplesmente me conectar ao cluster, descartar esse banco de dados e recriá-lo a partir do despejo. Mas então eu não estaria executando initdb, e talvez isso deixasse meu cluster de banco de dados em algum estado corrompido.

Existe uma maneira de descartar e restaurar o conteúdo dos dados de um cluster sem excluir todos os logs e definições de configuração? Como alternativa, não há problema em simplesmente descartar e restaurar o banco de dados para recuperá-lo da corrupção?

postgresql restore
  • 1 respostas
  • 1834 Views
Martin Hope
Edward
Asked: 2012-07-14 12:58:42 +0800 CST

Recuperar banco de dados PostgreSQL de erros do WAL na inicialização?

  • 5

Estou tentando configurar um servidor OpenStreetMap em uma máquina Ubuntu 12.04 usando os pacotes Ubuntu listados em switch2osm.org . Inicialmente, instalei e configurei tudo usando uma extração de mapa do nordeste dos EUA, mas agora quero instalar todo o planeta de mapas. Baixei planet-latest.osm.bz2 e executei osm2pgsql --slim -C 60000 planet-latest.osm.bz2como um usuário com permissão de gravação no banco de dados; este foi o mesmo comando que funcionou para instalar us-northeast.osm.pbf anteriormente. Voltei no dia seguinte para descobrir que esse comando parecia ter sido concluído com sucesso, mas por algum motivo o daemon de renderização não estava gerando novos blocos a partir dos novos dados. Tentei reiniciar o renderizado e, quando isso não teve efeito, tentei reiniciar o servidor PostgreSQL com sudo /etc/init.d/postgresql restart. No entanto, a inicialização do servidor falhou com os seguintes erros no log:

2012-07-13 18:54:59 UTC WARNING:  page 1525147 of relation base/16385/477861 was uninitialized
2012-07-13 18:54:59 UTC WARNING:  page 2247965 of relation base/16385/477861 was uninitialized
...500 more lines like this...
2012-07-13 18:54:59 UTC WARNING:  page 2262926 of relation base/16385/477861 was uninitialized
2012-07-13 18:54:59 UTC PANIC:  WAL contains references to invalid pages
2012-07-13 18:55:00 UTC LOG:  startup process (PID 22826) was terminated by signal 6: Aborted

(Pastebin de log inteiro aqui ).

Não há muita informação sobre esses tipos de erros na Internet, mas pelo que posso descobrir, parece significar que meus índices estão corrompidos ou meu Write-Ahead-Log está. A única maneira de corrigir índices corrompidos, no entanto, é iniciar o banco de dados no modo de usuário único e reconstruí-los, e nem posso fazer isso porque recebo os mesmos erros fatais mesmo quando começo no modo de usuário único com indexação Desativado.

Existe alguma maneira de excluir o log Write-Ahead e forçar o servidor a inicializar "do zero" ou uma correção para esse tipo de corrupção que não requer a inicialização do banco de dados com êxito?

Como alternativa, existe uma maneira de excluir o banco de dados e apenas reimportar todos os dados do planeta, visto que não consigo iniciar o servidor para executar o comando DROP DATABASE?

ATUALIZAÇÃO :

Seguindo a sugestão de Craig Ringer, examinei os logs do banco de dados antes de os erros do WAL começarem a ocorrer para ver se encontrava algum comportamento suspeito. No log imediatamente antes da primeira ocorrência de erros do WAL, encontrei estas linhas de aparência suspeita:

2012-07-13 00:20:51 UTC LOG:  received fast shutdown request
2012-07-13 00:20:51 UTC LOG:  aborting any active transactions
2012-07-13 00:20:51 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:51 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:51 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:51 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:54 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:54 UTC STATEMENT:  CREATE TABLE planet_osm_polygon_tmp AS SELECT * 
FROM planet_osm_polygon ORDER BY way;

2012-07-13 00:20:55 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:55 UTC STATEMENT:  CREATE INDEX planet_osm_ways_nodes ON planet_osm_ways 
USING gin (nodes)  WITH (FASTUPDATE=OFF);

2012-07-13 00:20:57 UTC FATAL:  terminating connection due to administrator command
2012-07-13 00:20:57 UTC STATEMENT:  CREATE TABLE planet_osm_line_tmp AS SELECT * 
FROM planet_osm_line ORDER BY way;

2012-07-13 00:21:51 UTC LOG:  received immediate shutdown request
2012-07-13 00:21:52 UTC WARNING:  terminating connection because of crash of another
server process
2012-07-13 00:21:52 UTC DETAIL:  The postmaster has commanded this server process 
to roll back the current transaction and exit, because another server process 
exited abnormally and possibly corrupted shared memory.
2012-07-13 00:21:52 UTC HINT:  In a moment you should be able to reconnect to the 
database and repeat your command.
2012-07-13 00:21:52 UTC LOG:  could not send data to client: Broken pipe
2012-07-13 00:21:58 UTC WARNING:  terminating connection because of crash of another 
server process
2012-07-13 00:21:58 UTC DETAIL:  The postmaster has commanded this server process 
to roll back the current transaction and exit, because another server process
exited abnormally and possibly corrupted shared memory.
2012-07-13 00:21:58 UTC HINT:  In a moment you should be able to reconnect to the
 database and repeat your command.
2012-07-13 00:21:58 UTC LOG:  could not send data to client: Broken pipe

(Pastebin de todo o log está aqui )

Quando diz "terminando a conexão devido ao comando do administrador", presumo que esse seja o meu comando para reiniciar o servidor de banco de dados. Mas parece que o desligamento de alguma forma falhou terrivelmente, resultando em corrupção de memória compartilhada. Isso não faz sentido, porque eu o reiniciei "limpamente", usando o /etc/init.d/postgres restartscript, não uma morte abrupta ou login manual como postgres. Estou interpretando este log incorretamente? Ou existe realmente um problema em usar /etc/init.d/postgres restartpara reiniciar um servidor PostgreSQL?

(Observe que, como minha pergunta foi movida para o administrador do banco de dados, onde sou um "novo usuário", não tenho mais a capacidade de votar em suas respostas. Isso não significa que não aprecio a ajuda).

postgresql ubuntu
  • 2 respostas
  • 4215 Views

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