PDA

View Full Version : بک آپ گیری از دیتابیس های بزرگ



ahmadflasher
جمعه 22 اردیبهشت 1391, 21:56 عصر
سلام. یه دیتا بیس دارم که یکی از جدولهاش حدود ۱/۵ میلیون رکورد داره نمی تونم بک آپ بگیرم (بازگردانی هم ... ). دوستان کسی برنامه ای میشناسه که بشه باهاش دیتابیس های بزرگ mysql رو backup & restore کرد.؟ واقعا بهش نیاز دارم . phpmyAdmin تو این زمینه خیلی ضعیفه.
اگه کسی روشی میدونه بگه ممنون می شم

MMSHFE
جمعه 22 اردیبهشت 1391, 22:04 عصر
این کد رو امتحان کنید (برای Backup گرفتن) :


<?php
function backup_db($host, $user, $pass, $name, $tables = '*') {
date_default_timezone_set('Asia/Tehran');

$return = '';

mysql_connect($host, $user, $pass) or die('Connection error');
mysql_select_db($name) or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');

if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
mysql_free_result($result);
}
else {
$tables = is_array($tables) ? $tables : explode(',', $tables);
}

foreach($tables as $table) {
$result = mysql_query('SELECT * FROM `'.$table.'`');
$num_fields = mysql_num_fields($result);
$return .= 'DROP TABLE IF EXISTS `'.$table.'`;'.PHP_EOL.PHP_EOL;
$row = mysql_fetch_row(mysql_query('SHOW CREATE TABLE `'.$table.'`'));
$return .= $row[1].';'.PHP_EOL.PHP_EOL;

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] = str_replace('\n', '\\n', $row[$j]);
if (isset($row[$j])) {
$return .= '\''.$row[$j].'\'';
}
else {
$return .= '\'\'';
}
if ($j < ($num_fields - 1)) {
$return .= ',';
}
}
$return .= ');'.PHP_EOL;
}
}
$return .= PHP_EOL.PHP_EOL.PHP_EOL;
}

$handle = fopen('db-backup-'.$name.'-'.date('Y,m,d-H,i,s').'.sql', 'w');
fwrite($handle, $return);
fclose($handle);
}
?>

مثال از نحوه استفاده:

backup_db('localhost', 'root', '', 'cms');
برای Restore هم اسکریپت ضمیمه شده رو بکار ببرین.
اگر احیاناً با خطای Script Timeout Error مواجه شدین، با قراردادن کد زیر در ابتدای اسکریپت، زمان اجرای اون رو افزایش بدین:

set_time_limit(600);
کد فوق باعث میشه تا 10 دقیقه اسکریپت اجازه اجرا داشته باشه.
موفق باشید.