Backup em servidor remoto.
Confesso que, como muita gente, tenho sido desleixado no que toca a backups dos meus sites. Ontem depois do segundo amargo de boca que me custou 6 horas de trabalho para tentar pôr tudo no lugar decidi finalmente arranjar uma solução satisfatória (ou seja automática) para efectuar backups.
Lista de ingredientes:
- 2 servidores com acesso shell
- Um cliente ssh
- 10 minutinhos que podem poupar muitas horas de trabalho
Se ainda não têm acesso shell ao vosso servidor enviem um email ao vosso host para vos dar. Se o host não o permitir acho que está na altura de mudarem de host
. Entretanto se quiserem mudar ou apenas adquirir o servidor para os backups podem encontrar uma opção baratuxa aqui (link afiliado).
Ok, agora que já têm dois servidores com acesso shell vamos ao que interessa. Abram o vosso cliente ssh ( Se não têm recomendo o Putty) e liguem-se aos vossos sites, um em cada janela.
1- De forma a poder aceder remotamente ao servidor de forma automática vamos ter de autorizar uma ligação do servidor local (onde temos os ficheiros) ao remoto (para onde queremos enviar o backup).
Para isso no servidor local corram o seguinte comando:
ssh-keygen -t rsa
Carreguem enter em todos os prompts até voltarem à linha de comando.
No meu caso é este o output:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
**************** root@as.webkaput.com
De seguida vamos abrir o ficheiro id_rsa.pub de forma a copiar a chave indentificativa da nosso servidor. Usando o editor VI.
vi /root/.ssh/id_rsa.pub
Não se esqueçam de mudar o caminho do ficheiro para o vosso caso específico.
No VI fazemos:
seleccionar texto com o rato -> botão direito do rato -> ESC -> :q!
Isto vai copiar o texto e vai sair do editor sem gravar o ficheiro.
Saltamos agora para a janela do servidor remoto. Neste servidor vamos ter de encontrar a directoria /.ssh usando o comando find.
find . -type d -name ‘.ssh’ -print
Depois de encontrada a directoria /.ssh vamos criar um ficheiro com o nome authorized_keys.
vi /caminho-encontrado/.ssh/authorized_keys
No VI para copiar e gravar fazemos:
Botão direito do rato -> ESC ->:wq
E pronto o nosso servidor local já tem acesso ao nosso servidor remoto.
2-Vamos agora fazer um backup da nossa base de dados mysql e enviá-la para o servidor remoto
Em cada um dos servidores criamos uma directoria usando o mkdir para colocar o ficheiro por exemplo:
mkdir /home/mysqlbak
Se ainda não têm uma directoria de cronjobs no servidor local criem uma abaixo da raiz da pasta web (normalmente www ou public_html) ou seja uma pasta que não está acessível via web. De seguida cria-se o script que cria e exporta o backup.
mkdir /home/cronjobs
vi /home/cronjobs/backup.sh
No VI escrevem:
mysqldump -u USERNAME -pPASSWORD nome-da-db >/home/mysqlbak/mysqldump.sql
rsync -avz /home/mysqlbak/mysqldump.sql username@ip-do-servidor-remoto:/home/mysqlbak/mysqldump.sql
ESC->:wq
O comando rsync tem a vantagem de sincronizar os ficheiros entre servidores ou seja não transfere a totalidade do ficheiro.
- USERNAME é o username de acesso à vossa base de dados
- PASSWORD é a password de acesso à vossa base de dados (e sim é mesmo -pPASSWORD tudo pegado)
- nome-da-db é o nome da vossa base de dados. Se quiserem fazer um backup de todas as bases de dados coloquem –all-databases.
- username é o username de acesso shell ao servidor remoto
Ok, temos o nosso script criado. Para testar o script vamos primeiro ter de mudar as permissões do ficheiro. Isto pode fazer-se usando o chmod.
chmod ug=rwx /home/cronjobs/backup.sh
De seguida corremos o script.
source /home/cronjobs/backup.sh
E pronto! Se não houver erros devemos ter agora o ficheiro /home/mysqlbak/mysqldump.sql em ambos os servidores.
3- Finalmente vamos fazer um cronjob para executar esta tarefa de hora a hora.
crontab -e
E adicionamos a seguinte linha.
0 * * * * /home/cronjobs/backup.sh
ESC->:wq
E pronto já podemos dormir mais descansados
Sou o João José tenho 27 anos (tou velho...) sou webmaster há 3 anos e a tempo inteiro aí há 1 ano. Vou tentanto escrever aqui qualquer coisa de útil e de tempos a tempos revelar umas pérolas :-)