Backup MySQLDump via Runtime.getRuntime().exec()

Alguém sabe me dizer o porquê desse método criar um arquivo vazio e não o backup do banco que eu estou querendo? O que to fazendo errado?

public class MySqlDump {

	public static void makeBackup( 
			String mysqlBinPath, 
			String backupFilePath, 
			String backupFileName,
			String userName,
			String password,
			String databases ) throws IOException {    		
		if ( databases == null || databases.trim().equals( "" ) )
			databases = "--all-databases";

		String comando = "\"" + mysqlBinPath + "mysqldump\" -u " + userName + 
		" -p" + password + " " + databases + " > " + backupFilePath + backupFileName;
		System.out.println("cmd /C "+comando);
		Process p = Runtime.getRuntime().exec( "cmd /C "+ comando );

	}

}

A String fica assim:

cmd /C “C:\Program Files\MySQL\MySQL Server 5.1\mysqldump” -u root -p wopizzarias > E:\WOPizzariasDOCs\BackupDB\Backup_26-07-2012__21-20-33.sql

Boa tarde Wellington.

Você pode resolver isto criando um arquivo *.bat de modo que você possa fazer dentro deste arquivo a seleção da pasta através do comando ChDir o CD do DOS, e passar somente os parâmetros de usuário, database, arquivo de origem e destino. Depois é só invocar o arquivo *.bat passando este parâmetros, pois afinal arquivos *.bat também aceita parâmetros com o caractere "%" (porcentagem) seguido de um número que indica a posição do parâmetro passado, ou seja, se você passa dois parâmetros, o "%1" será o primeiro parâmetro passado e assim sucessivamente.

Abra o NotePad e escreva este código:

@echo off
CD C:\Program Files\MySQL Server 5.1
mysqldump -u %1 -p %2 > %3

Agora dentro do NotePad, vá no menu arquivo e salvar como e no rodapé da caixa de diálogo, clique na combo salvar como tipo ou save as type em inglês, e escolha todos os arquivos, e na combo file name renomeie para "MySqlBackup.bat". Detalhe que você pode salvar dentro de qualquer diretório (pasta), que ele vai selecionar a pasta onde está instalado o MySQL.

Dentro do Método em Java, mude para este código.

public class MySqlDump {  
  
    public static void makeBackup(      
            String filename,     
            String username,  
            String password,  
            String databases ) throws IOException { 
          
        if ( databases == null || databases.trim().equals( "" ) )  databases = "--all-databases";

        String pwdb = password+" "+databases; 
  
 
        Process p = Runtime.getRuntime().exec( "MySqlBackup  "+username+" "+pwdb+" "+filename);  
  
    }  
  
}  

Detalhe que para executar arquivos *.bat, não preciso utilizar o "cmd /C"

Detalhe também é que procure passar o caminho do arquivo junto com o seu nome para o parâmetro do método, isto facilita muito no desenvolvimento.

Rode ai e vê se funciona.

Um abraço.

[quote=discorpio]Boa tarde Wellington.

Você pode resolver isto criando um arquivo *.bat de modo que você possa fazer dentro deste arquivo a seleção da pasta através do comando ChDir o CD do DOS, e passar somente os parâmetros de usuário, database, arquivo de origem e destino. Depois é só invocar o arquivo *.bat passando este parâmetros, pois afinal arquivos *.bat também aceita parâmetros com o caractere "%" (porcentagem) seguido de um número que indica a posição do parâmetro passado, ou seja, se você passa dois parâmetros, o "%1" será o primeiro parâmetro passado e assim sucessivamente.

Abra o NotePad e escreva este código:

@echo off
CD C:\Program Files\MySQL Server 5.1
mysqldump -u %1 -p %2 > %3

Agora dentro do NotePad, vá no menu arquivo e salvar como e no rodapé da caixa de diálogo, clique na combo salvar como tipo ou save as type em inglês, e escolha todos os arquivos, e na combo file name renomeie para "MySqlBackup.bat". Detalhe que você pode salvar dentro de qualquer diretório (pasta), que ele vai selecionar a pasta onde está instalado o MySQL.

Dentro do Método em Java, mude para este código.

public class MySqlDump {  
  
    public static void makeBackup(      
            String filename,     
            String username,  
            String password,  
            String databases ) throws IOException { 
          
        if ( databases == null || databases.trim().equals( "" ) )  databases = "--all-databases";

        String pwdb = password+" "+databases; 
  
 
        Process p = Runtime.getRuntime().exec( "MySqlBackup  "+username+" "+pwdb+" "+filename);  
  
    }  
  
}  

Detalhe que para executar arquivos *.bat, não preciso utilizar o "cmd /C"

Detalhe também é que procure passar o caminho do arquivo junto com o seu nome para o parâmetro do método, isto facilita muito no desenvolvimento.

Rode ai e vê se funciona.

Um abraço.
[/quote]

discorpio. O seu jeito funcionou também. Obrigado… mas eu fiz da seguinte maneira:

		String caminhoMySQLDump = sistemaDAO.getMySqlPath();
		String comando= caminhoMySQLDump + "bin\\mysqldump.exe"; 
		ProcessBuilder pb=new ProcessBuilder(comando,"--user=" + ConexaoDB.getLoginSQL(),
				"--password="+ConexaoDB.getSenhaSQL(),"wopizzarias","--result-file="
				+ caminhoArquivo + nomeArquivo); 
		pb.start(); 

Boa noite Wellington.

Graças a Deus que funcionou de ambas as maneiras.

Agora você conhece dois caminhos diferentes de percorrer o caminho das pedras.

Valeu a pena persistir, não valeu ?

Um abraço Cristão.