Restaurar backup gerado pelo mysqldump em java[AINDA NÃO RESOLVIDO]  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Olá pessoal! Bom... acho que o assunto diz tudo né ?!? HHeuaHeHUAEhu....
Via java consegui realizar o backup, agora com o .sql contendo os 'creates' and 'inserts' como faço para restaurar? Há muito tempo venho procurando solução para isso mas não encontro. Até ler sql por sql e executar via java eu ja tentei mas pode dá os 'java heap space' da vida....

É sério, já procurei exaustivamente uma solução mas nenhumas das encontradas funcionaram.

Vlw pessoal

This message was edited 1 time. Last update was at 20/01/2010 16:54:19


"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
Adelar
GUJ Master
[Avatar]

Membro desde: 31/10/2008 10:07:36
Mensagens: 1237
Localização: Cascavel
Offline

olá,
o dump do MySQL é de certa forma dependente do mesmo. Devem ser feitos alguns ajustes para transformar em SQL padrão. Isto vc pode ler linha a linha mesmo, pegando somente os creates, inserts e alters, e submetendo via JDBC.
att.

This message was edited 1 time. Last update was at 19/01/2010 22:04:56


"Errando e aprendendo com os bugs"
http://www.cajuscript.org
[WWW] [MSN]
Zeed01
Virtual Machine Man

Membro desde: 27/10/2006 16:44:29
Mensagens: 668
Offline

Boa madrugada Galera !

É somente para fins didáticos ou você pensa em fazer algo pra usar em produção mesmo ?

Minha dúvida é porque tudo vai depender do tamanho do banco que você quer tratar.
Outro problema que vejo em executar comando SQL um a um é sobre problemas que terá que tratar, caso ocorra exceptions no meio do caminho.
E sobre a criação de indices e chaves das tabelas ?

Bom... na minha opinião, se for para utilizar em produção deveria pensar em ferramentas próprias de restore do MySQL.

[]s
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Minha dúvida é porque tudo vai depender do tamanho do banco que você quer tratar.

Pois é.... são sim, podendo haver gigas de dados.... o negocio de ler sql por sql foi mais um "chute no balde", só para mim ficar feliz vendo a coisa funcionar mas sei que assim não pode ficar.... dá pau de memoria, pois eu leio o arquivo (que não passa de um arquivo de texto) e vou adicionando o conteudo em um StringBuffer e depois dou um String[] sql = stringBufferComOConteudoDoArquivo.split(";") e entao consigo colocar cada sql em um vetor, em seguido dou um loop e executo todas. O problema é que com arquivos grandes acaba dando pau na hora de preencher o StringBuffer, em certos casos é muita coisa... É como a função "open script" do Query Browser, se você abrir um script grande vai dar pau pois ele faz dessa maneira. Não tem um meio de fazer um dump ao contrário? Aquele negócio de fazer "mysqldump -h host -u root -p 123 -d database > /home" não faz diferença o ">" ou "<" ou sem nada, o dump sempre vai fazer o backup. Eu lembro que quando usava o dump eu fazia isso, mas pelo menos via Runtime no java não funciona. Esse lance dos "<",">" eu vi num post estadunidense.... e confirmei...
É somente para fins didáticos ou você pensa em fazer algo pra usar em produção mesmo ?

HAUEhauEAeUA.... pior que é em larga escala de produção....

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
Zeed01
Virtual Machine Man

Membro desde: 27/10/2006 16:44:29
Mensagens: 668
Offline

Bom dia Galera !

Desculpe minha intromissão... mas se você esta falando em Gigas de dados, não seria melhor pensar em uma solução fora de Java ?

Pelo que entendo um processo de restore de um banco de dados não é algo corriqueiro e que será executado por qualquer usuário, na verdade, recuperar um banco não implica simplesmente em recuperar os dados, normalmente existe toda uma configuração que deve ser refeita, ajustada...

Na pós que terminei em uma das matérias o professor pediu um trabalho assim, criar uma aplicação que possibilitasse fazer backup e restore de dados, mas nesse caso o foco em utilização de XML, a aplicação permitia configurar a conexão com um banco qualquer em um arquivo XML e depois mostrava toda a estrutura de tabelas, permitindo que o usuário selecionasse quais queria fazer backup.
Depois era possivél restaurar em um banco vazio...
Mas claro que este não é o seu caso.

Desculpe não poder ajudar.

[]s
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

mas se você esta falando em Gigas de dados,

Bom... talvez eu tenha exagerado um pouquinho Vamos falar em no maximo 500 mb. Na verdade é para clientes "desinformatizados" e em situações +/- corriqueiras...

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
Zeed01
Virtual Machine Man

Membro desde: 27/10/2006 16:44:29
Mensagens: 668
Offline

Bom dia Galera !

Porque você não faz um contrato de manutenção e recebe pra fazer esse backup / restore ? Hehehe...

Bom não sei se ajuda, mas achei essa resposta num forum de MySql:

http://forums.mysql.com/read.php?72,232771,233019#msg-233019

Não sei se daria para rodar esse comando através do Runtime do Java... só testando.

[]s
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Desta forma eu tentei rodar em casa mas o mysql so retorna o help dele, aqui no serviço (Windows) o runtime deu erro pois acusa nao ter encontrado o aplicativo "mysql" mesmo informando o endereco completo do aplicativo. Já no prompt funcionou mas tive que informar o endereco completo do mysql (C:\Arquivos de programas\MySQL\MySQL Server 5.0\bin>mysql -uroot -hlocalhost teste < C:\oi.sql)

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
Zeed01
Virtual Machine Man

Membro desde: 27/10/2006 16:44:29
Mensagens: 668
Offline

Boa tarde galera !

Se no prompt do windows funciona, você não tenta executar no Runtime do java um bat que vai executar esse comando ?

[]s
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Bom... acho que pode ser, mas vou ter que ter um bat e um sh alem de ter que obter (de alguma maneira) o endereco do mysql. Acho que no windows se eu colocar nas variaveis de ambiente o endereco do mysql, vai de boa. Vou testar melhor em linux assim que chegar em casa mas também vou ter que descobrir o endereco do mysql, no linux acho que é mais faci, pois no windows o cara pode instalar em qualquer diretorio. Tô saindo agora....

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
Zeed01
Virtual Machine Man

Membro desde: 27/10/2006 16:44:29
Mensagens: 668
Offline

Boa noite Galera !

Mas mesmo que fosse no Runtime, você não teria que ter o caminho do MySql ?
Ou então ter o MySql na variavel de ambiente de Path...

Eu acho... ou não, rs.

[]s
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Boa noite pessoal!

No Runtime eu passo por exemplo: "mysqldump -h host -u user -p password myBd > /home/gustavo", mysqldump é um aplicativo, ou posso passar dessa forma ou colocar o caminho inteiro do mysqldump. O comando mysql também é um aplicativo, eu o chamo e passo parametros, quando testei la no trabalho tive que colocar o caminho completo do mysql (C:\Arquivos de programas\MySQL\MySQL Server 5.0\bin\mysql.exe no caso do Windows).
Aqui em casa (Linux) o mysqldump e reconhecido, aparentemente o mysql também mas não faz nao funciona, tentei essas instruçoes: http://dev.mysql.com/doc/refman/5.1/en/batch-mode.html
Aqui em casa nao consigo setar um arquivo .sql para o mysql nem pelo console (shel, prompt, etc)

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
nando182
Entusiasta Java
[Avatar]

Membro desde: 30/11/2009 01:31:19
Mensagens: 15
Offline

Brother se ainda for de seu interesse, eu consegui fazer os comando de backup e restore via DOS com o mysql dum e joguei tudo em um arquivo.bat, mas eu aimnda não consegui executar este tipo de arquivo pelo java, caso interesse, poste aqui qe eu respondo.
thiagoaranha
HelloWorld

Membro desde: 04/11/2008 16:21:48
Mensagens: 12
Offline

Gente, estou com o mesmo problema e gostaria que vocês analizassem até onde eu cheguei e vejam se vcs tem algum palpite.
Tenho o código:



Onde a String path eu passo o local do arquivo. Até aí sem problemas.

O curioso:

Se a String path for um local que não contenha espaços, mostro: C:\BACKUP.SQL o backup é restaurado que é uma beleza!
Entretanto, se o path for um local: "C:\Local do Arquivo\BACKUP.SQL" o backup simplesmente NÃO é restaurado! Mesmo que eu verifique e inclua ""(aspas) no começo e no final da String path.
E o mais doido ainda é que se você executar pelo cmd, o desgraçado executa tudo lindo! Por exemplo pegando a String toda fica:


O problema todo se dá quando eu coloco aspas no local do arquivo(pelo java, pelo CMD vai legal)


Alguém aí agora se habilita?? rsrs
fre_d
Java Ninja

Membro desde: 13/06/2007 17:42:02
Mensagens: 259
Localização: Lages - SC
Offline



Tente utilize um array de opções e valores, conforme o link abaixo.

http://www.velocityreviews.com/forums/t680643-runtime-getruntime-exec-append-the-parameters.html
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team