Delphi Dünyası Facebook'ta

Kodbank İndir

! CODEBANK 2012 !

İNDİRMEK&DETAYLI BİLGİ ALMAK İÇİN BURAYI TIKLAYINIZ.

Gönderen Konu: MySql Veritabanı Yedekleme ve Yedekten Geri Yükleme  (Okunma sayısı 366 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı dynamo

  • Delphi 3 Level 4
  • ****
  • İleti: 137
  • Rep: +3/-1
MyDAC5.20 bileşen seti içinde olan MyDump1 kullanılarak mysql datasını yedekleme ve yedekten geri yüklemeyi yapalım.Bu işlem hem backup/restore hem  de bir pc'den başka pc'ye data taşımada kullanılır.

Yedekleme(Backup):
MyDump1->Objects->doData özelliğini kullanarak yedekleme esnasında boş veritabanı yedeği de oluşturabiliriz.Böylece yedekten geri yüklemede boş veritabanı oluşturulabilir.Bunu form üzerinde iki radiobutton koyarak elde edebiliriz:

   
Kod: [Seç]
  if radiobutton1.Checked then MyDump1.Objects:=[doUsers,doStoredProcs,doTables,doData,doViews];  //dolu
   if radiobutton2.Checked then MyDump1.Objects:=[doUsers,doStoredProcs,doTables,doViews]; //boş

Yedekten Geri yükleme(Restore):
Yedek veritabanı dosyasından geri yükleme MyDump1.RestoreFromFile(s); ile yapılır.Fakat bundan önce o veritabanının oluşturulması,önceden varsa silinip oluşturulması gerekir.MyScript1.SQL.Text:='drop database if exists vt;create database vt;use vt;';





MyDump1->goDatabase=false yaptım.Böylece daha önceden almış olduğum mysql yedek dosyasını seçerek, Yedekten Geri Yükle altında veritabanı adını girerek aynı adlı yada farklı isimde yeni data oluşturabiliyorum.

ÖRNEK PROGRAM:




Kod: [Seç]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,IniFiles, StdCtrls, MyBackup, DADump, MyDump, ComCtrls, Buttons,
  DB, DBAccess, MyAccess, ExtCtrls,ShellApi, DAScript, MyScript;

type
  TForm1 = class(TForm)
    MyDump1: TMyDump;
    MyConnection1: TMyConnection;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    lbTableName: TLabel;
    ProgressBar1: TProgressBar;
    MyScript1: TMyScript;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label7: TLabel;
    Edit7: TEdit;
    TabSheet2: TTabSheet;
    SpeedButton3: TSpeedButton;
    Label8: TLabel;
    Edit8: TEdit;
    Button1: TButton;
    Button2: TButton;
    SpeedButton1: TSpeedButton;
    Label1: TLabel;
    Edit1: TEdit;
    GroupBox1: TGroupBox;
    Label2: TLabel;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure MyDump1BackupProgress(Sender: TObject; ObjectName: String;
      ObjectNum, ObjectCount, Percent: Integer);
    procedure MyDump1RestoreProgress(Sender: TObject; Percent: Integer);
    procedure SpeedButton3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var s,yedeklemeyeri,yedekdosyaadi,database:string;
begin
   database:=trim(Edit2.Text);
   MyConnection1.Close;
   MyConnection1.Username:='root';
   MyConnection1.Password:='root';
   MyConnection1.Database:=database;
   MyConnection1.Server  :='localhost';
   MyConnection1.Open;

   ProgressBar1.Position := 0;

   yedekdosyaadi:=trim(Edit1.Text);
   yedeklemeyeri:= trim(Edit7.Text) ;
   if not DirectoryExists(yedeklemeyeri) then ForceDirectories(yedeklemeyeri);
   s:=  yedeklemeyeri + '\' + yedekdosyaadi;
   s:=StringReplace(s,'\','/',[rfReplaceAll]);  //içindeki \ karekterleri / karakteri ile değiştir

   lbTableName.Caption := '';
   lbTableName.Parent.Repaint;
   Panel1.Visible:=true;
   MyDump1.BackupToFile(s);
   showmessage('Yedekleme İşlemi Tamamlandı...');
   Panel1.Visible:=false;
end;

procedure TForm1.Button2Click(Sender: TObject);
var s,yedeklemeyeri,yedekdosyaadi,database:string;
begin

   if trim(Edit8.Text)='' then begin
      showmessage('Yedek Dosyayı Seçiniz....');
      Edit8.SetFocus;
      exit;
   end;

   //mysql e bağlan
   MyConnection1.Close;
   MyConnection1.Username:='root';
   MyConnection1.Password:='root';
   MyConnection1.Database:='mysql';
   MyConnection1.Server  :='localhost';
   MyConnection1.Open;

   database:=trim(Edit2.Text);
   //veritabanı yoksa oluştur
   //MyScript1.SQL.Text:='drop database if exists vt;create database vt;use vt;';
   MyScript1.SQL.Text:='drop database if exists '+database+';create database '+database+';use '+database+';';
   MyScript1.Execute;

   yedeklemeyeri:= trim(Edit7.Text) ;
   yedekdosyaadi:= trim(Edit8.Text);

   s:=  yedekdosyaadi;
   s:=StringReplace(s,'\','/',[rfReplaceAll]);    //içindeki \ karekterleri / karakteri ile değiştir
   Panel1.Visible:=true;
   
   MyDump1.Objects:=[doUsers,doStoredProcs,doTables,doData,doViews];
   MyDump1.RestoreFromFile(s);
   showmessage('Yedekten Geri Yükleme İşlemi Tamamlandı...');
   Panel1.Visible:=false;
end;

procedure TForm1.MyDump1BackupProgress(Sender: TObject; ObjectName: String;
  ObjectNum, ObjectCount, Percent: Integer);
begin
  if lbTableName.Caption <> ObjectName then begin
    lbTableName.Caption := ObjectName;
    lbTableName.Repaint;
  end;
  ProgressBar1.Position := Percent;
end;

procedure TForm1.MyDump1RestoreProgress(Sender: TObject; Percent: Integer);
begin
  ProgressBar1.Position := Percent;
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
   OpenDialog1.Filter:=  'Yedek Dosyası (*.bck)|*.bck';
   OpenDialog1.InitialDir:='C:\Yedek';
   if OpenDialog1.Execute then  begin
      Edit8.Text:= OpenDialog1.FileName;
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   PageControl1.ActivePageIndex:=0;
   Edit1.Text:=FormatDateTime('yyyy-mm-dd',Date)+'.bck';
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   form2.showmodal;
end;

end.

Örnek program ektedir.
« Son Düzenleme: 15 Ekim 2011 19:28:33 by dynamo »