Atendendo a uma solicitação de um membro deste fórum que pedu para ensiná-lo a fazer uma rotina de backup para seu banco MySQL, e sendo eu adepto a divulgação do conhecimento, disponibilizo abaixo uma rotina (codigo fonte) completo que desenvolvi para resolver o problema de um cliente e que está em pleno funcionamento.
Este programa usa uma chamada ao DOS (prompt de comando) que aciona o utilitário de backup do mysql (o mysqldump), aguarda até o fim da execução do mesmo e entrega um arquivo ‘.sql’ com o backup do banco.
O grande ponto deste programa é a rotina createProcessSimple que consegui na net e que possibilita a chamada de um programa e a espera até que o mesmo tenha terminado.
A rotina utiliza o seguinte caso de uso (UML):
Pré-condição:
A) O usuário utilizado no mysqldump necessita ter plenos direitos para acesso ao banco de dados
B) O programa necessita de direitos de acesso, leitura, escrita e exclusão, na pasta em que será gravado o backup
Pós condição: arquivo de backup com data e hora em que foi gerado.
Requisitos Não Funcionais:
A) O programa necessita ser executado diretamente no console (para evitar tráfego na rede) servidor do banco de dados
B) O servidor do banco de dados deve ter espaço suficiente para armazenar o backup (duas ou três vezes mais que o tamanho do arquivo a ser gerado)
Caso de Uso:
1) Ator aciona programa
2) Sistema Exibe mensagem “Aguarde. Efetuando Backup”.
3) Sistema aciona chamada ao DOS para executar o mysqldump
4) Mysqldump, através da Chamada ao DOS gera arquivo “backup.sql”
5) Chamada ao DOS retorna ao sistema, após fim da execução de mysqldump informando sucesso na operação
6) Sistema renomeia arquivo “backup.sql” para a seguinte configuração: aaaammddhhmnss.sql sendo: aaaa = ano; mm = mês, dd = dia; hh = hora mn = minutos; ss = segundos.
7) Sistema exibe mensagem “Backup Realizado!”
8) Fim do caso de uso.
Fluxo de exceção no item 5
5.1 Chamada ao DOS retorna ao sistema, após fim da execução de mysqldump informando sucesso na operação
5.2 Sistema exibe mensagem “BACKUP NÃO FOI PROCESSADO!”
5.3-Vai para item 8
5.4-Fim do Fluxo de exceção.
Espero que seja útil a todos vocês assim como está sendo útil comigo.
backup.dpr
program backup;
uses
Forms,
unitbackup in 'unitbackup.pas' {frmBackup};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Backup';
Application.CreateForm(TfrmBackup, frmBackup);
Application.Run;
end.
unit unitbackup;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Shellapi, Buttons, ExtCtrls;
type
TfrmBackup = class(TForm)
lblMensagem: TLabel;
btnOK: TBitBtn;
Timer1: TTimer;
procedure btnOKClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
function CreateProcessSimple(cmd: string):boolean;
procedure ExecutarBackup;
public
{ Public declarations }
end;
var
frmBackup: TfrmBackup;
implementation
{$R *.dfm}
function TfrmBackup.CreateProcessSimple(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;
procedure TfrmBackup.btnOKClick(Sender: TObject);
begin
close;
end;
procedure TfrmBackup.ExecutarBackup;
var aa,mm,dd, hh, mmm, ss, sss: word;
aux : string;
begin
aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=3306 ';
aux := aux + '--user=root --result-file=backup.sql --databases sase"';
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);
if ss < 10 then
aux := aux + '0'+ inttostr(ss)
else
aux := aux + inttostr(ss);
aux := aux + '.sql';
RenameFile('backup.sql', aux);
lblMensagem.Caption := 'Backup Realizado!';
end;
end;
btnOK.Enabled := True;
end;
procedure TfrmBackup.Timer1Timer(Sender: TObject);
begin
ExecutarBackup;
Timer1.Enabled := False;
end;
end.
Pergunta
Denis Courcy
Rotina de backup completa
Prezados,
Atendendo a uma solicitação de um membro deste fórum que pedu para ensiná-lo a fazer uma rotina de backup para seu banco MySQL, e sendo eu adepto a divulgação do conhecimento, disponibilizo abaixo uma rotina (codigo fonte) completo que desenvolvi para resolver o problema de um cliente e que está em pleno funcionamento.
Este programa usa uma chamada ao DOS (prompt de comando) que aciona o utilitário de backup do mysql (o mysqldump), aguarda até o fim da execução do mesmo e entrega um arquivo ‘.sql’ com o backup do banco.
O grande ponto deste programa é a rotina createProcessSimple que consegui na net e que possibilita a chamada de um programa e a espera até que o mesmo tenha terminado.
A rotina utiliza o seguinte caso de uso (UML):
Pré-condição:
A) O usuário utilizado no mysqldump necessita ter plenos direitos para acesso ao banco de dados
B) O programa necessita de direitos de acesso, leitura, escrita e exclusão, na pasta em que será gravado o backup
Pós condição: arquivo de backup com data e hora em que foi gerado.
Requisitos Não Funcionais:
A) O programa necessita ser executado diretamente no console (para evitar tráfego na rede) servidor do banco de dados
B) O servidor do banco de dados deve ter espaço suficiente para armazenar o backup (duas ou três vezes mais que o tamanho do arquivo a ser gerado)
Caso de Uso:
1) Ator aciona programa
2) Sistema Exibe mensagem “Aguarde. Efetuando Backup”.
3) Sistema aciona chamada ao DOS para executar o mysqldump
4) Mysqldump, através da Chamada ao DOS gera arquivo “backup.sql”
5) Chamada ao DOS retorna ao sistema, após fim da execução de mysqldump informando sucesso na operação
6) Sistema renomeia arquivo “backup.sql” para a seguinte configuração: aaaammddhhmnss.sql sendo: aaaa = ano; mm = mês, dd = dia; hh = hora mn = minutos; ss = segundos.
7) Sistema exibe mensagem “Backup Realizado!”
8) Fim do caso de uso.
Fluxo de exceção no item 5
5.1 Chamada ao DOS retorna ao sistema, após fim da execução de mysqldump informando sucesso na operação
5.2 Sistema exibe mensagem “BACKUP NÃO FOI PROCESSADO!”
5.3-Vai para item 8
5.4-Fim do Fluxo de exceção.
Espero que seja útil a todos vocês assim como está sendo útil comigo.
backup.dpr
unitbackup.dfm unitbackup.pasLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.