Backup no Mysql com Delphi – Segunda Parte

O Mysql é uma ótima ferramenta para gerenciamento de banco de dados e funciona muito bem com Delphi, mas sinto falta de um componente simples para execução do backup.

Seria muito fácil fazer um backup apenas copiando os  arquivos da pasta “Data” do banco mysql, como se faz com programas e pastas do computador, porem nos temos um problema quando tentamos copiar a pasta de dados, pois os arquivos estão em uso pelo servido do banco, para copiar os arquivos, poderíamos usar os comandos net use, parar o serviço, copiar o banco e iniciar  o serviço novamente.

Esse tipo de backup tem que ser feito em horários em que o sistema não esteja em funcionamento, pois o banco fica  indisponível.

Mas nossos sistema também devem ter rotinas que permitam que o backup seja feito a qualquer momento. para isso recomendo a leitura de um post anterior de como usar o utilitário MyDump.exe  antes de prosseguir.

https://soprogramando.wordpress.com/2008/08/01/backup-no-mysql/

lembrando que o MyDump.exe está nos binários da instalação do Mysql e deve ser copiado onde o executável está instalado, e deve ser executado por parâmetros via comando.

veja um exemplo de uma função do backup.

private 
 { Private declarations }
 procedure ExecutaBackupBD();
  function ExecutarProcesso(cmd: string): Boolean;
implementation
procedure TFrmManBackup.ExecutaBackupBD;
var
   strBanco, strHost, strUsuario, strSenha, strComando, strCaminho, strArquivo: string;
begin
   try 
      strCaminho := ExtractFilePath(Application.ExeName) + 'backup\';
      if not DirectoryExists(strCaminho) then
      begin
         CreateDir(strCaminho);
      end;
      if FileExists(ExtractFilePath(Application.ExeName) + 'mysqldump.exe') then
      begin
          strArquivo := strCaminho + 'BD_' + FormatDateTime('YYYY-mm-dd_hhnnss', Now) + '.sql';
         strHost := 'Servidor';
         strUsuario :='Usuario';
         strSenha := 'Senha';
         strBanco := 'Banco';
        strComando := 'cmd.exe /c ""' + 
                       ExtractFilePath(Application.ExeName) +
                       '\mysqldump.exe" ' + strBanco +
                       ' -h' + strHost +
                       ' -u' + strUsuario +
                       ' -p' + strSenha + 
                       ' --databases --opt -c -e ' + 
                       '>' + '"' +
                       strArquivo + '""';
        ExecutarProcesso(strComando);
      end
      else
      begin
         ShowMessage('Atenção o aplicativo auxiliar mysqldump não se encontra no diretório, ' +
                     'solicite o mesmo ao suporte do sistema ');
      end;
   finally
      FreeAndNil(Ini);
   end;
end;
function TFrmManBackup.ExecutarProcesso(cmd: string): Boolean;
var
 SUInfo : TStartupInfo;
 ProcInfo: TProcessInformation;
begin
 FillChar(SUInfo, SizeOf(SUInfo), #0);
 SUInfo.cb := SizeOf(SUInfo);
 SUInfo.dwFlags := STARTF_USESHOWWINDOW;
 SUInfo.wShowWindow := SW_HIDE;
 Result := CreateProcess(nil, PChar(cmd), nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
if (Result) then
 begin
 WaitForSingleObject(ProcInfo.hProcess, INFINITE);
 CloseHandle(ProcInfo.hProcess);
 CloseHandle(ProcInfo.hThread);
 end;
end;
Colaboração Andre Langner

9 comentários em “Backup no Mysql com Delphi – Segunda Parte

Adicione o seu

    1. a parametrização e a forma que você executa o mysqlDump.exe podem estar gerando erros, como estamos invocando um executável sem interface windows os erros não são exibidos.
      recomendo que você execute o dump via prompt e observe os erros que ele vai lhe apresentar.

    2. esse erro ocorre quando o programa não consegue executar corretamente os caminhos dos arquivos ou a autenticação com mysql falha,

      envia ai ctrlC + ctrlV do teu codigo

  1. Amigo, bom dia!
    o script funcionou direitinho pelo cmd, porém a minha senha é em branco e mesmo colocando -p ” ” ele pede senha… acho que é por isso que o arquivo está sendo criado com 0bytes… sabe como resolver isso?

      1. FreeAndNil(NomeObjeto)

        No Delphi usamos free para destruir um objeto em memória, nil e nil para colocar o valor nulo no endereço da memória.

Deixar mensagem para soprogramando Cancelar resposta

Site criado com WordPress.com.

Acima ↑