Problemas com metodo para Restaurar backup no Linux

6 respostas
Tacioandrade

Galera, estou com o seguinte problema, estou criando uma aplicaçao java, usando o Banco de dados Mysql, agora estou fazendo um metodo para fazer a restauraçao backup dos dados.

Estou criando a aplicação para rodar tanto no Linux quanto no Windows. Como uso o Linux estou fazendo para ele primeiro.

O codigo do meu metodo é o seguinte:

public void restauraBackup(String url){
           try{
               if (System.getProperty("os.name").equals("Linux")) {
                   props.load(new FileInputStream(dir+"/conf.ini"));
               } else {
                   props.load(new FileInputStream(dir+"\conf.ini"));
               }
               String host = props.getProperty("host");
               String senha = props.getProperty("senha");
               String banco = props.getProperty("banco");
               int res; 
               // Abre o arquivo
               FileInputStream stream = new FileInputStream(url);
               // Transforma os arquivos de byte para String
               InputStreamReader bkp = new InputStreamReader(stream);  
               if (System.getProperty("os.name").equals("Linux")) {
                   Process proc = Runtime.getRuntime().exec("/bin/bash -c 'mysql -uroot -p"+senha+" -f "+banco+" < "+bkp+"'");
                   proc.waitFor();
                   res = proc.exitValue();
                   if (res == 0){
                       JOptionPane.showMessageDialog(null, "Backup Restaurado com sucesso!");
                   }
                   else{
                       JOptionPane.showMessageDialog(null, "Falha ao restaurar backup Linux. \n Verifique as configurações ou entre em contato com o suporte!");
                   }   
               } else {
                   Process proc = Runtime.getRuntime().exec("cmd /c mysql -uroot -p"+senha+" -f "+banco+" < "+bkp);
                   proc.waitFor();
                   res = proc.exitValue();
                   if (res == 0){
                       JOptionPane.showMessageDialog(null, "Backup Restaurado com sucesso!");
                   }
                   else{
                       JOptionPane.showMessageDialog(null, "Falha ao restaurar backup. \n Verifique as configurações ou entre em contato com o suporte!");
                   }  
               }

           }  
           catch(Exception err){  
               JOptionPane.showMessageDialog(null, "Erro ao restaurar banco: "+err.getMessage());  
               System.out.println(err.getStackTrace());  
           }  
       }

O problema, descobri que vem a ser nesta parte:

Process proc = Runtime.getRuntime().exec("/bin/bash -c 'mysql -uroot -p"+senha+" -f "+banco+" < "+bkp+"'");

Só que não sei como é que ficaria correto, visto que todos os exemplos que tenho achado no Google são para o Windows… =/

Caso alguem possa me ajudar agradeço.

Abraço

6 Respostas

zoren

você consegue realizar esse comando através de um script?

e qual o erro que dá?

Tacioandrade

Zoren, na verdade ele nao da erro algum, apenas cai na exeção de não ter conseguido roda o comando.

Acho que o problema é a chamada do /bin/bash pelo visto, mais nao acho na net outra forma de fazer essa chamada, a unica forma que achei foi:

Process proc = Runtime.getRuntime().exec("/bin/bash -c ‘mysql -uroot -p"+senha+" -f “+banco+” < “+bkp+”’");

A parte mysql -uroot -p"+senha+" -f “+banco+” < "+bkp; rodando no terminal funciona que eu testei… =/

zoren

Mas se vc dar o printStackTrace ele traz oq?

é necessário fazer com o /bin/bash?

Não seria melhor fazer através de script?

Ao invez de usar um InputStreamReader, não seria melhor vc usar uma String?

Tacioandrade

zoren verdade, ao ler um pouco mais na net nem é necessario ler o arquivo, é so passar a url para o mysql que ele faz o trabalho todo…

Eu fiz um teste no meu codigo, usei o comando mkdir para criar uma pasta, sem usar o /bin/bash e funcionou, so que o comando de chamada do mysql num foi… =/

zoren

Existe um parametro q vc passa para o banco um comando, não sei se existe no mysql, acredito que resolva seu problema

Mas n lembro qual é o comando, vamos supor que fosse s, ai vc usaria assim:

mysql -uusuario -psenha -s 'source /home/usuario/backup.sql'

Deu algum erro qdo vc tentou usar o do mysql?

Tacioandrade

Ainda nada, agora tenho certeza que o problema é a chamada do bash…

Sei disso, pois os comandos como a chamada de programas graficos como o firefox por exemplo roda normalmente, porem a chamada de comandos modo texto como o ls num tem saida… =/

Criado 23 de maio de 2010
Ultima resposta 23 de mai. de 2010
Respostas 6
Participantes 2