Veritabanı yedeklemek
Yedek alma, bakcup veya yedekleme, adına ne korsan koy, basittir fakat çoğu kimse uğraşmaktan pek hoşlanmaz. Çok can sıkıcı olduğu kadar can alıcıdır da. Örneğin, mysql veritabanı yedeklemek için phpmyadmin'i kullanılabilir. Fakat her seferinde bunu bizzat sizin yapmanız gerekir. Tamamen vakit kaybı. Özelikle de birden fazla sunucu için bu iş yapılacaksa...
Ben de bu işi otomatik, zaman ayarlı ve çeşitli yöntemlerle yedekleme yapacak php ile veritabanı yedekleme betiği(script'i) yazarak büyük birt dertten kurtuldum.
Php ile veritabanı yedeklemek basittir. Mysql'in backup sistemine, php'nin exec() veya system() gibi komutları ile erişilerek yedekleme yapılabilir. Fakat paylaşımlı olarak kullanılan sunucularda (barındırma hizmeti verenlerin %90 paylaşımlıdır) php'nin exec() ve system() gibi komutları güvenik gerekçesiyle kullanıma kapatılmıştır.
Bu kod(phpMysqlBackup.php), information schema veritabanından yararlanarak yedekleme yapmaktadır. En kıt yetkilerlere sahipken bile pes etmez, yedekler. Yedeklemeli.
Neleri yedekler?
Seçtiğin veritabanlarını, veritabanlarının içindeki tabloları ve tablolardaki verileri yedekler. İsterseniz bir veritabanındaki tüm nesneleri veya sadece bazılarını yedekleyebilirsiniz.
Nereye yedekler?
Php ile veritanı yedekleme kodu, oluşturulan
Ne zaman yedekler?
Dakika olarak belirlediğiniz vakitlerde yedekler. Bu şekilde bir veritabanındaki bazı tabloları günde bir kez yedekleyebilir, bazılarını ise 3 günde bir yedekleyebilirsiniz. Haftada bir de veritabanını tamamıyla yedeklersiniz. Sık değişmeyen tabloları yedeklemenin ne anlamı var?
Ne kadar güvenilir?
Ben güvendim ve kullandım. Çalıştı. Sonra bir kaç defa daha kullandım. Yine çalıştı. Ben bir arıza göremedim, görürseniz aşağıdaki yorum formu ile bana bildirirseniz size teşekkür ederim. Fakat siz bir kez deneyin ve oluşan yedek dosyasına bir göz atın, belki bazı sorunlar meydana gelmiştir.
Ne kadar ödemeliyim?
Bu seferlik benden ;)
Ciddiyetle, bu kod bir lisansa sahip değil. İşine yararsa kullan, hata bulursan bana bildir, hatta kodu geliştir ve bana gönder. Başka bir beklentim yok. Ayrıca ticari olarak da rahatça kullanabilirsiniz, ticari olarak kullanmayacaksınız da bu kodu ne yapacaksınız?
Kullanımı:
Her bir yedekleme işlemi için $this->schedules dizisine görev eklemelisiniz. Bir görev özetle şöyle der: 'şu sunucudaki, şu veritanındaki, şu tabloları, şu ftp'ye, şu epostaya ve şu dizine yedekle her XX dakikada bir yedekle'$this->schedules=array(
'1440'=>array(
'db'=>array('host'=>'localhost','user'=>'mysql_kullanici','password'=>'mysql_şifre'),
'dbObjects'=>array('urunler'=>array('*')),
'email'=>array('to'=>'mr.atik@gmail.com','title'=>'CookinTC DB Yedeği - ','from'=>'bilgi@site.com','fileName'=>'cookingVtYedek','timeSuffix'=>true, 'titleTimeSuffix'=>true, 'message'=>'Cookingthecode.com Veritabanı Yedeğidir. Lak lak lak...'),
'local'=>array('fileName'=>'ctcDB','timeSuffix'=>true),
'ftp'=>array('address'=>'site.com','username'=>'ftp_user', 'password'=>'ftp_pass', 'remoteDir'=>'/YedekDizini/', 'fileName'=>'dbYedek','timeSuffix'=>true)
)
)
Yukarıdaki görev 1440 dakikada bir yani 1440/60=24 saatte bir, localhost sunucusundaki urunler veritabanı içinde bulunan tüm tabloları ftp, eposta ve yerel dizine kaydeder.
Çoklu veritabanı yedekleme için dbObjects dizisini şöyle yazabilirsiniz; 'dbObjects'=>array('urunler'=>array('*'), 'muhasebe'=>'*'
bu haliyle hem urunler hem de muhasebe veritabanındaki bulunanlar yedeklenecektir.
Sadece belitrilen tabloları yedeklemek için;'dbObjects'=>array('urunler'=>array('urun','siparis','stok'), 'muhasebe'=>array('bilanco','giderler')
bu haliyle urunler veritabanındaki urun, siparis ve stok tabloları; muhasebe veritabanındaki bilanco ve giderler tabloları yedeklenecektir.
Bir kaç tablo hariç tüm her şeyi yedeklemek için; 'dbObjects'=>array('urunler'=>array('*','--stok'), 'muhasebe'=>array(''*','--loglar')
bu haliyle urunler veritabanındaki stok tablosu hariç tüm tablolar; muhasebe veritabanındaki loglar tablosu hariç tüm tablolar yedeklenecektir.
Çoklu görev listesi örneği;$this->schedules=array(
'120'=>array(
'db'=>array('host'=>'localhost', 'user'=>'mysql_kullanici', 'password'=>'mysql_şifre'),
'dbObjects'=>array('blog'=>array('mesajlar')),
'local'=>array('fileName'=>'ctcDB','timeSuffix'=>true)
),
'600'=>array(
'db'=>array('host'=>'localhost', 'user'=>'mysql_kullanici', 'password'=>'mysql_şifre'),
'dbObjects'=>array('blog'=>array('makaleler')),
'ftp'=>array('address'=>'site.com','username'=>'ftp_kullanici', 'password'=>'ftp_parola', 'remoteDir'=>'/yedekDizini/', 'fileName'=>'DBYedek','timeSuffix'=>true)
),
'7200'=>array(
'db'=>array('host'=>'localhost', 'user'=>'mysql_kullanici', 'password'=>'mysql_şifre'),
'dbObjects'=>array('blog'=>array('*')),
'local'=>array('fileName'=>'ctcDB','timeSuffix'=>true)
)
)
bu görev listesi; her iki saatte bir (120/60=2) blog veritabanındaki mesajları yerel diske kaydeder, her on saatte bir (600/60=10) blog veritabanındaki makaleleri ftp sunucusuna yükler, her 5 günde bir (7200/24/60=5) blog veritabanındaki her şeyi yerel diske kaydeder.
Gerisi kod dosyasında anlatıldı. Yine de bir şeyler sormayı düşünürsen, elini korkak alıştırma, yaz bana.
Çok konuştum. İşte php ile veritabanı yedekleme kodum; phpMysqlBackup.zip



link çalışmıyor
Evet, link çalışmıyormuş. Şimdi çalışıyor.
E-posta göndermek için kullanılan sınıfta birkaç değişiklik yapılması şart. Eski bir sınıf zaten. Sınıf, smtp sunucusuna tcp ile bağlanıyor, bu yöntem değiştirilmelidir. Hayrıan birisi yaparsa sevinirim. Eğer zamanım olursa, ben değiştireceğim.
cronme.org ile iyi gider.
Bu uygulamada zamanlanmış yedekleme özelliği de var. Belirli sayfalarda bu sınıfın yedek alan metodu çağırılarak işlem yapılabilir. Yedek alma, eğer süre uygunsa, yapılacaktır, aksi taktirde yedek almayacaktır.
Fakat her sayfadan ayrı ayrı çağırmak yerine cron kullanmak daha iyidir.
Teşekkürler. Geliştirilirse dahada gzel olur.
Ne icin, tesekkur ariyordum