BACKUP AND RESTORE
Bom pesquisei muito sobre como fazer backup do mysql e o restore cheguei no seguinte código:
Ele faz o backup perfeito o problema é que eu não consigo mudar o diretório de saída do arquivo backup.sql eu até consigo gera-lo em outra pasta com:
--result-file=C:\\BACKUP\\backup.sql
só que ele salva no Directory do meu programa também e não salva com o nome data e hora no C:\\BACKUP\\. ele só salva com o nome data e hora no Directory do meu programa, alguém sabe porque ?
-----------------
procedure TfrmBackup.ExecutarBackup; var aa,mm,dd, hh, mmm, ss, sss: word; aux : string; begin aux := 'cmd.exe /c "C:\\wamp64\\bin\\mysql\\mysql5.7.19\\bin\\mysqldump --opt --flush-logs --triggers --port=3306 '; aux := aux + '--user=admin --password=admin --result-file=backup.sql --databases comercio"'; lblMensagem.Caption := 'Aguarde. Efetuando Backup'; lblMensagem.Refresh; if not createProcessSimple(aux) then lblMensagem.Caption := 'BACKUP NÃO FOI PROCESSADO!' else begin decodedate(date, aa, mm, dd); decodetime(time, hh, mmm, ss, sss); if FileExists('BACKUP.SQL') then begin aux := inttostr(aa) + '-'; if mm < 10 then aux := aux + '0' + inttostr(mm) + '-' else aux := aux + inttostr(mm); if dd < 10 then aux := aux + '0' + inttostr(dd) + '-' else aux := aux + inttostr(dd) + '-'; if hh < 10 then aux := aux + '0'+ inttostr(hh) + '.' else aux := aux + inttostr(hh) + '.'; if mmm < 10 then aux := aux + '0' + inttostr(mmm) else aux := aux + inttostr(mmm); aux := aux + '.sql'; RenameFile('BACKUP.SQL', aux); lblMensagem.Caption := 'Backup Realizado!'; end; end; end;
Ele faz o backup perfeito o problema é que eu não consigo mudar o diretório de saída do arquivo backup.sql eu até consigo gera-lo em outra pasta com:
--result-file=C:\\BACKUP\\backup.sql
só que ele salva no Directory do meu programa também e não salva com o nome data e hora no C:\\BACKUP\\. ele só salva com o nome data e hora no Directory do meu programa, alguém sabe porque ?
-----------------
Michel
Curtidas 0
Melhor post
Ilano Frota
10/04/2018
Olá Michel,
Eu faço da seguinte maneira:
No DataModule (DMDados), na seção PUBLIC crio uma variável que vai pegar o diretório da aplicação:
Ainda na DMDados, no evento OnCreate faço:
Depois, numa Unit global, implemento a função:
No evento OnClick do botão, por exemplo, crio o seguinte comando:
A estrutura do bat deverá ficar:
Espero ter ajudado.
Eu faço da seguinte maneira:
No DataModule (DMDados), na seção PUBLIC crio uma variável que vai pegar o diretório da aplicação:
public DiretorioAtual : String;
Ainda na DMDados, no evento OnCreate faço:
DiretorioAtual := ExtractFilePath(Application.ExeName);
Depois, numa Unit global, implemento a função:
function CriarArquivoBat(pDiretorio : String) : String; { Cria um arquivo BAT que faz o backup do banco MySQL } Var vlDia, vlData, vlBase : String; begin vlDia:=IntToStr(DayOfWeek(Now())); vlData:=FormatDateTime('dddd', Now()); If Trim(DMDados.pBase) = '' Then vlBase:=DMDados.DADOS.Database Else vlBase:=DMDados.pBase; DMDados.Lista.Clear; DMDados.Lista.Add('mysqldump.exe -B -c --single-transaction ' + '--default-character-set=latin1 ' + vlBase + ' -u ' + DMDados.DADOS.User + ' --password="' + DMDados.DADOS.Password + '" --port=' + IntToStr(DMDados.DADOS.Port) + ' -h ' + DMDados.DADOS.HostName + ' > ' + vlDia + '_BKP_' + vlBase + '_' + vlData + '.sql'); DMDados.Lista.SaveToFile(pDiretorio + 'backupMySQL.bat'); end;
No evento OnClick do botão, por exemplo, crio o seguinte comando:
procedure TFrmMenuPrincipal.BtnBackupClick(Sender: TObject); Var pDiretorio : String; begin pDiretorio:=DMDados.DiretorioAtual + 'backupMySQL.bat'; If Not FileExists(pDiretorio) Then CriarArquivoBat(DMDados.DiretorioAtual); If FileExists(DMDados.DiretorioAtual + 'mysqldump.exe') Then Begin ShellExecute(Handle, 'open',PChar(pDiretorio) , nil, nil, SW_HIDE); //SW_MINIMIZE); End Else If Not FileExists(DMDados.DiretorioAtual + 'mysqldump.exe') Then Begin ShowMessage('Não foi encontrado o arquivo mysqldump.exe' + #13 + #13 + 'Favor entrar em contato com seu desenvolvedor..'); End; end;
A estrutura do bat deverá ficar:
mysqldump.exe -B -c --single-transaction --default-character-set=latin1 SUBA_TABELA -u USUARIO_DO_BANCO --password="SENHA_DO_BANCO" --port=PORTA_DO_BANCO -h SERVIDOR_DO_BANCO > NOME_DO_ARQUIVO.sql
Espero ter ajudado.
GOSTEI 1
Mais Respostas
Ilano Frota
29/03/2018
Opa! Ia me esquecendo. Lá na função CriarArquivoBat tem as linhas contendo DMDados.Lista. é que lá no DMDados, também inclui na cláusula PUBLIC a linha:
E no OnCreate do DataModule, também adicionei a linha
Acho que não esqueci mais nada rrrssss...
Lista : TStringList;
E no OnCreate do DataModule, também adicionei a linha
Lista:=TStringList.Create;
Acho que não esqueci mais nada rrrssss...
GOSTEI 1