Takip et

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. 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); 
} 
?>
Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorumları Göster (1)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.