UYARI: İnternet bir özgürlük ortamı, evet fakat her site gibi bu site de yayınına devam edebilmesi için reklam almak zorunda, ama büyük ihtimalle siz de reklam görmekten sıkıldığınız için AdBlock veya benzeri bir programı kurdunuz. Bu durum anlaşılır bir durum birçok kişi bunu yapıyor, fakat bu yapıldığı zaman da siteler masraflarını karşılayamadıkları için kapanmak zorunda kalıyor. Sitemiz AdBlock kullanan birini "Sen siteye girme" kardeşim diye engellemiyor çünkü özgürlük bunu gerektiriyor, siteyi seven zaten AdBlock'u kapatıp desteğini gösterir buna gerek yok, bu yüzden sitede özgürce dolaşacak sadece her dolaştığınız sayfalarda bu uyarı bulunacaktır....
Logo
mobilmenu
RenkliKodlar
PDO ile Mysql veritabanı içe ve dışa aktarmak

php ve PDO kullanarak Mysql veritabanι yedek almak içe ve dışa aktarmak



Merhaba yeni bir class (sınıf) ile karşınızdayım yine, phpMyadmin'e bağlanmadan sitenizde yönetim panelinize ekleyerek istediğiniz zaman veritabanı yedek alıp geri yükleme yapabileceğiniz bir sınıftan bahsediyorum.

Öyle ki kendi kodlarınızı da katarak tek tıklama ile veritabanını .zip olarak veya .sql olarak yedek alabilecek, önceki bir .sql dosyasını karşıya yükleyerek MySQL'a geri aktarabileceksiniz.

Oldukça kolay kullanımlı bu sınıfın yaptığı 2 ana işlem var MySQL'den yedek alma ve geri yükleme geri kalan zahmetli tablo isimleri kayıtları v.s tüm işlemi sınıf kendi içinde yapacaktır.

Dışa aktarma (yedek alma) işlemi


Bağlantısı kurulan veritabanının tamamını yedek almak içindir seçiminize sunulmuş bazı ek özellikleri vardır
Özellikleri
Alınan çıktının kaydedileceği klasör belirlenebilir.
Alınan çıktının zip arşivi olarak alınabilme özelliği.
İsteğe bağlı DROP TABLE IF EXISTS satırı ekleme.

Dışa aktarma yapan kodların bir örneği kodlarda açıklamalar var
<?php
ob_start();

$dbhost = "localhost"; //Veritabanın bulunduğu host
$dbuser = "root"; //Veritabanı Kullanıcı Adı
$dbpass = ""; //Veritabanı Şifresi
$dbdata = "mysql_vt"; //Veritabanı Adı

include 'DBBackupRestore.class.php'; //DBBackup.class.php dosyamızı dahil ediyoruz
$dbBackup = new DBYedek(); // class'imizla $dbBackup nesnemizi olusturduk

	//$kayityeri klasor yolu belirtirken sonunda mutlaka / olmali (klasoradi/) seklinde
	$kayityeri	= "temp/";	// ayni dizin için $kayityeri degiskeni bos birakilmali
	$arsiv		= false;	//Yedeği zip arsivi olarak almak için true // .sql olarak almak için false
	$tablosil	= true;		//DROP TABLE if EXISTS satırı eklemek için true // istenmiyorsa false

	//Veri için kullanılacak sözdizimi:
	$veritipi	= 1; // INSERT INTO tbl_adı VALUES (1,2,3);
	//$veritipi	= 2; // INTO tbl_adı VALUES (1,2,3), (4,5,6), (7,8,9);
	//$veritipi	= 3; // INSERT INTO tbl_adı (sütun_A,sütun_B,sütun_C) VALUES (1,2,3);
	//$veritipi	= 4; // INSERT INTO tbl_adı (col_A,col_B,col_C) VALUES (1,2,3), (4,5,6), (7,8,9);

	$backup = $dbBackup->Disa_Aktar($kayityeri, $arsiv, $tablosil, $veritipi);

if ($backup){
	echo '<a href="' . $backup . '" download="' . $backup . '">' . $backup . '</a> <<<<< İndir..';
} else {
	echo 'Beklenmedik hata oluştu!';
}

$dbBackup->kapat();// $dbBackup nesnemizi kapattik

ob_end_flush();
?>Kopyala

İçe aktarma (daha önce yedek aldığınız .sql dosyasını) geri yükleme işlemi


Bağlantısı kurulan veritabanına daha önce aldığınız bir yedeği içe aktarır (geri yükleme yapar)
Bu işlemi yaparken verileri belirlediğimiz maksimum komut dosyası yürütme sınırı ile bölerek yapar, büyük boyutlu veritabanlarında parça parça yükleme yapması için fakat burada her parçacığı çok büyük boyutlara bölmeden yapmamız gerekli ki işlem hostu da yormadan tamamlansın $maxKomut = 8; bulduğum iyi bir değer bu konuda ancak çok büyük boyutlu dosyalarda da denemedim.

İçe aktarma yapan kodların bir örneği yine kodlarda açıklamalar var
<?php
ob_start();

$dbhost = "localhost"; //Veritabanın bulunduğu host
$dbuser = "root"; //Veritabanı Kullanıcı Adı
$dbpass = ""; //Veritabanı Şifresi
$dbdata = "mysql_vt"; //Veritabanı Adı

include 'DBBackupRestore.class.php'; //DBBackup.class.php dosyamızı dahil ediyoruz
$dbBackup = new DBYedek(); // class'imizla $dbBackup nesnemizi olusturduk

  	$dosya = 'temp/backup-mysql_vt-22-08-2019_20-42-23.sql'; // içe aktarımı yapılacak veritabanı.
	// maxKomut değişkeni yüksek tutmak aynı anda daha fazla verinin işlenmesine olanak tanır ancak hostu yorar
	// echo ini_get('max_execution_time'); ile php.ini dosyasındaki değeri kontrol edebilirsiniz öntanımlı süre genelde 30 saniyedir
  	$maxKomut = 8; // php.ini dosyasındaki maksimum komut dosyası yürütme sınırınızdan daha az olmalı.
	
	$dbBackup->Ice_Aktar($dosya, $maxKomut); 

$dbBackup->kapat();// $dbBackup nesnemizi kapattik 

ob_end_flush();
?>Kopyala


İçe aktarma kodlarına upload yolu ile karşıya dosya yükleterek sonra o dosya yolunu $dosya değişkenine işleyebilirsiniz böylece PhpMyadmin'e bağlanmadan veri yedekleme ve geri yükleme işlemleri yapabileceksiniz.

Sınıf dosyaları için Tıklayın!

Kolaygelsin..


PDO ile Mysql veritabanı içe ve dışa aktarmak Yorumları:


Bu yazıya toplam 4 yorum yapılmış.
Toplam 1 sayfa yorum var, Gösterimde olan yorum sayfası 1
23 Ağustos 2019, 01:24
Nejdet ACAR yazdı:
Mevcut kullandığım bir veritabanı yedekleme fonksiyonum vardı. Vagharshak Tozalakyan tarafından yazılan bir fonksiyon. Çok uzun ve karışıktı. Yaklaşık 265 satır.
Sitelerimi PHP 7.3.7 versiyon kullanan sunucuya taşıttığımdan beri eskiden kullandığım veritabanı yedek dosyam çalışmıyordu.
Bunu yaptığın iyi olmuş. Yarın hemen deneyip tekrar yorum yazacağım.
Eline sağlık, teşekkürler...
27 Ağustos 2019, 12:38
Mehmet Ibrahim cevapladı:
Bahsettiğin Fonksiyon mysql_connect kullanıyordur bildiğim kadarı php5.5 ile kullanımdan kaldırıldı bu yüzden çalışmıyordur.
Ayrıca sınıf dosyalarında düz verilerde sorun olmamıştı ancak sonradan html içeren verilerde sorun oluştuğu için bazı düzeltmeler yaptım tekrar indirirsin.
24 Aralık 2019, 03:57
Alper Dereli yazdı:
Çok işime yaradı.. Çok teşekkürler
18 Kasım 2020, 03:26
Nevzat Özmen yazdı:
Program Çalışıyor fakat tablolarda kullandığımız değişkenlerde eğer "Null" yani veri bulunmuyor ise yedekleme yapmıyor. Bunun çözümünü bulamadım..
19 Kasım 2020, 02:07
Mehmet Ibrahim cevapladı:
Merhaba evet Null veri bulunmayan alanlarda Null yerine boş değer alır Null alan içeren veri yapınız varsa kodlara biraz daha zorlayarak bunun üstesinden gelebilirsiniz bunun için
function Degistir aşağıdaki gibi olacak
private function Degistir($veri){
	$yeniveri = array();
	foreach($veri as $deger) {
		if(!isset($deger)) {
			array_push($yeniveri, "NULL");
		} else {
			array_push($yeniveri, $deger);
		}
	}

	$veri = str_replace("'", "\'", $yeniveri);
	$veri = str_replace("\n", "\\n", $veri);
	$veri = str_replace('"', '\"', $veri);
	
	return $veri;
}Kopyala


ve function dokumVeri sonunda return $veri; satırını bulun hemen üstüne de aşağıdaki replace komutunu ekleyin
$veri = str_replace("'NULL'", "NULL", $veri);
return $veri;Kopyala
03 Haziran 2021, 10:44
Mustafa yazdı:
Öncelikle emeğiniz için çok teşekkür ederim. Mevcut kodları cron işlemi ile kullanıyorum ve günde iki kere yedek aldırıyorum ancak eski veriyi silip üstüne yeni veriyi yazması için ne yapmalıyım. Şuanki durumda her gün 2 dosya yazıyor 2*365= 730 dosya yapar 1 yılda
  • 1



Bağlan

Yorumunuza cevap yazilmasi durumunda bildiri almak istiyor musunuz?