Backup do MYSQL no Linux

Boa Noite, sei que esse é um assunto batido e existem dezenas de tópicos aqui no GUJ.Porém, não consegui achar nenhum que me resolvesse o problema.

Preciso fazer o backup de bancos de dados MYSQL.Consegui fazer rodar no Windows

cmd /c mysqldump -u root -psenha bancodedados > C:/teste.sql

Agora preciso colocar esse código para rodar no servidor que é Linux.Fui no SSH e digitei o seguinte:

mysqldump -h host -u user -psenha bancodedados > /home/xxxx/webapps/ROOT/teste.sql

O arquivo .sql foi criado no local correto.Ao tentar executar esse código pelo Java (Runtime.getExec), não ocorre nenhum erro mas também não cria o arquivo.Estou executando o arquivo Java que está localizado no mesmo servidor, portanto possui as permissões para acessar o banco de dados.

Preciso colocar uma localização para o mysqldump? Para achar o comando?

Alguém sabe me dizer qual é o equivalente no Linux?

Eu fiz uma funcao que cria um shellscript e executa ele. Esse shell que faz o backup…

    public String doBackup() throws RemoteException, IOException, InterruptedException {
        //faz o backup e retorna o nome do arquivo...

        StringBuffer s = new StringBuffer();

        s.append("#!/bin/bash\n");
        s.append("\n");

        //COLOCAR NESTAS VARIAVEIS A INFORMACAO DE SERVIDOR, SENHA, USUARIO, ETC DO MYSQL
        s.append("SERVER=localhost\n");
        s.append("USER=root\n");
        s.append("PORT=3306\n");
        s.append("PASS=123456\n");
        s.append("DB=meubanco\n");
        s.append("\n");


        File tmpDir = File.createTempFile("backupUltra", null);
        tmpDir.delete();
        tmpDir.mkdirs();

        s.append("TMPDIR=" + tmpDir.getAbsolutePath() + "\n");

        s.append("rm $TMPDIR\n");
        s.append("mkdir $TMPDIR\n");

        s.append("\n");
        s.append("mkdir -p /opt/ultraBackup\n");
        s.append("\n");
        s.append("mysqldump -h $SERVER --port $PORT -u $USER --password=$PASS --add-drop-database --add-drop-table --disable-keys --extended-insert --add-locks --single-transaction $DB | gzip -f > $TMPDIR/database.dump\n");
        s.append("\n");

        s.append("\n");

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HHmmss");
        String TGZ = "backup-ultra-" + sdf.format(new Date()) + ".tar.gz";

        s.append("TGZ=/tmp/" + TGZ + "\n");
        s.append("\n");
        s.append("cd $TMPDIR\n");

        //String[] names = tmpDir.getAbsolutePath().split("[" + File.separator + "]");

        s.append("tar czf $TGZ *\n");
        s.append("\n");
        s.append("rm -fr $TMPDIR\n");
        s.append("\n");
        s.append("mv $TGZ /opt/ultraBackup\n");
        s.append("\n");


        File scriptBackup = File.createTempFile("backupUltra", ".sh");
  
        scriptBackup.createNewFile();
        scriptBackup.setExecutable(true);
        BufferedWriter bw = new BufferedWriter(new FileWriter(scriptBackup));
        bw.write(s.toString());
        bw.flush();
        bw.close();

        Process p = Runtime.getRuntime().exec(scriptBackup.getAbsolutePath());
        int resultado = p.waitFor();


        if (resultado == 0) {
            scriptBackup.delete();
            return "/opt/ultraBackup/" + TGZ;
        } else {
            throw new RemoteException("Saida de erro: " + resultado);
        }


    }

Legal esse seu script bem mais trabalhado.Pelo que eu entendi você cria um arquivo .sh temporário executa ele e salvo o backup em arquivo .tar.gz.

Mas não entendi algumas coisas nele:

Porque essa localização /opt/ultraBackup? Esse opt seria a pasta que você está salvando o backup?

Eh sim,

No meu caso os backups vao sempre pra la… mas voce pode adicionar um parametro na funcao tipo dstDir sei la.

[]s

Não existe algo similar que possa fazer o mysqldump no Linux?
Como faço para chamar o comando mysqldump pelo Runtime.getExec?

Ai Rafael, sei que o post é antigo, mas estou com o mesmo problema, não seria possivel me passar a solucao, caso a tenha encontrado?

Obrigado.

Não foi mais necessário implementar esta funcionalidade. Por isso, acabei não finalizando esta tarefa.

Se achar a solução nos avise.