PHP Kullanarak MySQL Veritabanını Yedekleme

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.

PHP Kullanarak MySQL Veritabanını Yedekleme

Daha ö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.

<?php

/**
 * @function    backupDatabaseTables
 * @author      None Server
 * @link        https://www.noneserver.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.

backupDatabaseTables('localhost','root','*****','cariHesaplarDB');

Tepkiniz Nedir?

like
1
dislike
0
love
0
funny
0
angry
0
sad
0
wow
0