Backup do Banco de dados MySQL

Escrevi um programa em shell script para facilitar o backup do MySQL e decidi disponibiliza-lo para que outros administradores possam utilizar e coloborar com dicas ou sugestões. Sinceramente desta vez não pesquisei para saber se já existia algo pronto, simplesmente decidi fazer um programa que supra minhas necessidades de backup do MySQL (é, um tipo de backup para cada grupo de servidores :) ). Acredito que da forma que foi elaborado, este programa poderá auxiliar a várias pessoas com diferentes necessidades.

Algumas características:

  • Arquivos individuais para cada bancos de dados: Permite gerar um arquivo compactado (gzip) para cada BD do seu MySQL ou,
  • Arquivo único para todos os bancos de dados: Gera um único arquivo contendo o backup de todos os bancos de dados do MySQL;
  • Histórico de backup com limite máximo de versões anteriores: Ideal para casos onde é necessário restaurar o estado de um banco de dados de alguns dias atrás e o administrador não dispõe de nenhum software que gerencia o backup (Data Protector, Veritas, Tivoli, etc);
  • Arquivos com nomes únicos: Caso você utiliza algum software responsável pelo gerenciamento do backup, basta não optar pelo histórico e toda vez que for executado o script os arquivos serão sobrescritos;
  • Exclusão de Databases: Permite definir quais bancos de dados não serão copiados (funciona apenas quando for gerado arquivos individuaus para cada banco de dados;)

Um exemplo de linha do crontab para efetuar o backup � 1:00 da manhã:
00 1 * * * /root/scripts/backupMysql.sh

DOWNLOAD:
backupMysql.sh (versão 1.0)

TODO:

  • Adicionar função para envio de e-mails;
  • Permitir a exclusão de databases mesmo quando optar-se pela geração de um único arquivo de backup;
  • Adapta-lo de forma a permitir backup do PostgreSQL;
  • Mais alguma coisa ?

Caso você tenha alguma dúvida, sugestão ou crítica, por favor compartilhe-a comigo utilizando ou o formulário de contato (na página de contatos no início desta página) ou utilizando os comentários abaixo.

7 Comentários

  1. Rafael Goulart:

    Fiz um script com solução semelhante, mas sua opção é mais elegante (apesar de que a minha é mais curta).

    Uma sugestão que utilizo é utilizar o “find” para eliminar os arqivos mais antigos, ou seja, mantendo os mais recentes:

    # Diretorio para backups em disco
    BKP_DIR=”/backup/mysql”

    # Quantidade dias para expurgo do backup (diminuir 1)
    # Exemplo: para 4 dias, informar 3 (positivo) (valor positivo, com +)
    # PRAZO_EXPURGO=+90
    PRAZO_EXPURGO=+4

    FILE=`find $BKP_DIR -type f -atime $PRAZO_EXPURGO -print`
    for file in $FILE
    do
    rm $file
    done

    Evidentemente o “for” não é necessário, pode-se resumir a uma linha no “find” com “rm”, só prefiro colocar assim por questão de estilo, nada mais.

    Estava sem paciência para pesquisar, mas as opções do comando “mysql” para limpar a saída são muito úteis.

    Grato, rapaz.

  2. Neto:

    Ok Rafael, obrigado pela dica!!

  3. Luis Fernando Kieça:

    Algumas coisas para incrementar seu script:

    - ao utilizar as variáveis para armazenar o caminho absoluto e o binário, vc pode usar o comando which, assim:

    _tr=`which tr`

    - para enviar o e-mail, vc pode utilizar um pacote chamado mpack (ftp://ftp.andrew.cmu.edu/pub/mpack/). Sua utilização é bem simples (usei-o em minha secretária eletrônica, conforme exibido aqui: http://underlinux.com.br/noticia4342.html)

    Atenciosamente,

    Luis Fernando Kieça
    Analista de Tecnologia.

  4. Neto:

    Obrigado pelas dicas Luis! vou adota-las.

  5. Rafael Pereira dos Santos:

    como eu restauro o backup !

  6. Neto:

    Olá Rafael,

    Para efetuar a restauração dos dados, depende básicamente de como você fez o backup e o que você quer restaurar. Se você optou pela geração de um arquivo por DB e quer restaurar apenas um DB, basta escolher o arquivo referente ao dia (se você optou por histórico) e executar o comando:

    # gunzip < mysql-sa.gz | mysql -uroot -p nova_db

    É bom lembrar que você deverá antes de restaurar, criar a database nova_db, e se ela já existir, remover as tabelas existentes, uma vez que o processo de restore tentará cria-las novamente.

    Para cada situação existe uma forma de restore, que básicamente utilizará o comando acima. A única diferença é quando o backup é de todas as databases em um único arquivo, pois neste caso o dump já possui todos os “CREATE DATABASE”.

  7. Júnior Guedes:

    Gostaria de saber se é possível fazer backup de tabelas InnoDB e também comcampos blob.
    Me explique como utilizo isto.
    OBS.: sou aprendiz.

Deixe um comentário