Fazendo Backups do MySQL em Java

Este artigo aborda como fazer, rapidamente, um pequeno software em Java que realize todos os backups de bancos de dados existentes em um servidor MySQL, fazendo uso do utilitário mysqldump.

Neste artigo veremos como implementar um programa Java que executa o backup de vários bancos de dados gerenciados pelo MySQL. O programa é facilmente adaptável para suportar mais bancos, e faz uso do comando mysqldump.exe, um utilitário do próprio MySQL seguro e usado exatamente para backups.

 

O comando mysqldump precisa de alguns argumentos essenciais, a saber: o nome de usuário, a senha, o banco de dados a ser feito o backup e o arquivo onde esse backup será salvo. Seriam os argumentos --user (usuário), --password (senha) e

--result-file (destino do backup).

 

Em nosso programa, utilizaremos o usuário "root", que tem privilégios de administrador para acessar todos os bancos de dados do MySQL, e assim realizar seus backups.

 

Antes de mostrar todo o código fonte, é importante mostrar os seguintes pontos importantes:

 

- as constantes VERSION e PRESENTATION são auto-explicativas; sinta-se à vontade para modificá-las ou excluí-las;

 

- a constante da classe chamada MYSQL_PATH deve apontar devidamente para o caminho do seu banco de dados MySQL onde está o utilitário mysqldump.exe; em nosso caso, ela é "G:\Arquivos de programas\MySQL\MySQL Server 5.0\bin\";

 

- a constante da classe chamada DATABASES é uma simples String contendo os nomes dos bancos de dados a serem feitos os backups, separados por espaços. Você pode colocar quantos bancos quiser. Mais tarde, no processamento, a variável dbList colherá esses nomes de bancos para realizar os backups.

 

- o programa faz uso da classe java.lang.ProcessBuilder; sua sintaxe e uso são simples e de fácil entendimento, como você verá na listagem do programa;

 

- nosso local de destino dos arquivos de backup será um sub-diretório chamado "Backup", situado dentro do diretório onde está a aplicação. Nele os arquivos de backup serão colocados, cada um com o nome do tipo dbname.sql;

 

- ao final do programa, faço a thread dormir por 2 segundos (2000 milissegundos); coloque o valor que você desejar; o único propósito desta espera é para dar um "tempinho" para o usuário ver o que aconteceu.

 

Agora vamos ao código fonte completo:

 

import java.util.*;

import java.io.File;

 

public class MySQLBackup {

  // Constantes da classe

  private static String VERSION = "4.0.3";

 

  private static String SEPARATOR = File.separator;

 

  private static String MYSQL_PATH =

    "G:" + SEPARATOR +

    "Arquivos de programas" + SEPARATOR +

    "MySQL" + SEPARATOR +

    "MySQL Server 5.0" + SEPARATOR +

    "bin" + SEPARATOR;

 

  private static String PRESENTATION =

    "==========================================================\n" +

    "  Backup do banco de dados MySQL - Versao " + VERSION + "\n" +

    "  Autor: Marcelo Carvalho Pinto da Cunha\n\n" +

    "  Desenvolvido em 07/09/2009\n\n" +

    "  MarcWare Software, 2009-2012\n" +

    "==========================================================\n\n";

 

  // Lista dos bancos de dados a serem "backupeados"; se desejar adicionar mais,

  // basta colocar o nome separado por espaços dos outros nomes

  private static String DATABASES =

    "agenda cultos webcheckadmin projectmanager calendario webfinance mysql";

 

  private List<String> dbList = new ArrayList<String>();

 

  public MySQLBackup() {

    String command = MYSQL_PATH + "mysqldump.exe";

 

    String[] databases = DATABASES.split(" ");

 

    for (int i = 0; i < databases.length; i++)

      dbList.add(databases[i]);

 

    // Mostra apresentação

    System.out.println(PRESENTATION);

 

    System.out.println("Iniciando backups...\n\n");

 

    // Contador

    int i = 1;

 

    // Tempo

    long time1, time2, time;

 

    // Início

    time1 = System.currentTimeMillis();

 

    for (String dbName : dbList) {

      ProcessBuilder pb = new ProcessBuilder(

        command,

        "--user=root",

        "--password=trotski123",

        dbName,

        "--result-file=" + "." + SEPARATOR + "Backup" + SEPARATOR + dbName + ".sql");

 

      try {

        System.out.println(

          "Backup do banco de dados (" + i + "): " + dbName + " ...");

 

        pb.start();

      }

      catch (Exception e) {

        e.printStackTrace();

      }

 

      i++;

    }

 

    // Fim

    time2 = System.currentTimeMillis();

 

    // Tempo total da operação

    time = time2 - time1;

 

    // Avisa do sucesso

    System.out.println("\nBackups realizados com sucesso.\n\n");

    System.out.println("Tempo total de processamento: " + time + " ms\n");

    System.out.println("Finalizando...");

 

    try {

      // Paralisa por 2 segundos

      Thread.sleep(2000);

    }

    catch (Exception e) {}

 

    // Termina o aplicativo

    System.exit(0);

  }

 

  public static void main(String[] args) {

    MySQLBackup app = new MySQLBackup();

  } 

}

 

Você pode aprimorar o programa, colocando por exemplo a lista dos bancos de dados e a variável MYSQL_PATH a serem buscados de um arquivo; assim não haverá necessidade de se editar novamente o código fonte e recompilar para executar o programa, caso deseje acrescentar mais bancos ou mudar o local do MySQL. Ficam as sugestões... Bom proveito, até o próximo artigo.

Artigos relacionados