MYSQLDUMP E VB2005
Boa tarde a todos.
Estou tentando fazer backup de um banco de dados MySql. Ao executar o comando no DOS, funciona corretamente, mas ao tentar o mesmo comando no VB2005, recebo o return code 6.
Comando DOS :
mysqldump -h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.txt
VB2005 :
Dim pProperties As New ProcessStartInfo
With pProperties
.FileName = [Ô]mysqldump.exe[Ô]
.WorkingDirectory = [Ô]C:\TEMP[Ô]
.Arguments = [Ô]-h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.sql[Ô]
.WindowStyle = ProcessWindowStyle.Normal
.UseShellExecute = False
.RedirectStandardOutput = True
End With
Dim p As Process = Process.Start(pProperties)
O que há de errado ?
Grato,
Rene
Estou tentando fazer backup de um banco de dados MySql. Ao executar o comando no DOS, funciona corretamente, mas ao tentar o mesmo comando no VB2005, recebo o return code 6.
Comando DOS :
mysqldump -h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.txt
VB2005 :
Dim pProperties As New ProcessStartInfo
With pProperties
.FileName = [Ô]mysqldump.exe[Ô]
.WorkingDirectory = [Ô]C:\TEMP[Ô]
.Arguments = [Ô]-h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.sql[Ô]
.WindowStyle = ProcessWindowStyle.Normal
.UseShellExecute = False
.RedirectStandardOutput = True
End With
Dim p As Process = Process.Start(pProperties)
O que há de errado ?
Grato,
Rene
Não tenho bem certeza, mas parece que o mysqldump só funciona sendo chamado através do cmd, por isso utilizo
um arquivo .bat para chamar ele.
Parar testar crie um .bat
BK_BD.bat
DEPOIS NO VB:
Dim VAR_NOBAT As String
VAR_NOBAT = [Ô]mysqldump -h [Ô] & VHOST & [Ô] -u root -70763 -x banco > BK_BD.SQL[Ô] & vbNewLine & _
[Ô]move BK_BD.SQL [Ô] & c:\
File.WriteAllText(My.Application.Info.DirectoryPath & [Ô]\BK_BD.bat[Ô], VAR_NOBAT) [ô]**
Shell(My.Application.Info.DirectoryPath & [Ô]\bk_bd.bat[Ô])
um arquivo .bat para chamar ele.
Parar testar crie um .bat
BK_BD.bat
DEPOIS NO VB:
Dim VAR_NOBAT As String
VAR_NOBAT = [Ô]mysqldump -h [Ô] & VHOST & [Ô] -u root -70763 -x banco > BK_BD.SQL[Ô] & vbNewLine & _
[Ô]move BK_BD.SQL [Ô] & c:\
File.WriteAllText(My.Application.Info.DirectoryPath & [Ô]\BK_BD.bat[Ô], VAR_NOBAT) [ô]**
Shell(My.Application.Info.DirectoryPath & [Ô]\bk_bd.bat[Ô])
O problema não é ele não só funcionar quando executado pelo cmd, e sim o comando em si
Quando você roda este comando no console
mysqldump -h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.txt
na verdade o comando que é executado é apenas esse
mysqldump -h localhost -u root -psenha demo2013
o parâmetro no final nunca é passado para o mysqldump (ou qualquer outro programa), pois ele na verdade é um redirecionamento de saÃda, aquilo basicamente diz para o cmd.exe que em vez dele mostrar o resultado do programa na própria janela do console ele deve salvar ele naquele arquivo, se você for ver na documentação do mysqldump eles nunca dizem que o programa salva o resultado em um arquivo.
Até é possÃvel fazer isso que o cmd faz no .Net, só que você teria que ler e salvar o resultado manualmente, o primeiro passo você já faz ali, que é definir o RedirectStandarOutput = True
O próximo passo seria ler o que o mysqldump está retornando usando, no seu caso a variável [ô]p[ô], algo do tipo
Dim resultado As String = p.StandardOutput.ReadToEnd()
Não testei aqui, mas com isso teoricamente você teria o resultado em uma string que você teria que salvar manualmente, digo teoricamente pois não sei se chamar o ReadToEnd enquanto o outro programa ainda está trabalhando vai esperar ele terminar para ler ou vai ler só até onde ele já fez e vai retornar.
Quando você roda este comando no console
mysqldump -h localhost -u root -psenha demo2013 > C:\TEMP\backupdb.txt
na verdade o comando que é executado é apenas esse
mysqldump -h localhost -u root -psenha demo2013
o parâmetro no final nunca é passado para o mysqldump (ou qualquer outro programa), pois ele na verdade é um redirecionamento de saÃda, aquilo basicamente diz para o cmd.exe que em vez dele mostrar o resultado do programa na própria janela do console ele deve salvar ele naquele arquivo, se você for ver na documentação do mysqldump eles nunca dizem que o programa salva o resultado em um arquivo.
Até é possÃvel fazer isso que o cmd faz no .Net, só que você teria que ler e salvar o resultado manualmente, o primeiro passo você já faz ali, que é definir o RedirectStandarOutput = True
O próximo passo seria ler o que o mysqldump está retornando usando, no seu caso a variável [ô]p[ô], algo do tipo
Dim resultado As String = p.StandardOutput.ReadToEnd()
Não testei aqui, mas com isso teoricamente você teria o resultado em uma string que você teria que salvar manualmente, digo teoricamente pois não sei se chamar o ReadToEnd enquanto o outro programa ainda está trabalhando vai esperar ele terminar para ler ou vai ler só até onde ele já fez e vai retornar.
Bom dia Pessoal.
Os dois tem razão !!!
Realmente o problema estava no comando que estava direcionado para DOS.
Li o manual do MySqlDump procurando alternativas para o [Ô]> arquivo[Ô] e descobri que existe o parâmetro [Ô]--result-file=file_name, -r file_name [Ô], ele direciona a saida diretamente para o arquivo especificado sem passar pelo DOS.
Dessa forma, os parâmetros do comando ficam dessa forma :
.Arguments = [Ô]-h localhost -u root -psenha demo2013 -r C:\TEMP\backupdb.sql[Ô]
Fiz os testes e funciona perfeitamente.
Valeu pela ajuda.
Abraço,
Renê
Os dois tem razão !!!
Realmente o problema estava no comando que estava direcionado para DOS.
Li o manual do MySqlDump procurando alternativas para o [Ô]> arquivo[Ô] e descobri que existe o parâmetro [Ô]--result-file=file_name, -r file_name [Ô], ele direciona a saida diretamente para o arquivo especificado sem passar pelo DOS.
Dessa forma, os parâmetros do comando ficam dessa forma :
.Arguments = [Ô]-h localhost -u root -psenha demo2013 -r C:\TEMP\backupdb.sql[Ô]
Fiz os testes e funciona perfeitamente.
Valeu pela ajuda.
Abraço,
Renê
Tópico encerrado , respostas não são mais permitidas