Veritabanı Yedekleme: PHP Script ile SQL Export Alma

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Manuel olarak phpMyAdmin üzerinden yedek almak güvenlidir ancak sürdürülebilir değildir. Profesyonel projelerde yedekleme işlemi belirli aralıklarla (Cron Job) otomatik olarak çalışmalıdır. Bu rehberde, veritabanınızdaki tüm tabloları, verileri ve yapıları bir .sql dosyasına aktaran bir script hazırlayacağız.

1. Yedekleme Mantığı Nasıl Çalışır?​


Bir SQL yediği oluşturmak için PHP şu adımları izler:

  1. [] Veritabanındaki tüm tablo isimlerini listeler.
    [] Her tablonun "CREATE TABLE" (Yapı) komutunu alır.
    [] Her tablodaki tüm satırları "INSERT INTO" (Veri) komutuna dönüştürür.
    [] Tüm bu verileri bir metin dosyasına yazar ve sunucuya kaydeder.

2. Profesyonel Yedekleme Scripti​


Aşağıdaki script, PDO kullanarak veritabanınızı tarar ve çıktı olarak bir SQL dosyası üretir.

PHP:
<?php
require_once 'Database.php';

function veritabaniYedekle() {
$db = Database::getInstance()->getConnection();
$yedekIcerik = "-- PHP Veritabani Yedekleyici\n-- Tarih: " . date("Y-m-d H:i:s") . "\n\n";

// 1. Tablolari al
$tablolar = $db-&gt;query(&quot;SHOW TABLES&quot;)-&gt;fetchAll(PDO::FETCH_COLUMN);

foreach ($tablolar as $tablo) {
    // 2. Tablo Yapisini Al
    $createTable = $db-&gt;query(&quot;SHOW CREATE TABLE $tablo&quot;)-&gt;fetch();
    $yedekIcerik .= &quot;\n\n&quot; . $createTable[1] . &quot;;\n\n&quot;;

    // 3. Verileri Al
    $veriler = $db-&gt;query(&quot;SELECT * FROM $tablo&quot;)-&gt;fetchAll(PDO::FETCH_ASSOC);
    foreach ($veriler as $satir) {
        $sutunlar = array_map(function($deger) use ($db) {
            return $db-&gt;quote($deger);
        }, array_values($satir));
        
        $yedekIcerik .= &quot;INSERT INTO $tablo VALUES (&quot; . implode(&quot;, &quot;, $sutunlar) . &quot;);\n&quot;;
    }
}

// 4. Dosyaya Yaz
$dosyaAdi = &#39;yedek_&#39; . date(&quot;Y-m-d_H-i-s&quot;) . &#39;.sql&#39;;
file_put_contents($dosyaAdi, $yedekIcerik);

return $dosyaAdi;

}

try {
$dosya = veritabaniYedekle();
echo "Yedekleme Tamamlandi: " . $dosya;
} catch (Exception $e) {
echo "Hata: " . $e->getMessage();
}
?>

3. Yedekleme Stratejileri Tablosu​


Hangi sıklıkla ve nasıl yedek almanız gerektiğini aşağıdaki tablodan inceleyebilirsiniz:

Yedekleme TipiSıklıkAvantajıDezavantajı
Tam Yedek (Full)Günlük / HaftalıkGeri yüklemesi en kolayıdır.Dosya boyutu büyük olur.
Artımlı (Incremental)SaatlikSadece değişen veriyi alır, hızlıdır.Geri yüklemesi karmaşıktır.
Uzak Sunucu YedeğiGünlükAna sunucu çökerse veriler güvendedir.Ekstra maliyet ve bant genişliği.

4. Güvenlik Uyarıları​



  • [] Dizin Erişimi: Yedeklerin alındığı klasöre doğrudan tarayıcı erişimini engellemek için .htaccess dosyası kullanın.
    [] Sıkıştırma: Veritabanınız büyükse, PHP'nin gzencode() fonksiyonunu kullanarak SQL dosyasını sıkıştırıp ( .sql.gz ) saklayın.
    [] Dosya Temizliği: Sunucuda yer kaplamaması için 30 günden eski yedekleri otomatik silen bir fonksiyon ekleyin.
    [] Cron Job: Bu scripti CPanel veya Plesk üzerinden bir "Zamanlanmış Görev" (Cron Job) olarak tanımlayarak her gece 03:00'te çalışmasını sağlayın.

Sonuç​


Veritabanı yedeği almak, sadece kod yazmak değil bir sorumluluk bilincidir. Bu rehberdeki script ile verilerinizi güvence altına alabilir, olası felaket senaryolarına karşı projenizi koruyabilirsiniz. Unutmayın, en iyi yedekleme stratejisi, çalıştığından emin olduğunuz ve düzenli test ettiğiniz stratejidir.
 
Geri
Üst