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.