lostyazilim
tr.link

PHP Backup Birden Fazla DB

15 Mesajlar 1.946 Okunma
lstbozum
tr.link

mrhydgn mrhydgn Webmaster Kullanıcı
  • Üyelik 19.08.2015
  • Yaş/Cinsiyet 31 / E
  • Meslek Webmaster
  • Konum Sakarya
  • Ad Soyad E** A**
  • Mesajlar 54
  • Beğeniler 24 / 6
  • Ticaret 0, (%0)
Merhabalar. Aşağıdaki kod bloğu ile db backuplarını bilgisayarıma yedek alabiliyorum. Birden fazla dbyi tek seferde indirebilmek için nasıl bir yol izlemem gerek ? Örneklere baktım fakat multiple olarak çalışmadı.


header('Content-Type: text/html; charset=utf-8');
include 'Yedekle.class.php';
date_default_timezone_set('Europe/Istanbul');
$bugun=date("d-m-H-i");

$bilgiler = array(
'src' => 'mysql',
'host' => 'localhost',
'kadi' => 'user',
'parola' => 'pass',
'veritabani' => 'db'
);

$olustur = new Yedekle($bilgiler);
$yedekle = $olustur->yedek();

if(!$yedekle['hata']){

header('Content-type: text/plain');
header('Content-disposition: attachment; filename=db'.$bugun.'.sql');
echo $yedekle['mesaj'];

} else {
echo 'İşlem başarısız oldu!';
}
 

 

wmaraci
reklam

Arestr Arestr WM Aracı Kullanıcı
  • Üyelik 10.08.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Devoloper
  • Konum Kayseri
  • Ad Soyad N** C**
  • Mesajlar 408
  • Beğeniler 403 / 143
  • Ticaret 0, (%0)
array içerisine diğer database bilgilerini yazıp, yedek alan function içerisinde foreach ile array'i döndürüp yedekletebilirsiniz. İşlem yapan kodları görmediğim için net bir şey söyleyemem ama mantıken bu şekilde yapılabilmesi lazım
 

 

FULL STACK WEB DEVELOPER

mrhydgn mrhydgn Webmaster Kullanıcı
  • Üyelik 19.08.2015
  • Yaş/Cinsiyet 31 / E
  • Meslek Webmaster
  • Konum Sakarya
  • Ad Soyad E** A**
  • Mesajlar 54
  • Beğeniler 24 / 6
  • Ticaret 0, (%0)
Arestr Yukarıdaki kodlar haricinde sadece class.php var onun dışında ek birşey bulunmamakta, tüm işlem yukarıdaki kod bloğuyla dönüyor. Döngü ile denedim, tek blok çalıştırıyor sona eriyor.
 

 

Arestr Arestr WM Aracı Kullanıcı
  • Üyelik 10.08.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Devoloper
  • Konum Kayseri
  • Ad Soyad N** C**
  • Mesajlar 408
  • Beğeniler 403 / 143
  • Ticaret 0, (%0)
class.php içerisindeki kodları atar mısınız ?
 

 

FULL STACK WEB DEVELOPER
wmaraci
wmaraci

mrhydgn mrhydgn Webmaster Kullanıcı
  • Üyelik 19.08.2015
  • Yaş/Cinsiyet 31 / E
  • Meslek Webmaster
  • Konum Sakarya
  • Ad Soyad E** A**
  • Mesajlar 54
  • Beğeniler 24 / 6
  • Ticaret 0, (%0)
Arestr




class Yedekle {
/**
* Bağlantı kurulacak alanın aktarıldığı değişken
* @var
*/
private $host;
/**
* Bağlantı aşamasında kullanacağımız değişken
* @var
*/
private $src;
/**
* Bağlantı aşamasında kullanılan kullanıcı adı
* @var
*/
private $kadi;
/**
* Bağlantı aşamasında kullanacağımız parola
* @var
*/
private $parola;
/**
* Bağlanacağımız veritabanının adı
* @var
*/
private $vt_adi;
/**
* PDO kullanarak veritabanına bağlanacağımız değişken
* @var
*/
private $bilgiler;
/**
* Veritabanındaki tabloların dizi olarak tutulacağı değişken
* @var
*/
private $tablolar = array();
/**
* Veritabanına bağlıyken kullanacağımız nesne
* @var
*/
private $islem;
/**
* Alınan hataların dizi olarak aktarıldığı değişken
* @var
*/
private $hata = array();
/**
* Başarılı olduğumuzda kullanacağımız sonuç dizesi
* @var
*/
private $son;




/**
* Veritabanı bağlantısı @uses private
*/
private function baglan(){
try {
$this->islem = new PDO($this->bilgiler.';charset=utf8;', $this->kadi, $this->parola);
$this->islem->query('SET CHARACTER SET UTF8');
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
* Tabloları al @uses private
*/
private function tablo_al(){
try {
$goster = $this->islem->query('SHOW TABLES');
$bol = $goster->fetchAll();
$indis = 0;
foreach($bol as $tablo){
$this->tablolar[$indis]['ad'] = $tablo[0];
$this->tablolar[$indis]['olustur'] = $this->sutun_al($tablo[0]);
$this->tablolar[$indis]['veri'] = $this->veri_al($tablo[0]);
$indis++;
}
unset($goster);
unset($bol);
unset($indis);

return true;
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Sütunları al @uses private
*/
private function sutun_al($tablo_adi){
try {
$goster = $this->islem->query('SHOW CREATE TABLE '.$tablo_adi);
$bol = $goster->fetchAll();
$bol[0][1] = preg_replace("/AUTO_INCREMENT=[\w]*./", '', $bol[0][1]);
return $bol[0][1];
} catch (PDOException $e){
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Tablolardan kayıtlı verileri al @uses private
*/
private function veri_al($tablo_adi){
try {
$goster = $this->islem->query('SELECT * FROM '.$tablo_adi);
$bol = $goster->fetchAll(PDO::FETCH_NUM);
$veri = '';
foreach ($bol as $parcalar){
foreach($parcalar as &$deger){
$deger = addslashes($deger);
}
$veri .= 'INSERT INTO '. $tablo_adi .' VALUES (\'' . implode('\',\'', $parcalar) . '\');'."\n";
}
return $veri;
} catch (PDOException $h){
$this->islem = null;
$this->hata[] = $h->getMessage();
return false;
}
}

public function Yedekle($parametre){
if( !$parametre['host'] ){
$this->hata[] = 'Host adresi geçersiz.';
}
if( !$parametre['kadi'] ){
$this->hata[] = 'Kullanıcı adı geçersiz.';
}
if( !isset($parametre['parola']) ){
$this->hata[] = 'Parola geçersiz.';
}
if( !$parametre['veritabani'] ){
$this->hata[] = 'Veritabanı adı geçersiz.';
}
if( !$parametre['src'] ){
$this->hata[] = 'Veritabanı türü geçersiz.';
}

if( count($this->hata) > 0 ){
return;
}

$this->host = $parametre['host'];
$this->tip = $parametre['src'];
$this->kadi = $parametre['kadi'];
$this->parola = $parametre['parola'];
$this->vt_adi = $parametre['veritabani'];

if($this->host=='localhost'){
$this->host = '127.0.0.1';
}
$this->bilgiler = $this->tip.':host='.$this->host.';dbname='.$this->vt_adi;

$this->baglan();
$this->tablo_al();
$this->olustur();
}

/**
* Yedek almak için çağırılan fonksiyon
* @example Yedekle::yedek();
*/
public function yedek(){
if(count($this->hata)>0){
return array('hata'=>true, 'mesaj'=>$this->hata);
}
return array('hata'=>false, 'mesaj'=>$this->son);
}

/**
* Yedek dizeleri oluşturur @uses private
*/
private function olustur(){
foreach ($this->tablolar as $t) {
$this->son .= $t['olustur'] . ";\n\n";
$this->son .= $t['veri']."\n\n\n";
}
}
}
?>
 

 

Arestr Arestr WM Aracı Kullanıcı
  • Üyelik 10.08.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Devoloper
  • Konum Kayseri
  • Ad Soyad N** C**
  • Mesajlar 408
  • Beğeniler 403 / 143
  • Ticaret 0, (%0)
Masaüstüne geçeyim bakıcam hocam
 

 

FULL STACK WEB DEVELOPER

mrhydgn mrhydgn Webmaster Kullanıcı
  • Üyelik 19.08.2015
  • Yaş/Cinsiyet 31 / E
  • Meslek Webmaster
  • Konum Sakarya
  • Ad Soyad E** A**
  • Mesajlar 54
  • Beğeniler 24 / 6
  • Ticaret 0, (%0)
Arestr Teşekkür ederim hocam, kafam almadı bi türlü döndüremedim.
 

 

Arestr Arestr WM Aracı Kullanıcı
  • Üyelik 10.08.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Devoloper
  • Konum Kayseri
  • Ad Soyad N** C**
  • Mesajlar 408
  • Beğeniler 403 / 143
  • Ticaret 0, (%0)
Dosya üzerinde biraz değişiklik yaptım bağlantı bilgilerini Yedekle.class.php içerisinde tanımlayın

Yedek alınma işlemi yapılan index.php de array içerisine sadece yedek alınacak db'lerin isimlerini yazın. Yalnız her veritabanı için ayrı dosya indirmez tüm veritabanlarının bilgilerini tek sql dosyası içinde toplar. Daha sonra kullanmanız gerekirse yedek isimli vt oluşturup istediğiniz tarihin dosyasını alıp yükledikten sonra içinden istediğiniz veritabanının dosyalarını alırsınız, veya editör ile sql dosyasını açıp sadece ilgili tablonun içeriğini yeni sql dosyasına kayıt edip yüklersiniz

index.php


header('Content-Type: text/html; charset=utf-8');
include 'Yedekle.class.php';
date_default_timezone_set('Europe/Istanbul');
$bugun=date("d-m-H-i");

$bilgiler = array(
'gsh_db',
'test',
'gsh_db2'
);
$olustur = new Yedekle($bilgiler);
$yedekle = $olustur->yedek();

if(!$yedekle['hata']){

header('Content-type: text/plain');
header('Content-disposition: attachment; filename=db'.$bugun.'.sql');
echo $yedekle['mesaj'];

} else {
echo 'İşlem başarısız oldu!';
}




Yedekle.class.php



class Yedekle {
/**
* Bağlantı kurulacak alanın aktarıldığı değişken
* @var
*/
private $host;
/**
* Bağlantı aşamasında kullanacağımız değişken
* @var
*/
private $src;
/**
* Bağlantı aşamasında kullanılan kullanıcı adı
* @var
*/
private $kadi;
/**
* Bağlantı aşamasında kullanacağımız parola
* @var
*/
private $parola;
/**
* Bağlanacağımız veritabanının adı
* @var
*/
private $vt_adi;
/**
* PDO kullanarak veritabanına bağlanacağımız değişken
* @var
*/
private $bilgiler;
/**
* Veritabanındaki tabloların dizi olarak tutulacağı değişken
* @var
*/
private $tablolar = array();
/**
* Veritabanına bağlıyken kullanacağımız nesne
* @var
*/
private $islem;
/**
* Alınan hataların dizi olarak aktarıldığı değişken
* @var
*/
private $hata = array();
/**
* Başarılı olduğumuzda kullanacağımız sonuç dizesi
* @var
*/
private $son;




/**
* Veritabanı bağlantısı @uses private
*/
private function baglan(){
try {
$this->islem = new PDO($this->bilgiler.';charset=utf8;', $this->kadi, $this->parola);
$this->islem->query('SET CHARACTER SET UTF8');
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
* Tabloları al @uses private
*/
private function tablo_al(){
try {
$goster = $this->islem->query('SHOW TABLES');
$bol = $goster->fetchAll();
$indis = 0;
foreach($bol as $tablo){
$this->tablolar[$indis]['ad'] = $tablo[0];
$this->tablolar[$indis]['olustur'] = $this->sutun_al($tablo[0]);
$this->tablolar[$indis]['veri'] = $this->veri_al($tablo[0]);
$indis++;
}
unset($goster);
unset($bol);
unset($indis);

return true;
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Sütunları al @uses private
*/
private function sutun_al($tablo_adi){
try {
$goster = $this->islem->query('SHOW CREATE TABLE '.$tablo_adi);
$bol = $goster->fetchAll();
$bol[0][1] = preg_replace("/AUTO_INCREMENT=[\w]*./", '', $bol[0][1]);
return $bol[0][1];
} catch (PDOException $e){
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Tablolardan kayıtlı verileri al @uses private
*/
private function veri_al($tablo_adi){
try {
$goster = $this->islem->query('SELECT * FROM '.$tablo_adi);
$bol = $goster->fetchAll(PDO::FETCH_NUM);
$veri = '';
foreach ($bol as $parcalar){
foreach($parcalar as &$deger){
$deger = addslashes($deger);
}
$veri .= 'INSERT INTO '. $tablo_adi .' VALUES (\'' . implode('\',\'', $parcalar) . '\');'."\n";
}
return $veri;
} catch (PDOException $h){
$this->islem = null;
$this->hata[] = $h->getMessage();
return false;
}
}

public function Yedekle($parametre){


if( count($this->hata) > 0 ){
return;
}

// Bağlantı bilgileri burada tanımlanacak
$this->host = "localhost";
$this->tip = "mysql";
$this->kadi = "root";
$this->parola = "";


if($this->host=='localhost'){
$this->host = '127.0.0.1';
}

foreach($parametre as $vt){
$this->vt_adi = $vt;
$this->bilgiler = $this->tip.':host='.$this->host.';dbname='.$this->vt_adi;
$this->baglan();
$this->tablo_al();
$this->olustur();
}

}

/**
* Yedek almak için çağırılan fonksiyon
* @example Yedekle::yedek();
*/
public function yedek(){
if(count($this->hata)>0){
return array('hata'=>true, 'mesaj'=>$this->hata);
}
return array('hata'=>false, 'mesaj'=>$this->son);
}

/**
* Yedek dizeleri oluşturur @uses private
*/
private function olustur(){
foreach ($this->tablolar as $t) {
$this->son .= $t['olustur'] . ";\n\n";
$this->son .= $t['veri']."\n\n\n";
}
}
}
?>
 

 

FULL STACK WEB DEVELOPER

ismail03 ismail03 WM Aracı Kullanıcı
  • Üyelik 28.11.2013
  • Yaş/Cinsiyet 30 / E
  • Meslek Ameliyathane Hemşiresi
  • Konum Afyon
  • Ad Soyad I** Ç**
  • Mesajlar 2633
  • Beğeniler 344 / 487
  • Ticaret 12, (%100)

Arestr adlı üyeden alıntı

Dosya üzerinde biraz değişiklik yaptım bağlantı bilgilerini Yedekle.class.php içerisinde tanımlayın

Yedek alınma işlemi yapılan index.php de array içerisine sadece yedek alınacak db'lerin isimlerini yazın. Yalnız her veritabanı için ayrı dosya indirmez tüm veritabanlarının bilgilerini tek sql dosyası içinde toplar. Daha sonra kullanmanız gerekirse yedek isimli vt oluşturup istediğiniz tarihin dosyasını alıp yükledikten sonra içinden istediğiniz veritabanının dosyalarını alırsınız, veya editör ile sql dosyasını açıp sadece ilgili tablonun içeriğini yeni sql dosyasına kayıt edip yüklersiniz

index.php


header('Content-Type: text/html; charset=utf-8');
include 'Yedekle.class.php';
date_default_timezone_set('Europe/Istanbul');
$bugun=date("d-m-H-i");

$bilgiler = array(
'gsh_db',
'test',
'gsh_db2'
);
$olustur = new Yedekle($bilgiler);
$yedekle = $olustur->yedek();

if(!$yedekle['hata']){

header('Content-type: text/plain');
header('Content-disposition: attachment; filename=db'.$bugun.'.sql');
echo $yedekle['mesaj'];

} else {
echo 'İşlem başarısız oldu!';
}




Yedekle.class.php



class Yedekle {
/**
* Bağlantı kurulacak alanın aktarıldığı değişken
* @var
*/
private $host;
/**
* Bağlantı aşamasında kullanacağımız değişken
* @var
*/
private $src;
/**
* Bağlantı aşamasında kullanılan kullanıcı adı
* @var
*/
private $kadi;
/**
* Bağlantı aşamasında kullanacağımız parola
* @var
*/
private $parola;
/**
* Bağlanacağımız veritabanının adı
* @var
*/
private $vt_adi;
/**
* PDO kullanarak veritabanına bağlanacağımız değişken
* @var
*/
private $bilgiler;
/**
* Veritabanındaki tabloların dizi olarak tutulacağı değişken
* @var
*/
private $tablolar = array();
/**
* Veritabanına bağlıyken kullanacağımız nesne
* @var
*/
private $islem;
/**
* Alınan hataların dizi olarak aktarıldığı değişken
* @var
*/
private $hata = array();
/**
* Başarılı olduğumuzda kullanacağımız sonuç dizesi
* @var
*/
private $son;




/**
* Veritabanı bağlantısı @uses private
*/
private function baglan(){
try {
$this->islem = new PDO($this->bilgiler.';charset=utf8;', $this->kadi, $this->parola);
$this->islem->query('SET CHARACTER SET UTF8');
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
* Tabloları al @uses private
*/
private function tablo_al(){
try {
$goster = $this->islem->query('SHOW TABLES');
$bol = $goster->fetchAll();
$indis = 0;
foreach($bol as $tablo){
$this->tablolar[$indis]['ad'] = $tablo[0];
$this->tablolar[$indis]['olustur'] = $this->sutun_al($tablo[0]);
$this->tablolar[$indis]['veri'] = $this->veri_al($tablo[0]);
$indis++;
}
unset($goster);
unset($bol);
unset($indis);

return true;
} catch (PDOException $e) {
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Sütunları al @uses private
*/
private function sutun_al($tablo_adi){
try {
$goster = $this->islem->query('SHOW CREATE TABLE '.$tablo_adi);
$bol = $goster->fetchAll();
$bol[0][1] = preg_replace("/AUTO_INCREMENT=[\w]*./", '', $bol[0][1]);
return $bol[0][1];
} catch (PDOException $e){
$this->islem = null;
$this->hata[] = $e->getMessage();
return false;
}
}

/**
*
* Tablolardan kayıtlı verileri al @uses private
*/
private function veri_al($tablo_adi){
try {
$goster = $this->islem->query('SELECT * FROM '.$tablo_adi);
$bol = $goster->fetchAll(PDO::FETCH_NUM);
$veri = '';
foreach ($bol as $parcalar){
foreach($parcalar as &$deger){
$deger = addslashes($deger);
}
$veri .= 'INSERT INTO '. $tablo_adi .' VALUES (\'' . implode('\',\'', $parcalar) . '\');'."\n";
}
return $veri;
} catch (PDOException $h){
$this->islem = null;
$this->hata[] = $h->getMessage();
return false;
}
}

public function Yedekle($parametre){


if( count($this->hata) > 0 ){
return;
}

// Bağlantı bilgileri burada tanımlanacak
$this->host = "localhost";
$this->tip = "mysql";
$this->kadi = "root";
$this->parola = "";


if($this->host=='localhost'){
$this->host = '127.0.0.1';
}

foreach($parametre as $vt){
$this->vt_adi = $vt;
$this->bilgiler = $this->tip.':host='.$this->host.';dbname='.$this->vt_adi;
$this->baglan();
$this->tablo_al();
$this->olustur();
}

}

/**
* Yedek almak için çağırılan fonksiyon
* @example Yedekle::yedek();
*/
public function yedek(){
if(count($this->hata)>0){
return array('hata'=>true, 'mesaj'=>$this->hata);
}
return array('hata'=>false, 'mesaj'=>$this->son);
}

/**
* Yedek dizeleri oluşturur @uses private
*/
private function olustur(){
foreach ($this->tablolar as $t) {
$this->son .= $t['olustur'] . ";\n\n";
$this->son .= $t['veri']."\n\n\n";
}
}
}
?>


hocam jquery ajaxla bunu nasıl yapabiliriz? yedek alınacak tabloları istek atıoyrum ancak indirme işlemi hatalı oluyor
 

 

Arestr Arestr WM Aracı Kullanıcı
  • Üyelik 10.08.2014
  • Yaş/Cinsiyet 28 / E
  • Meslek Web Devoloper
  • Konum Kayseri
  • Ad Soyad N** C**
  • Mesajlar 408
  • Beğeniler 403 / 143
  • Ticaret 0, (%0)
ismail03 bağlantı bilgileri doğrumu kontrol ettiniz mi ?
 

 

FULL STACK WEB DEVELOPER
wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al