Como atualizo automaticamente meu banco de dados todas as noites

1

Atualmente, todos os dias antes de começar a trabalhar, concluo o seguinte procedimento:

  • ssh para o servidor de produção
  • gzip nosso arquivo de despejo diário do banco de dados
  • scp o arquivo de dump gzipado para o meu computador
  • gunzip o arquivo de despejo
  • dropdb mydatabase
  • createdb mydatabase
  • psql mydatabase < dump.sql

É possível (tenho certeza que é) para automatizar esse processo no Mac OSX? Desta forma, é feito no momento em que eu começo a trabalhar de manhã. Em caso afirmativo, qual é a maneira mais rápida e fácil

    
por Russ Bradberry 07.05.2010 / 22:27

3 respostas

1

Para permitir o login do ssh em seu servidor de produção sem que você digite a senha, será necessário configurar alguma autenticação não interativa, se ela ainda não estiver configurada.
link

Então, basicamente, é uma questão de adicionar os comandos para cada etapa a um script de shell e configurar o cron para executar o script de shell todas as manhãs.

    
por 07.05.2010 / 23:05
0

Sim - faça um script e programe a parte gzip / scp (ou melhor ainda, torne-a rsync) do seu servidor. Se for também MacOS, não sei quais são as etapas detalhadas para fazer isso, mas esse é o esboço do que você deseja.

Então, se você sabe que sempre será feito por um certo tempo, apenas programe um script no seu computador para gunzip / dropdb / createdb / psql. Se nem sempre é feito ao mesmo tempo, então você poderia fazer algo extravagante com a verificação do status do arquivo, horários modificados, etc.

Quais partes das opções acima você não tem certeza ou acha que precisa de mais detalhes? Você é novo em scripts ou não sabe como agendar coisas com o cron ou o que você tem?

O PostGRES suporta qualquer tipo de envio de log ou espelhamento nativamente? Se assim for, pode ser uma solução melhor em tudo.

    
por 07.05.2010 / 23:01
0

Primeiro, você precisará configurar seu servidor ssh para que ele aceite as chaves RSA, em vez de uma frase secreta. Isso está documentado em outro lugar . Em seguida, você precisará configurar a conta que planeja usar para ter a chave DSA / RSA apropriada, o que permitirá que essa conta faça o login automático.

* ssh to the production server

Isso não é necessário. Você pode executar comandos diretamente no servidor remoto usando a opção -C . Por exemplo, os próximos dois passos que você mencionou ...

* gzip our daily database dump file
* scp the gzipped dump file over to my computer

... seria semelhante a isto:

ssh [email protected] -C 'gzip dump > dump.gz'
scp [email protected]:/path/to/dump/dump.gz /path/to/destination/dump.gz

Coloque cada comando mencionado, juntamente com o restante dos comandos que você está digitando manualmente, em um único arquivo. Os comandos devem estar na mesma seqüência em que você normalmente os digitaria. Vamos chamá-lo de dump-script.sh para este exemplo. Altere a propriedade e as permissões conforme necessário, para que o arquivo seja executado.

AVISO:

Existe uma possibilidade muito grande de perda de dados se você não executar a verificação de erros no seu script. Até você adicionar tratamento de erros ao script, não há garantias de que funcionará corretamente 100% do tempo. Com o comando para descartar seu banco de dados, é muito fácil sob o direito circunstâncias para perder todos os dados na máquina que está recebendo o dump. Você provavelmente desejará expandir e embelezar seu script para permitir a detecção de erros, de modo que ele apenas DROP DATABASE e importe os novos dados quando a transferência for bem-sucedida . Se você não estiver confortável com isso, não o execute nem crie as entradas crontab.

Depois de ter seu script depurado e você pode confirmar que ele manipulará erros corretamente, você pode adicioná-lo a uma programação cron regular. Enquanto estiver logado como a conta que você deseja usar, execute estas ações, digite:

crontab -e

.... o que deve te dar um editor. Crie uma entrada como esta:

# Nightly Database Dump, at Midnight
0 0 * * * /path/to/my/dump-script.sh

... digite :wq nessa ordem e pressione enter (supondo que vi seja seu editor de texto padrão).

Uma solução melhor: Se você tem acesso de rede ao banco de dados PostgreSQL, por que não apenas descarregar o banco de dados pela rede usando uma conexão remota? Isso é muito mais limpo e pode ser combinado com um pouco de script para torná-lo um "canal" direto de dados de um para o outro.

    
por 08.05.2010 / 01:39