Membuat aplikasi web untuk backup dan restore database menggunakan PHP


Latar Belakang

Database banyak digunakan untuk menyimpan data baik pada  aplikasi desktop maupun berbasis web.  untuk alasan keamana, database perlu dilakukan proses backup. sehingga jika suatu saat terjadi kerusakan data, dapat dilakukan proses restore database.

Bagi teman-teman yang terbiasa menggunakan aplikasi phpmyadmin pasti pernah menggunakna fasilitas export dan import database. nah pada artikel kalo ini saya akan membahas tentang sebuah aplikasi sederhana yang digunakan untuk backup dan restore database. Dalam aplikasi ini terdapat 3 file yaitu :

  • index.php yang digunakan untuk backup sekaligus halaman utama aplikasi
  • download_backup_data.php yang digunakan untuk mendownload file database (*.sql) yang sudah tersimpan didalam folder backup
  • recovery_data.php digunakan untuk restore atau mengembalikan  database ke keadaan semula sesuai dengan isi query yang ada didalam file backup database

Script Backup Database

1) Buat nama file untuk backup database

//membuat nama file
$file=date(“DdMY”).’_ri32_backup_data_’.time().’.sql’;

2) Memanggil fungsi backup database

//panggil fungsi dengan memberi parameter untuk koneksi dan nama file untuk backup
backup_tables(“localhost”,”root”,””,”absensi_db“,$file);

3) Fungsi untuk backup database

/*
untuk memanggil nama fungsi :: jika anda ingin membackup semua tabel yang ada didalam database, biarkan tanda BINTANG (*) pada variabel $tables = ‘*’
jika hanya tabel-table tertentu, masukan nama table dipisahkan dengan tanda KOMA (,)
*/
function backup_tables($host,$user,$pass,$name,$nama_file,$tables = ‘*’)
{
//untuk koneksi database
$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{
//jika hanya table-table tertentu
$tables = is_array($tables) ? $tables : explode(‘,’,$tables);
}

//looping dulu ah
foreach($tables as $table)
{
$result = mysql_query(‘SELECT * FROM ‘.$table);
$num_fields = mysql_num_fields($result);

//menyisipkan query drop table untuk nanti hapus table yang lama
$return.= ‘DROP TABLE ‘.$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))
{
//menyisipkan query Insert. untuk nanti memasukan data yang lama ketable yang baru dibuat. so toy mode : ON
$return.= ‘INSERT INTO ‘.$table.’ VALUES(‘;
for($j=0; $j<$num_fields; $j++)
{
//akan menelusuri setiap baris query didalam
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace(“\n”,”\\n”,$row[$j]);
if (isset($row[$j])) { $return.= ‘”‘.$row[$j].'”‘ ; } else { $return.= ‘””‘; }
if ($j<($num_fields-1)) { $return.= ‘,’; }
}
$return.= “);\n”;
}
}
$return.=”\n\n\n”;
}

//simpan file di folder yang anda tentukan sendiri. kalo saya sech folder “DATA”
$nama_file;

$handle = fopen(‘./backup/‘.$nama_file,’w+’);
fwrite($handle,$return);
fclose($handle);
}

4) Membuat link untuk download file backup database

<p align=”center”><a style=”cursor:pointer” onclick=”location.href=’download_backup_data.php?nama_file=<?php echo $file;?>‘” title=”Download”>Backup database telah selesai. <font color=”#0066FF”>Download file database</font></a></p>

Script download File Backup database

<?php
$file=$_GET[‘nama_file’];
// header yang menunjukkan nama file yang akan didownload
header(“Content-Disposition: attachment; filename=”.$file);
// header yang menunjukkan ukuran file yang akan didownload
header(“Content-length: “.$file);
// header yang menunjukkan jenis file yang akan didownload
header(“Content-type: “.$file);
// proses membaca isi file yang akan didownload dari folder ‘data’
$fp  = fopen(“./backup/”.$file, ‘r’);
$content = fread($fp, filesize(‘./backup/’.$file));
fclose($fp);
// menampilkan isi file yang akan didownload
echo $content;
exit;
?>

Script Upload file sebelum di Restore

//definisikan variabel file dan alamat file
$uploaddir=’./restore/‘;
$alamatfile=$uploaddir.$nama_file;

//periksa jika proses upload berjalan sukses
if (move_uploaded_file($_FILES[‘datafile’][‘tmp_name’],$alamatfile))

Script untuk restore database

$filename = ‘./restore/’.$nama_file.”;
// Temporary variable, used to store current query
$templine = ”;
// Read in entire file
$lines = file($filename);
// Loop through each line
foreach ($lines as $line)
{
// Skip it if it’s a comment
if (substr($line, 0, 2) == ‘–‘ || $line == ”)
continue;
// Add this line to the current segment
$templine .= $line;
// If it has a semicolon at the end, it’s the end of the query
if (substr(trim($line), -1, 1) == ‘;’)
{
// Perform the query
mysql_query($templine) or print(‘Error performing query \'<strong>’ . $templine . ‘\’: ‘ . mysql_error() . ‘<br /><br />’);
// Reset temp variable to empty
$templine = ”;
}}
echo “<center>Berhasil Restore Database, silahkan di cek.</center>”;

Tampilan Output

Backup Database

Restore Database

Download Database

Download

http://www.4shared.com/file/uw0iZKbg/backup-restore.html

Sekian tutorial dari saya, semoga dapat bermanfaat untuk teman-teman dan Anda semua…aamin 🙂

Depok, 15-12-2010

noname

Advertisements

15 Responses

  1. thank’s ilmunya bermanfaat banget….

    Like

    • Alhamdulilah, sama2 🙂

      Like

  2. makasih mas, saya nyari2x k mana2x baru k temu di sini,…

    Like

  3. sama2 🙂

    Like

  4. Mas agus trima kasih atas Ilmunya saya menggunakan referensi dari tutorial mas agus beserta tutorial dari ‘http://blog.rosihanari.net/membuat-sendiri-script-php-untuk-backup-mysql’

    Saya mohon pencerahannya, saya mencoba script yg saya buat sendiri
    dimana saya melakukan upload file yang saya sudah upload menggunakan mysqldump terlebih dahulu ke directory mysql/bin lalu saya mengeksekusi function restore database di sheel via php, dengan code sbb:

    if(isset($_FILES[‘datafile’]))
    {
    $file = $_FILES[‘datafile’][‘tmp_name’];
    }

    //mengupload file sql ke directory bin

    $temp=”C:/xampp/mysql/bin/backup.sql”;
    if(move_uploaded_file($file,”$temp”))
    {

    $command = “C:/xampp/mysql/bin/mysql -u”.$username_data.” -p”.$password_data.” “.$database_data.” < backup.sql";

    // mengeprint command eksekusi
    echo $command;
    // menjalankan command restore di shell via PHP
    exec($command);
    }

    waktu saya melakukan exekusi pada script ini, tidak ditemukan error apapun, tapi database saya tidak mengalami restore, tapi apabila saya mengcopy command dari hasil page yg telah terexekusi dan menjalankannya ke command prompt, maka database saya akan te-restore, maaf apabila penjelasannya membinggungkan

    Terima kasih

    Like

    • assalamu’alaikum mas andi

      dalam referensi fungsi php shell_exec :

      http://php.net/manual/en/function.shell-exec.php

      terdapat catatan…

      Note:

      This function is disabled when PHP is running in safe mode.

      Sehingga settingnya harus seperti ini :

      safe_mode = off
      exec = On
      shell_exec = On

      untuk itu silahkan baca tutorial dibawah ini :

      http://kamtiez.web.id/exploit/membuat-safe-mode-on-menjadi-safe-mode-off-pada-php-shell.pl

      semoga berhasil 🙂

      Like

    • was’alaikum mas agus,

      trima kasih atas replynya,
      saya minta maaf mas, ternyata terdapat kesalahan pada script $command saya, dimana seharusnya saya memberikah juga address direcotry dari file sql tersebut, tetapi saya langsung saja menuliskan nama file sqlnya.

      Untuk info tentang safemodenya membantu juga jadi ada tambahan ilmu tentang relasi safemode dan fungsi execnya

      (^_^)

      Like

    • good job mas andy 🙂

      RABBI ZIDNII’ILMAN WARZHUQNI FAHMAN…AAMIIN

      Like

  5. kenapa muncul

    Deprecated: Function ereg_replace() is deprecated in D:\MY XAMPP\xampp\htdocs\backup-restore\index.php on line 77

    Like

  6. Gan, makasih ya informasinya 😀

    Like

  7. mas mau tanya donks yang dihasilkan dari php ini kan file sql kalau mau bikin file sql nya terpassword gimana ya?

    Like

  8. mas agus syukron……atas Ilmunya saya menggunakan referensi dari tutorial mas agus, untuk web site saya dan lembaga saya mas,,,

    Like

  9. Terima kasih Kang Agus Sumarna, tulisannya sangat bermanfaat sekali.

    Like

  10. error_reporting(0);

    Like

  11. terimakasih banyak untuk tutorialnnya mas
    sangat bermanfaat sekali (y)

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: