Desde a migração do And After (final de dez 2010) para sua nova versão eu não tinha nenhuma rotina de backup do MySQL rodando – e já aprendi que nunca nesta vida devemos ficar sem backup do banco de dados de nossos projetos ou clientes.
Como eu sou "dummie" no Linux (veja você que cheguei a escrever como ver o IP no Linux) eu não sabia como fazer o agendamento de tarefas até descobrir como usar o crontab para agendar rotinas e executar shell scripts.
Ontem pesquisei um pouco sobre a melhor forma de executar um backup do MySQL e as recomendações em fóruns era de que a forma mais correta de fazer um backup sem a necessidade de derrubar o serviço é usando o mysqldump.
O MySQL dump
O mysqldump acessa sua base de dados como qualqer aplicação, por isso não é necessário derrubar o serviço antes do backup. Se você optar pela cópia de arquivos do sistema ao invés do dump (e não derrubar o mysql antes do backup) pode acontecer problema nos arquivos caso sua base seja alterada durante o backup.
O comando para gerar um .sql usando o mysqdump é recebe algumas variáveis, um exemplo do comando (as variáveis estão explicadas abaixo do comando):
mysqldump -h localhost -u usuario -pSUASENHA nomedabase > meubackup.sql
Todos os itens sublinhados são variáveis e você deve alterar de acordo com as configurações do seu servidor.
localhost – o servidor para acessar o banco MySQL
usuario – o nome do usuário do banco
SUASENHA – password do usuário setado na variável acima (repare que não existe espaço entre -p e a senha digitada
nomedabase – nome da base que será exportada
meubackup.sql – nome do arquivo que será salvo (incluir a extensão .sql)
O arquivo gerado irá ser salvo no local em que o comando foi executado, portanto você deve primeiro ir até a pasta onde você quer salvar seu backup (usando o comando cd), por exemplo:
cd /var/backups/mysql
Feito isso você executa o comando mostrado anteriormente e será gerado o arquivo dentro de /var/backups/mysql.
Shell script para fazer o mysqldump
Sabendo os comandos para executar o dump do MySQL tudo o que você precisa agora é passar estes comando para um arquivo .sh (shell script).
Requisitos e/ou configurações
- Ubuntu Server 10
- gzip instalado (sudo apt-get install gzip)
- MySQL rodando (com possibilidade de executar o mysqldump)
- Usuário/senha com acesso a base mysql
Não estou dizendo que só vai funcionar na versão do SO que estou passando aí, mas como cada versão tem suas peculiaridades a informação pode ser importante para quem tiver problemas. 😉
#/bin/bash
U_PASTA="/var/backup/mysql"
U_DATA=$(/bin/date +%Y%m%d%H%M%S)
U_CAMINHO="backup-$U_DATA.sql"
U_HOST="localhost"
U_USER="root"
U_PASSWORD="password"
U_DATABASE="database"
#
cd $U_PASTA
mysqldump -h $U_HOST -u $U_USER -p$U_PASSWORD $U_DATABASE > $U_CAMINHO
gzip $U_CAMINHO
echo "Backup do MySQL executado"
No início do código as definições das variáveis para o comando mysqdump e também é salvo uma variável com informações de data, que é usada para nomear o arquivo sql gerado.
A lógica do código:
- Vai para o caminho especificado onde será salva a exportação do banco
- Executa o mysqldump com as configurações das variáveis
- Compacta o arquivo exportado (gzip, não mantém o arquivo descompactado)
Meu post anterior foi um tutorial sobre como usar crontab, com ele é possível você criar uma rotina que executa o seu shell script e mantém seus dados seguros. Para o And After criei uma tarefa diária, toda a madrugada uma cópia do banco é salva.
Cuidado!
O shell script deste post apenas gera os backups e não trata os backups antigos. Se você fizer a exportação diária do banco e não tratar de alguma forma seus backups consumirão todo o espaço do seu servidor.
Existem exemplos em que o próprio shell script e exclui os arquivos antigos, achei mais prático deixar isso a cargo do logrotate (que é assunto para outro post).