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.