PHP ile MySQL ve Klasör Yedeği Almak

Merhaba arkadaşlar, 2 bölümlük bir video serisi hazırladım. Sırasıyla önce mysql’in sonrada klasör’ün yedeğini PHP kullanarak nasıl alıyoruz bunu gösterdim. Bu yazıda da ufaktan mantığını açıklamaya çalışacağım.

MySQL Yedeğini Almak

Şimdi ilk olarak Mysql’in yedeğini almak için türlü türlü yol var, ancak çoğu konfigürasyon gerektiriyor. Yani özel ayar yapmak gerekiyor, fakat paylaşımlı hostinglerde bunlara müdahale edilmediği için bu backup işlemini mümkün olduğunca php tarafında çözmeye karar verdim.

Bundan dolayı, php tarafında sırasıyla şu değerleri almam gerekiyordu;

  • Tabloların Listesi
  • Tablonun Oluşturulma Değerleri
  • Tablonun Kolon Değerleri
  • Tablonun Satırları (Verileri)
  • Trigger’lar
  • Function’lar
  • Precodure’ler

Tabl0ların Listesini Almak

Veritabanımızda mevcut tabloları listelemek için şu komutu kullanıyoruz;

SHOW TABLES;

Bu komut bize tüm tablolarımızın isimlerini veriyor.

Tablonun Oluşturulma Değerleri

Mevcut tablonun oluşturulma değerlerini almak için şu komutu kullanıyoruz;

SHOW CREATE TABLE tablo_adi

Bu komutu çalıştırdıktan sonra bize CREATE TABLE tablo_adi …. şeklinde oluşturma kodlarını verecek. Böylece bizim yazmamıza ve düşünmemize gerek yok.

Tablonun Kolon Değerlerini Almak

Tablodaki oluşturduğumuz kolonların değerlerini almak için şu komutu kullanıyoruz.

SHOW COLUMNS FROM tablo_adi

Bu komutu çalıştırınca bize tabloya ait kolonların değerleri dönüyor.

Tablonun Satırlarını (Verilerini) Almak

Bu klasik select işlemi ama yinede gösterelim;

SELECT * FROM tablo_adi

Trigger’ları Almak

Zaman zaman crud işlemleri harici bu tarz yapılara ihtiyaç duyuyoruz. Ve eğer çalıştığımız veritabanı üzerinde oluşturduğumuz trigger, function, procedure gibi yapılar var ise bunlarıda alacağımız yedek dosyasına dahil etmemiz gerek. Ama korkmayın, mysql bizi düşünmüş ve kolay yollarını vermiş. Şimdi mevcut triggerları listelemek için şu komutu kullanıyoruz;

SHOW TRIGGERS

Ve bir trigger’ın oluşturma değerini almak için ise şu komutu kullanıyoruz;

SHOW CREATE TRIGGER trigger_adi

Zaten bu iki sorgu ile gerekli değerleri alıyoruz. Ancak videoda vurguladığım bir olay vardı. DELIMITER muhabbeti, onu videoya gözatarak anlayabilirsiniz.

Function’ları Almak

Aynı şekilde mysql function’ları almak içinde kolaylık sağlıyor. Function’ları listelemek için şu komutu kullanıyoruz;

SHOW FUNCTION STATUS WHERE Db = 'db_adi'

Burada diğerinden farklı olarak db adını belirttik. Çünkü diğer türlü diğer veritabanlarında olan functionlarda listelenebiliyor. Ve function oluşturma değerini almak için ise şu komutu kullanıyoruz;

SHOW CREATE FUNCTION function_adi

Procedure’leri Almak

Bu konuyu henüz sizlere anlatmasamda, eminim mysql tarafında procedure oluşturup kullananlarınız vardır. Bunlarında listesini almak için şu komutu kullanıyoruz;

SHOW PROCEDURE STATUS WHERE Db = 'db_adi'

Mevcut procedure’ün oluşturma değerini almak için ise şu komutu kullanıyoruz;

SHOW CREATE PROCEDURE procedure_adi

Evet bu komutları kullanarak bir mysql backup’ı almak çok kolay. Videoyu izleyip detaylarına ulaşabilirsiniz.

Klasör Yedeğini Almak

PHP tarafında belirttiğimiz dizinin alt dizinleri ve dosyalarıyla birlikte yedeğini alıp ZipArchive sınıfını kullanarak sıkıştırıp bir zip dosyasına getirme işleminde ilk olarak bir dizin listeleme fonksiyonu oluşturmalıyız. Buda recursive fonksiyon olmalı ki alt dizinleri ve onların dosyalarınıda alabilelim. Örnek bir recursive dizin listeleme fonksiyonu şöyle olabilir;

private function getDirectory($dir)
{
    static $files = [];
    foreach (glob($dir . '/*') as $file) {
        $notInclude = !in_array(str_replace($this->config['folder']['dir'] . '/', null, $file), $this->config['folder']['exclude']);
        if (
            is_dir($file) &&
            $notInclude
        ) {
            call_user_func([$this, 'getDirectory'], $file);
        } else {
            if ($notInclude)
                $files[] = $file;
        }
    }
    return $files;
}

Tabi biz bunu derste bir sınıf halinde yazdığımız için metod olarak tanımladık. Ve ek olarak listelemek istemediğimiz dosya ya da dizin varsa bunu exclude değerinde belirttik. Dosyaları listeleyip zip’e ekleme kısmı ise şöyleydi;

$files = $this->getDirectory($this->config['folder']['dir']);
$zip = new ZipArchive();
$zip->open($this->config['folder']['file'], ZipArchive::CREATE);
foreach ($files as $file) {
    $zip->addFile($file);
}
$zip->close();

Şimdi hepsini toparlayıp anlamak için videolara bakmanızı şiddetle tavsiye ediyorum. Ayrıca videoda hazırladığım sınıfı github’da paylaştım ki alıp geliştirebilin 🙂

Github Sayfası

Adını Backuphp olarak belirledim. P’leri birleştirdim 😀 Daha yaratıcı isimlere açığım. Olası hataları github üzerinden belirtirseniz geliştirmeye açığım. Sizde fork edip kendiniz geliştirebilirsiniz.

Github Linki: https://github.com/tayfunerbilen/backuphp

Github’ı kullanmıyorsanız hemen bir hesap açıp kullanmaya başlayın. Geliştirici olarak burayı ve buradaki gelişmeleri takip etmeniz sizin gelişiminiz açısından çok önemli arkadaşlar.

Yazımı burada sonlandırıyorum, sevgiyle kalın.

Yazar: Tayfun Erbilen

2009'dan beri web işleriyle uğraşan, aynı zamanda amatör müziklede ilgilenen sıradan birisi..

“PHP ile MySQL ve Klasör Yedeği Almak” için bir yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.