PDA

View Full Version : کدی برای برگرداندن دیتابیس



aliramazani
سه شنبه 28 فروردین 1386, 18:30 عصر
سلام.
اگر در انجمنهای php bb دیده باشید قسمتی وجود داره که متونه از دیتابیس شما بک آپ بگیره و بعد می تونید بک آپ خودتون را از از طریق php bb برگردونید بدون اینکه به phpmy admin رجوع کنید.
حالا من یه درخواست داشتم. اگه کد بک آپ گیری و برگرداندن بک آپ را برای یک دیتابیس برای من بنویسید ممنون میشم. تو رو خدا نگید برو از php my admin اینکار رو بکن. کدش را می خوام.
با تشکر.

reza_rad
چهارشنبه 29 فروردین 1386, 06:58 صبح
کدش بارها توی انجمن mysql گذاشته شده. جستجو کنید!

http://barnamenevis.org/forum/showthread.php?t=60682

http://barnamenevis.org/forum/showthread.php?t=61179

http://barnamenevis.org/forum/showthread.php?t=57905

http://barnamenevis.org/forum/showthread.php?t=44483

aliramazani
چهارشنبه 29 فروردین 1386, 14:32 عصر
ممنون دوست عزیز ولی منظور من این نبود. ببینید با کدهای زیر میشه از انجمن بک آپ گرفت:
کد زیر را در یک فایل مثلاً با نام Mydd.php ذخیره کنید:

<?php
//MyDbDumper 0.1
//Author: Armin Borumand
//e-mail: armin390 [at] gmai [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,$passwo rd))==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_cont ent));
$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;
}
}
?>
- حال برای تهیه پشتیبان می توانید از یکی از راههای زیر استفاده کنید:
الف-1- نمایش خروجی در مرورگر از کد زیر استفاده کنید:

<?php
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,'print',false,true);//فشرده سازی خروجی
//Change_End
ب-1- برای تهیه کپی اطلاعات در فایلی در سرور خطوط زیر را جایگزین کنید:

//Change_Start
$md=new mydbdumper($dbs,'file','file_path/');// مسیر پوشه ذخیره سازی فایل است file_path که
//Change_End
ب-2- برای تهیه کپی اطلاعات به صورت فشرده شده خطوط زیر را حایگزین کنید:

//Change_Start
$md=new mydbdumper($dbs,'file','file_path/',true);
//Change_End
ج-1- و مهمترین کاربرد یعنی ارسال اطلاعات به میل شما(دیگر نیاز به دانلود تمام بک آپ ها نیست :wink برای این کار خطوط زیر را جایگزین کنید(به جای 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 و در بانک اطلاعاتی مورد نظرتان که شامل ساختار جداول است اجرا کنید کار تمام است!
این آموزش را از یه جایی خوندم و بک آپ میگیره ولی از طریق PhpMyAdmin بر نمی گرده و پیغام خطا میده.
اصلا معنی جمله حالا اگه فایل خروجی رو مثلاً در PhpMyAdmin و در بانک اطلاعاتی مورد نظرتان که شامل ساختار جداول است اجرا کنید کار تمام است! چیه؟ ساختار جدول یعنی چی ؟ یعنی همه جدولها را بر نمی گردونه؟ برای برگردوندن چنین بک آپی چه باید کرد؟

در ضمت اگر کدی مانند کد بالا برای بازگرداندن بک آپ بود لطفا به من بدید.
با تشکر.

reza_rad
چهارشنبه 29 فروردین 1386, 14:40 عصر
این آموزش را از یه جایی خوندم و بک آپ میگیره ولی از طریق PhpMyAdmin بر نمی گرده و پیغام خطا میده.

چه خطایی میده؟