Backup em programa java - resolvido

Olá amigos do GUJ!
Estou quebrando a cabeça para saber o que estou fazendo de errado,
possuo um programa java e preciso que este execute backup do banco,
mas quando executo a classe está cria o arquivo mas não salva o banco.
Uso o vertrigo só se for isso!!!
Conto com a ajuda dos amigos, envio o codigo que estou usando abaixo.

     String s = String.valueOf(jFileChooser1.getSelectedFile().getAbsolutePath());
        
        if(jFileChooser1.CANCEL_OPTION ==0){
            this.dispose();
        }else{
            
            try {
                Runtime.getRuntime().exec("cmd /c mysqldump -u root -p vertrigo -B  pjlocadora  > "+s+"\backup.sql");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            
            this.dispose();
        }
    }                                             
 
    // Variables declaration - do not modify                     
    private javax.swing.JFileChooser jFileChooser1;
    private javax.swing.JInternalFrame jInternalFrame1;
    // End of variables declaration                   
    
        }

Tente com:

            Runtime.getRuntime().exec("cmd /c \"mysqldump -u root -p vertrigo -B  pjlocadora  > " + s + "\backup.sql \""); 

Ou assim.

[code]import java.io.IOException;

public class TesteBackupMysql{

public static void main(String args[]){
	try {  
	 Runtime.getRuntime().exec("cmd /c mysqldump.exe --host=localhost --user=root --password= --port=3306 -f -c  mysql > C:\backup.sql");  
	} catch (IOException ex) {  
		ex.printStackTrace();  
	}  
}

}[/code]

[color=darkblue] E como seria feito o Restore ?

Pelo que vi seria apenas a mudança do sinal > para <, seria isso realmente ?

desde já agradeço ![/color]

Backup and Restore MySQL Databases

Amigo Oliveira
Tentei de ambos jeitos e assim mesmo continua criando um arquivo vazio.

1- O banco esta com dados!
2- Não dá erro apena ia vazio!
3- Coloquei usuario e senha certa!
4- Vou tentar sem o vertrigo quem sabe!

se tiver mais alguma ideia poste pra mim…obrigado

vertrigo é a tua senha!

Já tive este problema, faça um teste, antes de dar o dispose coloque um sleep de alguns segundos.
Provavelmente ele está saindo antes de terminar a execução do processo.
Outro detalhe, não dê espaço depois do -u e -p --> -uusuario -psenha (faça desse modo)

Assim que der tempo posto aqui o modo como faço.

[code]
/**
* Faz um dump em uma tabela de uma base de dados, ou na base inteira.
* O arquivo gerado terá o nome da tabela + .sql, caso seja um dump de tabela ou base de dados + “.sql”
* caso seja um dump da base inteira.
* @param String usuario do BD
* @param String senha do BD
* @param String base de dados
* @param String diretório onde será gerado o Dump.
* @param String nome da tabela a ser efetuado o dump. Vazio ou null caso o dump seja apenas na base de dados.
* @param boolean true se deve constar no dump somente os dados, sem os comandos de criação da tabela.
* @param boolean true se o nome dos campos devem constar no dump.
* @param Log
* @return boolean true sucesso ou false erro.
*/
public boolean execMysqldump(String usuarioBD, String senhaBD, String baseDados,
String dirDump, String tabela, boolean somenteDados, boolean nomeCampos, Log log) {
boolean retorno = false;

	StringBuffer comandoDump = new StringBuffer();
	comandoDump.append("mysqldump ");
	comandoDump.append("-u");
	comandoDump.append(usuarioBD);
	if (!senhaBD.trim().equalsIgnoreCase("")) {
		comandoDump.append(" -p");
		comandoDump.append(senhaBD);			
	}		
	if (somenteDados) {				
		comandoDump.append(" -t");
	}
	if(nomeCampos){
		comandoDump.append(" -c");
	}
	comandoDump.append(" "+baseDados);
	if (tabela != null || !tabela.trim().equals("")) {			
		comandoDump.append(" "+tabela);			
	} 		
	try {			
		log.logInfo("INICIO EXECUCAO MYSQLDUMP");
					 
		File fDump = null;
		File diretorioDump = new File(dirDump); 
		
		if (tabela != null || !tabela.trim().equals("")) {
			/*Se a tabela foi informada, será gerado um arquivo com o nome da tabela.sql*/
			fDump = new File(dirDump, tabela+".sql");
		}else{
			/*Senão será gerado um arquivo com o nome da base da dados.sql*/
			fDump = new File(dirDump, baseDados+".sql");
		}
		/*Se o diretório informado para salvar os dumps não existir, será criado*/
		if(diretorioDump.exists()){
			
			if (fDump.exists()) {				

// se arquivo de dump ja existir, remover
fDump.delete();
}
}else{
diretorioDump.mkdirs();
}

		log.logInfo("Gerando: " + fDump.getPath());
		Process p = Runtime.getRuntime().exec(comandoDump.toString());
		
		/* *****************************************************
		 * SOLUÇÃO ABAIXO É DEVIDO A UM BUG DO WINDOWS COM O waitfor()
                    * int erro = tratarGravarBufferDump(p,fDump,log);	
                    * EM LINUX FUNCIONA PERFEITAMENTE COM  p.waitfor();
		 * *****************************************************/		
		//Se erro for diferente de 0, houve algum erro ao executar o dump
		int erro = tratarGravarBufferDump(p,fDump,log);	
		
                  // verificar erro no processo
		if (erro == 0) {
			log.logInfo("SUCESSO EXECUCAO MYSQL DUMP: " + fDump.getPath());
			retorno = true;
		} else {
			log.logSevere("ERRO EXECUCAO MYSQL DUMP RETORNO = " + erro);
			log.logSevere("ARQUIVO "+ fDump.getPath()+ " NÃO GERADO");
		}
	} catch (Exception e) {
		retorno = false;
	}
	return retorno;
}
[/code]

[code] private int tratarGravarBufferDump(Process p, File fDump,Log log) {

	  int valorDeSaida = -1;

	  //ler retorno do mysqldump atraves da InputStream
	  BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

	  // abrir output stream para armazenar retorno do mysqldump no arquivo.dump			
	  PrintWriter pw = null;

	  //Verificar se processo terminou,
	  boolean terminou = false; 

	  while(!terminou){
		  try {
			  pw = new PrintWriter(fDump);
		  } catch (FileNotFoundException e) {
			  valorDeSaida = -1;
			  log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e.getMessage());
		  }
		  // fazer leitura da input stream
		  String line = null;			
		  try {
			  while ((line = br.readLine()) != null) {
				  // armazenar na output stream (arquivo)
				  pw.println(line);
				  
			  }
			  Thread.currentThread().sleep(100);
			  valorDeSaida = p.exitValue();
			  terminou = true;
		  } catch (IOException e) {
			  valorDeSaida = -1;
			  log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e.getMessage());
		  } catch (IllegalThreadStateException e) {
			  try {
				  // processo ainda não terminou;
				  // Thread espera
				  Thread.currentThread().sleep(500);
			  } catch (InterruptedException e1) {
				  valorDeSaida = -1;
				  log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e1.getMessage());
			  }
		  } catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	  }	

	  // fechar input/output stream
	  try {
		  br.close();
	  } catch (IOException e) {
		  valorDeSaida = -1;
		  log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e.getMessage());
	  }
	  pw.close();

	  return valorDeSaida;
  }[/code]

Resolvido funcionou, ele cria o backup dentro do proj

fiz assim:

String comando="C:/Arquivos de programas/VertrigoServ/Mysql\bin\mysqldump.exe";   
     ProcessBuilder pb=new ProcessBuilder(comando,"--user=root","--password=vertrigo","pjlocadora","--result-file=arquivo.sql");   
     pb.start();

Agradeço a todos pela ajuda.

Vc tem o código completo ou com esse postado consegirei fazer o meu backup?

Sim pode usar este, no meu caso estou usando o vertrigo, a base pjlocadora.

String comando="C:/Arquivos de programas/VertrigoServ/Mysql\bin\mysqldump.exe"; ProcessBuilder pb=new ProcessBuilder(comando,"--user=root","--password=vertrigo","pjlocadora","--result-file=arquivo.sql"); pb.start();