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..
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...
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.
function Degistir aşağıdaki gibi olacak
ve function dokumVeri sonunda return $veri; satırını bulun hemen üstüne de aşağıdaki replace komutunu ekleyin