Veritabanı yedekleme, her web geliştirici için olmazsa olmaz işlemlerdendir. Düzenli veritabanı yedekleme, verileri kaybetme riskini önler ve herhangi bir sorun oluştuğunda veritabanını geri yüklemeye yardımcı olur. Bu nedenle, mümkün olduğunca sık olarak veritabanını yedeklemek iyi bir fikirdir.
Blog sayfamı takip edenler için yaklaşık 3 yıl önce burada bir yedekleme mekanizması paylaşmıştım. Uzun zamandır ben de cronlar (zamanlanmış görevler) aracılığıyla buradaki mekanizmadan yararlanarak yedeklerimi alıyorum. Bu makalemde veritabanı yedekleme işlemini yazılımsal olarak geliştirerk bir fonksiyona bağlayacağım. Siz de bunu basitçe kullanacaksınız.
Aslında mySQL veritabanını bir dosyada yedeklemenin birçok yolu vardır. Barındırma sunucusundan tek bir tıklamayla yada arayüz programları aracılığıyla veritabanını yedekleyebilirsiniz. Bunlar hep geliştiriciye iş yükü getiren işlemlerdir. Bu arayüzlerden bağımsız olarak ta yedeklerinizi alabilirsiniz. (PHP aracılığıyla)
Peki arayüz ile değil de PHP üzerinden veritabanı yedeği almak bize ne gibi artılar kazandırır?
Yukarıda belirttiğim gibi arayüzler ile yedek almanız her zaman size iş yükü çıkaracaktır. Örneğin yedek almayı unuttuğunuz bir dönem olabilir. Bu dönemde olası yaşayacağınız bir veri kaybının geri dönüşü olmayacaktır. Ancak veritabanını aşağıda göstereceğim yöntemle yazılımsal olarak fiziksel bir dizine aldığımızda, bunu tetikleyen PHP dosyamızı da bir cron’a (zamanlanmış görev) tanımladığımızda (her gün saat 12:00’da yedek al) bu işlemi otomatiğe bağlamış olacağız. Sistem bir nevi kendi işini kendi halletmiş olacak. Bize de yedekleri belirli aralıklarla kontrol etmek kalacak.
Hemen aşağıda MySQL veritabanını yedeklemek ve bir SQL dosyasına kaydetmek için bir PHP betiği oluşturacağız.
PHP’yi kullanarak MySQL Veritabanı Yedekleme
Yedekleme için gerekli tüm PHP kodlarımı backupDatabaseTables() fonksiyonunda birlikte toplayacağım. backupDatabaseTables() fonksiyonunu kullanarak belirli tabloları veya tüm tabloları bir veritabanından kolayca yedekleyebilirsiniz. MySQL veritabanını PHP kullanarak yedeklemek için aşağıdaki parametreler gereklidir.
- $dbHost – Zorunlu. Veritabanının ana sunucusunu belirtir.
- $dbUsername – Zorunlu. Veritabanı kullanıcı adını belirtir.
- $dbPassword – Zorunlu. Veritabanı şifresini belirtir.
- $dbName – Zorunlu. Yedeklemek istediğiniz veritabanı adını belirtir.
- $tables– İsteğe bağlı. Virgül ile ayrılmış dizge veya dizideki tablo adlarını belirtir. Veritabanının tüm tablolarını yedeklemek için bu parametreyi atlayın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <?php /** * @function backupDatabaseTables * @author Fatih Soysal * @link http://www.fatihsoysal.com * @usage PHP Kullanarak MySQL Veritabanını Yedekleme */ function backupDatabaseTables($dbHost,$dbUsername,$dbPassword,$dbName,$tables = '*'){ //veritabanı bağlantısı $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); //tüm tabloları alalım if($tables == '*'){ $tables = array(); $result = $db->query("SHOW TABLES"); while($row = $result->fetch_row()){ $tables[] = $row[0]; } }else{ $tables = is_array($tables)?$tables:explode(',',$tables); } //tablolar içerisinde dönelim foreach($tables as $table){ $result = $db->query("SELECT * FROM $table"); $numColumns = $result->field_count; $return .= "DROP TABLE $table;"; $result2 = $db->query("SHOW CREATE TABLE $table"); $row2 = $result2->fetch_row(); $return .= "\n\n".$row2[1].";\n\n"; for($i = 0; $i < $numColumns; $i++){ while($row = $result->fetch_row()){ $return .= "INSERT INTO $table VALUES("; for($j=0; $j < $numColumns; $j++){ $row[$j] = addslashes($row[$j]); $row[$j] = ereg_replace("\n","\\n",$row[$j]); if (isset($row[$j])) { $return .= '"'.$row[$j].'"' ; } else { $return .= '""'; } if ($j < ($numColumns-1)) { $return.= ','; } } $return .= ");\n"; } } $return .= "\n\n\n"; } //dosyayı kaydedelim $handle = fopen('db-backup-'.time().'.sql','w+'); fwrite($handle,$return); fclose($handle); } ?> |
Kullanımı:
MySQL veritabanı yedeğini oluşturmak ve bir SQL dosyasına kaydetmek için backupDatabaseTables() fonksiyonunu kullanmanız yeterlidir.
1 | backupDatabaseTables('localhost','root','*****','cariHesaplarDB'); |
Bir sonraki makalede görüşmek üzere. Soru, görüş ve önerilerini yorum bölümünden paylaşabilirsiniz. Sağlıklı, huzurlu günler dilerim.
Merhaba,
Güzel çalıştı elinize sağlık fakat türkçe karakterleri hatalı indirdi.
Merhabalar ben bunu bilgisayarımda nasıl sürekli çalışır bi halde kullanacagım hergün saat 12 de bu dosyayı açmammı gerekicek ?
Eğer otomatik bir sistem düşünüyorsanız bunu bir URL üzerinden cron-job’a bağlamalısınız. Plesk panel cron-job işlemleri için bu yazımı inceleyebilirsiniz; https://fatihsoysal.com/blog/plesk-panel-zamanlanmis-gorev-ayarlari-scheduled-task-cron-job/