PHP MySql Database Export – Backup

Her geliştiricinin sık sık ve düzenli olarak gerçekleştirmesi gereken önemli işlerden biri belki veritabanı yedeği almak.

PHP MySql Database Export – Backup

Ama çoğu zaman umursamıyoruz, dikkat etmiyoruz. Bu umursamazlık sonucunda kimi zaman veri kayıpları yaşıyoruz, kimi zaman sunucu firması ile papaz oluyoruz. Aslında bu işlem bana göre her gün en az bir kez gerçekleştirilmeli. Başka bir senaryoda ise, database erişiminiz yok, c-panel erişiminiz yok. Ama database export almanız gerekiyor. Bunu nasıl yapacağım diye kara kara düşünüyorsunuz. Fazla düşünmeyin, yazının devamında paylaşacağım kod dizisi ile herhangi bir arayüze gerek duymadan database export alabileceksiniz.

Nasıl mı?

Geçtiğimiz günlerde ikinci senaryoyu bizzat yaşadım. Arayüz ile export almak olanaksız. Bu durum için istediğiniz sürede cron’lara bağlayabileceğiniz ve kolayca backup alabileceğiniz fonksiyonel bir kod dizisi oluşturdum.

Önemli: Fonksiyon sonucunda oluşan .sql uzantılı backup dosyanızı fonksiyonu çalıştırdığınız dosyanın hemen yanında aynı dizin içerisinde bulabileceksiniz.

Örnek dosya ismi: db-backup-1420632693-a449d74aa6e87d861d160b25a4221118.sql

<?php
backup_tables('localhost','username','password','dbname');
/* 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.= "nn".$row2[1].";nn"; 
	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] = ereg_replace("n","n",$row[$j]); 
					if (isset($row[$j])) { 
						$return.= '"'.$row[$j].'"' ; 
					} 
					else { 
						$return.= '""'; 
					} 
					if ($j<($num_fields-1)) { 
						$return.= ','; 
					} 
				} 
					$return.= ");n"; 
} 
} 
$return.="nnn"; 
} //save file 
$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); 
fwrite($handle,$return); fclose($handle); 
} 
?>

Tepkiniz Nedir?

like
1
dislike
0
love
0
funny
0
angry
0
sad
0
wow
0