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