Fórum BACKUP AND RESTORE #592071
29/03/2018
0
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
Curtir tópico
+ 0
Responder
Post mais votado
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.
Ilano Frota
Responder
Gostei + 1
Mais Posts
10/04/2018
Ilano Frota
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...
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)