Se eu 'sudo reinicializar' o meu servidor Ubuntu 12.04.2 com o Postgres em execução, posso perder dados?

3

Venho imaginando há muito tempo se um sudo reboot com um servidor Postgres em execução (ou seja, 9.2.4) pode (ou definitivamente irá) levar a perda de dados ou outros problemas (por exemplo, incapacidade de iniciar novamente servidor na inicialização do sistema). Ou reboot envia os sinais apropriados para processos que permitem que eles sejam desligados (incluindo, por exemplo, permitir que as transações sejam concluídas, etc.).

    
por orokusaki 02.06.2013 / 18:03

3 respostas

6

Se o seu servidor e hardware estiverem configurados corretamente, você não perderá dados mesmo se pressionar o botão de reinicialização, puxar o cabo de alimentação ou disparar um pânico no kernel. O PostgreSQL é seguro contra falhas por causa de seu logging write-ahead .

A única pessoa que acertou isso vagamente é "Zoredache" nos comentários.

Você só perderá dados se:

  • Você configurou o PostgreSQL para não ser protegido por falhas definindo fsync=off ;
  • Você está usando UNLOGGED tabelas, que não são seguras contra falhas (e, nesse caso, você só perderá os dados nas tabelas não lidas);
  • O sistema de armazenamento subjacente não é seguro contra falhas nem desconsidera fsync , como muitos SSDs de consumidor barato que fazem cache de write-back em cache volátil sem o poder de backup adequado;

Escrevi muito mais sobre esse post de um blog há alguns meses .

Mesmo se você estiver usando um SSD barato, você ainda não perderá dados em uma reinicialização repentina, apenas quando o sistema realmente perder energia. Eu vi alguns sistemas que desligam os discos ao reinicializar, e esses sistemas teriam perda de dados se usassem SSDs baratos.

Um desligamento "limpo" é praticamente opcional para o PostgreSQL; as únicas desvantagens de uma reinicialização súbita são que o banco de dados pode levar um pouco mais de tempo para iniciar devido ao tempo necessário para aplicar registros write-ahead-durante a recuperação e que (por a documentação) UNLOGGED tabelas serão truncadas. / p>

Mesmo em um chamado desligamento "limpo", a maioria dos scripts de inicialização só espera por um tempo limitado para o servidor ser desligado. A maioria dos scripts de inicialização usa o modo de desligamento "rápido", que abortará as transações atuais, recusará novas sessões e encerrará rapidamente o servidor. Normalmente, eles demoram um tempo se demoram demais e desligam de qualquer maneira, confiando efetivamente na segurança de falhas do PostgreSQL.

Se você quiser permitir que as transações atuais sejam concluídas, será necessário fazer um desligamento "inteligente" manualmente antes de desligar o sistema ou modificar seus scripts de inicialização para usá-lo. O desligamento inteligente nem sempre é muito útil, pois uma conexão longa ou abandonada pode parar todo o servidor desligando indefinidamente, deixando-o sentado lá recusando todas as conexões. É útil como uma primeira tentativa que você deixe executar por um minuto ou antes de fazer um desligamento rápido.

A segurança contra falhas não é desculpa para não fazer backups - e testá-los.

    
por 03.06.2013 / 04:31
2

Ele deve desligá-lo e todos os serviços em execução. Faça um backup e teste!

    
por 02.06.2013 / 18:07
1

reboot é um encerramento normal. reboot -f / reboot --force é o assassino de dados.

    
por 02.06.2013 / 18:12

Tags