PDA

View Full Version : پشتیبان گیری از جداول mysql به صورت جداگانه و ارسال آن از طریق ایمیل



haniiii
پنج شنبه 04 دی 1393, 22:04 عصر
سلام

بعضی از جداول دیتابیسم مهم هستند و میخوام به صورت خودکار هر چند ساعت یک بار از طریق ایمیل برام فرستاده بشه

نمونه های زیادی رو دیدم ولی بیشترشون روی پشتیبان گیری از تمام دیتابیس تمرکز داشتند ... ممنون میشم راهنمایی کنید در مورد پشتیبان گیری از یک جدول خاص .

ostadsho
پنج شنبه 04 دی 1393, 22:39 عصر
این تابع رو امتحان کنید:



function &backup_tables($host, $user, $pass, $name, $tables = '*'){
$data = "\n/*---------------------------------------------------------------".
"\n SQL DB BACKUP ".date("d.m.Y H:i")." ".
"\n HOST: {$host}".
"\n DATABASE: {$name}".
"\n TABLES: {$tables}".
"\n ---------------------------------------------------------------*/\n";
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
mysql_query( "SET NAMES `utf8` COLLATE `utf8_general_ci`" , $link ); // Unicode

if($tables == '*'){ //get all of the 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);
}

foreach($tables as $table){
$data.= "\n/*---------------------------------------------------------------".
"\n TABLE: `{$table}`".
"\n ---------------------------------------------------------------*/\n";
$data.= "DROP TABLE IF EXISTS `{$table}`;\n";
$res = mysql_query("SHOW CREATE TABLE `{$table}`", $link);
$row = mysql_fetch_row($res);
$data.= $row[1].";\n";

$result = mysql_query("SELECT * FROM `{$table}`", $link);
$num_rows = mysql_num_rows($result);

if($num_rows>0){
$vals = Array(); $z=0;
for($i=0; $i<$num_rows; $i++){
$items = mysql_fetch_row($result);
$vals[$z]="(";
for($j=0; $j<count($items); $j++){
if (isset($items[$j])) { $vals[$z].= "'".mysql_real_escape_string( $items[$j], $link )."'"; } else { $vals[$z].= "NULL"; }
if ($j<(count($items)-1)){ $vals[$z].= ","; }
}
$vals[$z].= ")"; $z++;
}
$data.= "INSERT INTO `{$table}` VALUES ";
$data .= " ".implode(";\nINSERT INTO `{$table}` VALUES ", $vals).";\n";
}
}
mysql_close( $link );
return $data;
}






نحوه استفاده از تابع:





$backup_file = 'db-backup-'.time().'.sql';

// get backup
$mybackup = backup_tables("myhost","mydbuser","mydbpasswd","mydatabase","*");

// save to file
$handle = fopen($backup_file,'w+');
fwrite($handle,$mybackup);
fclose($handle);






توضیح اینکه اسامی جداول مورد نظر خودتون رو با علامت "," از هم جدا کنید،اگر میخواید تمام جداول رو داشته باشید که مشخصه "*" رو بگذارید.

منبع (http://stackoverflow.com/questions/13659534/backup-mysql-tables-with-php)