Cara Mudah Mem-Backup MySQL Database Yang Besar di Shared Hosting

Mau berbagi pengalaman melakukan backup database MySQL yang besar sampai ratusan MB di shared hosting. Sudah mencoba beberapa cara melalui PHPMyAdmin yang ada di Cpanel, tapi selalu gagal.

Coba searching sana-sini, ketemu software yang bagus yaitu MySQLDumper (www.mysqldumper.net), akhirnya berhasil melakukan backup database mysql yang besar tersebut. Tapi ada kelemahannya yaitu proses backup (mode PHP) memakan waktu yang lama. Demikian juga proses restore atau import-nya juga makan waktu yang lama.
Untuk proses backup / ekspor bisa lebih cepat kalau pakai mode perl. Asal shared hosting anda juga sudah mendukung perl. Tinggal klak-klik coba-coba, akhirnya berhasil. Tapi agak membingungkan juga, hasil backup ada dua, dan waktu di restore banyak errornya.

Akhirnya searching lagi sana-sini, ketemulah script yang sangat josss gandoss. Cukup copy script ini ke dalam file php. Terus panggil lewat browser. Maka dalam waktu yang singkat sudah selesai proses backupnya. Waktu di restore juga tidak lagi muncul error.

Silahkan dicoba bagi yang membutuhkannya:

<?php
    backup_tables('HOSTNAME','USERNAME','PASSWORD','DATABASE');
 
    /* Function to create backup of a database */
    function backup_tables($host,$user,$pass,$name,$tables = '*')
    {
        $link = mysql_connect($host,$user,$pass);
        mysql_select_db($name,$link);
     
        if($tables == '*'){
            $tables = array();
            $result = mysql_query('SHOW TABLES');
            while($row = mysql_fetch_row($result)){
                $tables[] = $row[0];
            }
        }else{
            $tables = is_array($tables) ? $tables : explode(',',$tables);
        }
     
        //Looping of tables
        foreach($tables as $table){
            $result = mysql_query('SELECT * FROM '.$table);
            $num_fields = mysql_num_fields($result);
         
            $return.= 'DROP TABLE  IF EXISTS '.$table.';';
            $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
            $return.= "\n\n".$row2[1].";\n\n";
         
            for ($i = 0; $i < $num_fields; $i++)
            {
                while($row = mysql_fetch_row($result))
                {
                    $return.= 'INSERT INTO '.$table.' VALUES(';
                    for($j=0; $j<$num_fields; $j++)
                    {
                        $row[$j] = addslashes($row[$j]);
                        $row[$j] = preg_replace("/\r\n/","\\r\\n",$row[$j]);
                        if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                        if ($j<($num_fields-1)) { $return.= ','; }
                    }
                    $return.= ");\n";
                }
            }
            $return.="\n\n\n";
        }
     
        //Save .sql file
        $handle = fopen($name.'-backup-'.date('d-m-y-H-i-s').'.sql','w+');
        fwrite($handle,$return);
        fclose($handle);
     
        /*
        @ Use this code if you want to create zipped file
        */
        /*
        $gzdata = gzencode($return, 9);
        $handle = fopen($name.'-backup-'.date('d-m-y-H-i-s').'.sql.gz','w+');
        fwrite($handle, $gzdata);
        fclose($handle);
        */
    }
?>

Cara pakainya tinggal edit bagian ini:

backup_tables('HOSTNAME','USERNAME','PASSWORD','DATABASE');

isilah dengan data yang sesuai dengan database mysql yang mau di backup.

Credit: http://winfoes.co.uk/forum/Coding–Scripting/1321-backup-mysql-database-with-php-file

Leave a Reply

Your email address will not be published. Required fields are marked *

*