PDA

View Full Version : بکاپ سریع از دیتابیس های ومپ با انجین innoDB



M.Rahi
یک شنبه 19 شهریور 1391, 00:26 صبح
سلام
من چندتا دیتابیس توی wampServer دارم که انجین آنها innoDB است؛ حالا راهی هست که بشه سریع از همه دیتابیس ها یکجا بکاپ یا اکسپورت گرفت ؟
البته میدونید که اگر انجین آنها MyISAM بود به راحتی میشد پوشه های دیتابیس ها رو هرجا که بخوای کپی کرد!
اما با توجه به مزیت هایی که innoDB داره ترجیح میدم انجین رو تغییر ندم.
سایتهای خارجی هم که سر زدم این مورد خیلی نادر بود و نتایجی حاصل نشد!
دستورات cmd و این حرف ها هم جواب نداد!
دیگه میخواستم از تک تک دیتابیس ها اکسپورت بگیرم که یاد این سایت افتادم و گفتم قبلش بیام اینجا موضوع رو مطرح کنم تا اساتید با تجربه ای که اینجا هستند راه حلی نشون بدن.
(جهت تسریع در پاسخگویی، این تاپیک در انجمن MySQL هم ایجاد شده است)

ممنون

M.Rahi
یک شنبه 19 شهریور 1391, 20:33 عصر
دوستان هیچکس تا حالا نشده که بخواد از کل دیتابیس های ومپ بک آپ بگیره ؟!
گفتم تا الان حداقل یکی جواب داده!!
طوری نیست، از همشون اکسپورت میگیرم بعد هر دیتابیس جدیدی که ساختم همون لحظه ازش اکسپورت میگیرم تا تعدادشون رفت بالا وقتگیر نشه!
اینو گفتم که اگه یکی مثل من راه حلی پیدا نکرد بدونه آخرش دیگه این یکی هست :))

azowghi
یک شنبه 19 شهریور 1391, 21:33 عصر
دوستان هیچکس تا حالا نشده که بخواد از کل دیتابیس های ومپ بک آپ بگیره ؟!
گفتم تا الان حداقل یکی جواب داده!!
طوری نیست، از همشون اکسپورت میگیرم بعد هر دیتابیس جدیدی که ساختم همون لحظه ازش اکسپورت میگیرم تا تعدادشون رفت بالا وقتگیر نشه!
اینو گفتم که اگه یکی مثل من راه حلی پیدا نکرد بدونه آخرش دیگه این یکی هست :))


سلام دوست عزیز
چرا اینقدر ناامیدی

اینم راه حل :


function backup_tables($host,$user,$pass,$name,$tables)
{
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
$return = "";

// Get all of the tables
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
if (is_array($tables)) {
$tables = explode(',', $tables);
}
}

// Cycle through each provided table
foreach($tables as $table) {
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);



// Second part of the output – create table
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return .= "\n\n" . $row2[1] . ";\n\n";

// Third part of the output – insert values into new table
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] = preg_replace("#\n#","\\n",$row[$j]);
if (isset($row[$j])) {
$return .= '"' . $row[$j] . '"';
} else {
$return .= '""';
}
if ($j<($num_fields-1)) {
$return.= ',';
}
}
$return.= ");\n";
}
}
$return.="\n\n\n";
}

// Generate the filename for the sql file
$filess = 'dbbackup_'.date("d.m.Y_H").'.sql';

// Save the sql file
$handle = fopen($filess,'w+');
fwrite($handle,$return);
fclose($handle);

// Print the message
print("The backup has been created successfully. You can get the file <a href='$filess'>here</a>.<br>\n");

// Close MySQL Connection
mysql_close();
}

azowghi
یک شنبه 19 شهریور 1391, 21:34 عصر
برای بکاپ کلیه جداول اینطوری عمل کنید:


backup_tables('localhost','root','','database','*' );

M.Rahi
یک شنبه 19 شهریور 1391, 21:54 عصر
نا امیدی نیست برادر، تعجبه !
بابت کدی که گذاشتید ممنون اما این از کل جداول یک دیتابیس بک آپ میگیره؛ من میخوام از کل دیتابیس ها بک آپ بگیرم؛ با این کد مثل اکسپورت باید واسه تک تک دیتابیس ها اجرا کرد. فکر کنم منظورمو درست متوجه نشدید.

azowghi
یک شنبه 19 شهریور 1391, 22:09 عصر
خب با این کد این کار رو بکن:


mysql_connect('localhost','root','');
$result=mysql_query("show databases");
while($row=mysql_fetch_row($result)){

backup_tables('localhost','root','',$row[0],'*' );

}