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.