Backup Database MySQL/MariaDB dengan PHP

Salah satu tugas yang paling penting setiap pengembang web adalah perlunya sering melakukan backup database MySQL. Dalam banyak kasus, database adalah media penyimpanan data yang sudah tidak dapat terelakkan lagi dan kebanyakan menggunakan MySQL. Sementara sebagian besar pengembang web dalam membuat backup sering melalui phpmyadmin maupun dari cpanel yang tersedia, sedangkan jika membuat kode PHP sendiri maka lebih menggunakan exec() padahal sebagian besar web hosting baik yang free maupun berbayar tidak mengijinkan exec() di dalam PHP. Itulah mengapa saya telah membuat fungsi backup database yang bisa digunakan sebagai alternatif exec('mysqldump').
 
berikut kodenya:
<?php 
/* backup the db OR just a table */ 
function backup_tables($host,$user,$pass,$name,$tables = '*') { 
 
 $link = mysql_connect($host,$user,$pass); 
 mysql_select_db($name,$link); 
 
 //get all of the tables 
 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); 
 } 
 
 //cycle through 
 foreach($tables as $table) { 
  $result = mysql_query('SELECT * FROM '.$table); 
  $num_fields = mysql_num_fields($result); 
 
  $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)) { 
    $return.= 'INSERT INTO '.$table.' VALUES('; 
    for($j=0; $j<$num_fields; $j++) { 
     $row[$j] = addslashes($row[$j]); 
     $row[$j] = preg_replace("/\n/i","\\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 file 
 $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); 
 fwrite($handle,$return); 
 fclose($handle); 
} 
?>
Berikut contoh cara menggunakan fungsi tersebut
<?php 
// BACKUP 
// Sample using 1 
backup_tables('localhost','username','password','blog'); 
 
// Sample using 2 
backup_tables('localhost','username','password','blog','table1,table2,table3'); 
 
// Sample using 3 
backup_tables('localhost','username','password','blog',array('table1','table2','table3'); 
 
?>
Kode diatas dapat dimodifikasi dan dikembangkan sesuai dengan kebutuhan. Semoga script ini bisa bermanfaat bagi developer yang lain. Info: Jika database sudah terlalu banyak sebaiknya berikan set_time_limit() supaya tidak terhenti ketika proses, Tetapi penggunaan set_time_limit() banyak hosting yang melarang dan disable fitur tersebut

The power of documents

Kami sajikan dengan bahasa yang mudah dengan disertai command line yang bisa di copy-paste sehingga memudahkan untuk melakukan modifikasi command line