خوب این مقدمه ی کوتاهی بود تا برنامه ای که وظیفه اش تهیه پشتیبان از اطلاعات دیتابیس است را معرفی کنم؛
این برنامه (php) برای تهیه پشتیبان گیری از اطلاعات(یعنی اطلاعات موجود در جداول نه ساختار جداول) موجود در دیتابیس های MySql است و استفاده از آن بسیار راحت است که برای افرادی که آشنایی کمی با php دارند در زیر توضیح می دهم:
1- ابتدا کد زیر را در یک فایل مثلاً با نام Mydd.php ذخیره کنید:
//MyDbDumper 0.1
//Author: Armin Borumand
//e-mail: armin390 [at] gmail [dot] com
class mydbdumper{
var $mylink;
var $dbs;
var $tbs;
var $fls;
// mydbdumper arguments:
//$dbs ==> array of database
//$output ==> outpot mode: print or mail or file
//$option ==> in modes
// print ==> false
// mail ==> send mail address
// file ==> file path+/
function mydbdumper($dbs=false, $output='print', $option=false, $gz=false){
$out='';
$username='root';
$password='';
if(($this->mylink=mysql_connect('localhost',$username,$password))==false)
die('Can\'t connect to database.');
$this->dbs=!$dbs?$this->_listdbs():$dbs;
foreach($this->dbs as $db){
$this->tbs=$this->_listtbls($db);
foreach($this->tbs as $tb){
$sqlr=$this->tabledata($tb);
$out.=$sqlr;
}
}
mysql_close($this->mylink);
if($gz)
if(!($out=gzencode($out,9)))
die('Error in file compressing!');
switch($output){
case 'print':
if($gz){
header("Content-Type: application/x-gzip;");
header("Content-disposition: attachment; filename={$db}.sql.gz");
}
echo $out;
break;
case 'mail':
$name=$db.date('yhd').'.sql';
$name.=($gz)?'.gz':'';
if($this->mail('nobody@rookhat.com', $option, 'MyDbDumper::'.$db, $db.' database backup;', $name, $out)===false)
die('Error in mail sending!');
echo "Successful.[{$name}] to [{$option}]";
break;
case 'file':
$name=$db.date('ymd').'.sql';
$name.=($gz)?'.gz':'';
if(($fp=fopen($option.$name,'w'))!=false){
if(fwrite($fp, $out)==false)
die('Error in file writing!');
}
fclose($fp);
echo "Successful.[{$name}] in [{$option}]";
}
}
function _listdbs(){
$dbls=mysql_listdbs($this->mylink);
$i=0;
if(count($dbs)==0){
while($r=mysql_fetch_array($dbls)){
$dbs[$i++]=$r[0];
}
}
mysql_free_result($dbls);
return $dbs;
}
function _listtbls($db){
mysql_select_db($db);
$tbls=mysql_query('SHOW TABLES FROM '.$db);
if(!tbls)
die('DataBase Error: '.mysql_error());
$i=0;
while($r=mysql_fetch_array($tbls)){
$tbs[$i++]=$r[0];
}
mysql_free_result($tbls);
return $tbs;
}
function _strip($x){
$x=str_replace("'","''",$x);
$x=str_replace("\\","\\\\",$x);
return $x;
}
function tabledata($tb){
$mydbdumper='';
$row=mysql_query("SELECT * FROM ".$tb);
if(!$row)
die('DataBase Error: '.mysql_error());
while($r=mysql_fetch_row($row)){
$sqliq="INSERT INTO `{$tb}` VALUES (";
foreach($r as $rr)
$sqliq.="'".$this->_strip($rr)."', ";
$sqliq=substr($sqliq,0,strlen($sqliq)-2);
$sqliq.=");\n";
$mydbdumper.=$sqliq;
}
mysql_free_result($row);
return $mydbdumper;
}
function mail($from, $to, $subject, $msg, $file_name, $file_content){
$file_content=chunk_split(base64_encode($file_content));
$ub=uniqid(0);
$header="From: {$from}
To: {$to}
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary={$ub}\r\n";
$body="--{$ub}
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename={$file_name}\r\n
{$file_content}\r\n
--{$ub}
Content-Type:text/html; charset=\"utf-8\"
Content-Transfer-Encoding: 8bit\r\n
{$msg}\r\n
--{$ub}--\r\n";
if(@mail($to,$subject,$body,$header))
return true;
return false;
}
}
?>
2- حال برای تهیه پشتیبان می توانید از یکی از راههای زیر استفاده کنید:
الف-1- نمایش خروجی در مرورگر از کد زیر استفاده کنید:
include('mydd.php');
$dbs=array('db_name');//آرايه اي از نام ديتابيس ها
//Change_Start
$md=new mydbdumper($dbs,'print');//خروجي عادي
//Change_End
?>
الف-2- برای نمایش خروجی فشرده سازی شده در مرورگر خطوط زیر را به جای سه خط Change_Start// تا Change_End// در بالا قرار دهید
//Change_Start
$md=new mydbdumper($dbs,'file','file_path/');// مسير بوشه ذخيره سازي
//Change_End
ب-1- برای تهیه کپی اطلاعات در فایلی در سرور خطوط زیر را جایگزین کنید:
//Change_Start
$md=new mydbdumper($dbs,'file','file_path/',true);
//Change_End
ب-2- برای تهیه کپی اطلاعات به صورت فشرده شده خطوط زیر را حایگزین کنید:
//Change_Start
$md=new mydbdumper($dbs,'file','file_path/',true);
//Change_End
ج-1- و مهمترین کاربرد یعنی ارسال اطلاعات به میل شما(دیگر نیاز به دانلود تمام بک آپ ها نیست ) برای این کار خطوط زیر را جایگزین کنید(به جای e-mail آدرس میل خود را بنویسید):
//Change_Start
$md=new mydbdumper($dbs,'mail','e-mail');
//Change_End
ج-2- و برای ارسال اطلاعات به صورت فشرده شده خطوط زیر را جایگزین کنید:
//Change_Start
$md=new mydbdumper($dbs,'mail','e-mail',true);
//Change_End
حالا اگه فایل خروجی رو مثلاً در PhpMyAdmin و در بانک اطلاعاتی مورد نظرتان که شامل ساختار جداول است اجرا کنید کار تمام است!