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.
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
B
Bruno_Laturner
vertrigo é a tua senha!
D
danilocsf
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.
D
danilocsf
/** * 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. */publicbooleanexecMysqldump(StringusuarioBD,StringsenhaBD,StringbaseDados,StringdirDump,Stringtabela,booleansomenteDados,booleannomeCampos,Loglog){booleanretorno=false;StringBuffercomandoDump=newStringBuffer();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");FilefDump=null;FilediretorioDump=newFile(dirDump);if(tabela!=null||!tabela.trim().equals("")){/*Se a tabela foi informada, será gerado um arquivo com o nome da tabela.sql*/fDump=newFile(dirDump,tabela+".sql");}else{/*Senão será gerado um arquivo com o nome da base da dados.sql*/fDump=newFile(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, removerfDump.delete();}}else{diretorioDump.mkdirs();}log.logInfo("Gerando: "+fDump.getPath());Processp=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 dumpinterro=tratarGravarBufferDump(p,fDump,log);// verificar erro no processoif(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(Exceptione){retorno=false;}returnretorno;}
privateinttratarGravarBufferDump(Processp,FilefDump,Loglog){intvalorDeSaida=-1;//ler retorno do mysqldump atraves da InputStreamBufferedReaderbr=newBufferedReader(newInputStreamReader(p.getInputStream()));// abrir output stream para armazenar retorno do mysqldump no arquivo.dump PrintWriterpw=null;//Verificar se processo terminou,booleanterminou=false;while(!terminou){try{pw=newPrintWriter(fDump);}catch(FileNotFoundExceptione){valorDeSaida=-1;log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e.getMessage());}// fazer leitura da input streamStringline=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(IOExceptione){valorDeSaida=-1;log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e.getMessage());}catch(IllegalThreadStateExceptione){try{// processo ainda não terminou;// Thread esperaThread.currentThread().sleep(500);}catch(InterruptedExceptione1){valorDeSaida=-1;log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e1.getMessage());}}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}// fechar input/output streamtry{br.close();}catch(IOExceptione){valorDeSaida=-1;log.logSevere("MysqlUtil tratarGravarBufferDump -> "+e.getMessage());}pw.close();returnvalorDeSaida;}
kaede
Resolvido funcionou, ele cria o backup dentro do proj
fiz assim:
Stringcomando="C:/Arquivos de programas/VertrigoServ/Mysql\bin\mysqldump.exe";ProcessBuilderpb=newProcessBuilder(comando,"--user=root","--password=vertrigo","pjlocadora","--result-file=arquivo.sql");pb.start();
Agradeço a todos pela ajuda.
THIAGOANALISTA
Vc tem o código completo ou com esse postado consegirei fazer o meu backup?
kaede
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();