Digital Note

Grab a coffe, take a seat, maybe listen to some music and relax by reading our digital daily diary. We want to share our minds and know how with you and the whole world!

Blog phones

Backup Database MySQL 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

Trackback from your site.

Leave a comment