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?
JSjava
Agosto 25, 2011, 9:29pm
#7
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.