Exportar/Importar BDs MySQL no Linux

Saudações amigos! Depois de muito pesquisar cheguei a solução de como fazer a exportação/importação de BDs MySQL rodando sobre Linux. Vi muitas propostas de soluções aqui no fórum, mas elas sempre apresentavam algum erro quando ia rodar (principalmente por causa dos redirecionadores utilizados no comando para fazer as exportações/importações). Compartilho com vocês o código (relativamente simples, mas que rendeu algumas horas de pesquisa):

[code]public void exportarBD(String nomeBD, String nomeBKP) {

    try {
        String comando = "/usr/bin/mysqldump";
        ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=root", nomeBD, "--result-file=" + nomeBKP + ".sql");
        pb.start();
    } catch (IOException ex) {
        ex.printStackTrace();
    } 

}

[/code]

[code] public void importarBD(String nomeArqOrigem, String nomeBDDestino) {

    try {
        String comando = "/usr/bin/mysql";
        ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=root", nomeBDDestino, "--execute=source " + nomeArqOrigem + ".sql");
        pb.start();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

}[/code]

Abraços! :smiley:

e essa msm solução pra windows na parte do IMPORT como ficaria?

Cara, creio que do mesmo jeito… Apenas atente-se que você tem que passar para o método importarBD o caminho do arquivo sem a extensão .sql, ou então retirar da linha

ProcessBuilder pb = new ProcessBuilder(comando, "--user=root", "--password=root", nomeBDDestino, "--execute=source " + nomeArqOrigem + ".sql");  

o .sql… :smiley:

fiz do jeito q vc falou e ele naum achou o caminho, utlizando o windows

Na linha

 String comando = "/usr/bin/mysql"; 

coloque o caminho do mysql no windows, lembrando sempre que você deve usar duas barras. Por exemplo: C:\Windows\Teste

isso, isso só falta acertar o RESTORE o BACKUP já fiz…esse trecho é o q: --execute=source…deve ser nele q tem q passar o caminho.

Umm… posta ai o erro pra gente ver…

agora nem dá erro mas tb naum restaura…

[code]public static void importarBD(String nomeArqOrigem, String nomeBDDestino) {

    try {  
        String comando = "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin\\mysql";  

// String comando = “C:\Arquivos de programas\MySQL\MySQL Server 5.1\bin\mysql”;
ProcessBuilder pb = new ProcessBuilder(comando, “–user=root”, “–password=admin”,
nomeBDDestino, “–execute=source” + nomeArqOrigem + “.sql”);
pb.start();
} catch (IOException ex) {
ex.printStackTrace();
}
}
[/code]

[quote=luxu]agora nem dá erro mas tb naum restaura…

[code]public static void importarBD(String nomeArqOrigem, String nomeBDDestino) {

    try {  
        String comando = "C:\\Program Files (x86)\\MySQL\\MySQL Server 5.1\\bin\\mysql";  

// String comando = “C:\Arquivos de programas\MySQL\MySQL Server 5.1\bin\mysql”;
ProcessBuilder pb = new ProcessBuilder(comando, “–user=root”, “–password=admin”,
nomeBDDestino, “–execute=source” + nomeArqOrigem + “.sql”);
pb.start();
} catch (IOException ex) {
ex.printStackTrace();
}
}
[/code][/quote]

Você está se atentando a questão do .sql?

num entendi, mas vendo o método de restaurar:

mysql -u root -p123 -h localhost banco_exemplo < backup_banco.sql

e comparando com o seu faltou a parte do localhost naum axa? o q faz esse –execute=source?

[quote=luxu]num entendi, mas vendo o método de restaurar:

mysql -u root -p123 -h localhost banco_exemplo < backup_banco.sql

e comparando com o seu faltou a parte do localhost naum axa? o q faz esse –execute=source?[/quote]
Umm, quanto ao localhost, eu não uso para restaurações locais… O --execute=source faz com que o mysql leia de um arquivo os parâmetros de restauração do banco de dados… Eu tive muita dificuldade para usar os redirecionadores (< e >) por isso utilizei esse método…

ou seja ao invés de ‘<’ vc usou --execute=source?

[quote=luxu]ou seja ao invés de ‘<’ vc usou --execute=source?[/quote] Sim, essa é a idéia. Para testar se o comando de importação de fato está funcionando, tente fazer no prompt:

mysql --user=root --password=admin nomeBDDestino --execute="source arquivo.sql"

Lembro-lhe que no comando não usei aspas na parte do “source arquivo.sql” porque (não sei o motivo) só funciona sem… Mas no prompt precisa das aspas… Testa ai pra gente ver…

perfeito, restaurou…vou fazer o teste no Eclipse…

Oi jotinhaelloco, li este tópico e estou com o mesmo problema do luxu testei está ultima dica no código java mas nada acontece nem erro nem restaurar.
Se puder me ajudar agradeço estou desesperado por uma solução.
a seguir o código o código que estou utilizando:

[code]try {
JFC_Backup.setVisible(true);
String bd = “sisdimapol”;
int result = JFC_Backup.showOpenDialog(null);

        if (result == JFileChooser.OPEN_DIALOG) {

            File bkp;
            bkp = JFC_Backup.getSelectedFile();
            String arq = bkp.getPath();
            System.out.println("bd " + bd);
            System.out.println("arq " + arq);
            String[] cmd = new String[3];
            cmd[0] = "cmd.exe";
            cmd[1] = "/C";
            cmd[2] = "C:\\wamp\\bin\\mysql\\mysql5.5.8\\bin\\mysql" + " -u root" + " -p qwe123" + bd + "-execute=source" + arq;
            System.out.println(cmd[1]);
            Runtime rt = Runtime.getRuntime();
            System.out.println("Execing " + cmd[0] + " " + cmd[1]);
            proc = rt.exec(cmd);

            // any error message?

            StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");

            // any output?
            StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");

            // kick them off
            errorGobbler.run();
            outputGobbler.run();

            // any error???
            int exitVal = proc.waitFor();
            if (exitVal == 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 e) {
        JOptionPane.showMessageDialog(null, e, "Erro!", 2);
    }[/code]

Saída da Execução:

run: bd sisdimapol arq C:\Backup\Teste1.sql /C Execing cmd.exe /C // E fica assim e o programa trava ou fica executando sei lá, entra em lupe.

Queria saber do luxu também se conseguiu?