راهنمای گرفتن بک آپ از دیتابیس به صورت اوتو ماتیک

خیلی از افراد هستن که سایتشون هک میشه و مشکلات خیلی زیادی با گرفتن بک آپ دارن.
کلا گرفتن بک آپ کار خسته کننده و تکراریه به خصوص اینکه ممکنه شما یه هفته بخواید مسافرت برید و فرصت نکنید به سایت سر بزنید در نتیجه گرفتن بک آپ اوتو ماتیک یه نیاز اساسی هستش این بک آپ این امکان رو داره که بک آپ سایت رو به ایمیل شما ارسال کنه و یا در یک شاخه در Home ذخیره کندش
از مدیران انجمن میخوام این تاپیک را مهم قرار بدن تا همه استفاده کنن
تذکر مهم : این داکیومنت برای سرور لینوکس نوشته شده برای سرور ویندوز کار نخواهد کرد

برای گرفتن بک آپ اوتو ماتیک کار های زیر را انجام بدید:
1- ساختن یک شاخه در home :
/home/username/backup_mysql
این شاخه رو با همین اسم درست کنید. لازم به گفتن نیست که username همون یوزر سی پنل یا ftp هستش
نکته: این شاخه خارج از شاخه public_html قرار میگیره و دسترسی از طریق بروزر بهش وجود نداره

2- Chmod شاخه رو 644 قرار بدید.

3- درست کردن یوزر و پس ورد برای دیتابیسی که میخواهید بک آپ آن را بگیرید:

توجه: اگر یوزر و پس ورد دیتابیس را دارید از این گزینه صرف نظر کنید.

3-1- به cpanel -->MySQLDatabase برید
3-2- Create a new user - password رو بزنید.
3-3- روی Add User کلیک کنید.
3-4- روی Add User to Db بزنید و یوزر رو به دیتابیسی که میخواهید بک آپ بگیرید اختصاص بدید.

4- ساختن فایل backup_mysql.php:
با یک php editor یک فایل جدید باز کنید و کد زیر را با اسم backup_mysql.php ذخیره کنید:

PHP:
<?php 

$dbhost = 'localhost';    
$dbuser = 'username_backupaccountname';            
$dbpass = 'yourpassword';                  
$dbname = 'username_dbnametobackup'; 
$savepath = "/home/username/backup_mysql"; 

$send_email = "yes";   
$to  = "ausername[at]yourdomain.com";                
$from = "anotherusername[at]yourdomain.com";   
$senddate = date("j F Y"); 
$subject = "Full backup of $dbname completed - $senddate";           
$message = "See attached zip file for mysqldump of $dbname"; 

$use_gzip = "yes";     
$remove_sql_file = "yes";            
$remove_gzip_file = "yes";    

// Do not Modify below this line! It will void your warranty!  Nah, go crazy go nuts 

$date = date("mdy-hia"); 
$filename = "$savepath/$dbname-$date.sql";     
passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename"); 
     
if($use_gzip=="yes"){ 
    $zipline = "tar -czf ".$dbname."-".$date."_sql.tar.gz $dbname-$date.sql"; 
    shell_exec($zipline); 
} 
if($remove_sql_file=="yes"){ 
    exec("rm -r -f $filename"); 
} 
     
if($use_gzip=="yes"){ 
    $filename2 = "$savepath/".$dbname."-".$date."_sql.tar.gz"; 
} else { 
    $filename2 = "$savepath/$dbname-$date.sql"; 
} 
     
     
if($send_email == "yes" ){ 

    $fileatt_type = filetype($filename2); 
    $fileatt_name = "".$dbname."-".$date."_sql.tar.gz"; 
         
    $headers = "From: $from"; 
         
    // Read the file to be attached ('rb' = read binary) 
    $file = fopen($filename2,'rb'); 
    $data = fread($file,filesize($filename2)); 
    fclose($file); 
     
    // Generate a boundary string 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
     
    // Add the headers for a file attachment 
    $headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\""; 
     
    // Add a multipart boundary above the plain message 
    $message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" . 
    $message . "\n\n"; 
     
    // Base64 encode the file data 
    $data = chunk_split(base64_encode($data)); 
     
    // Add file attachment to the message 
    $message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$fileatt_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$fileatt_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" . 
        $data . "\n\n" ."--{$mime_boundary}--\n"; 
     
    // Send the message 
    $ok =@mail($to, $subject, $message, $headers); 
    if ($ok) { 
        echo "<h4><center>Database backup created and sent! File name $filename2</center></h4>"; 
    } else { 
        echo "<h4><center>Mail could not be sent. Sorry!</center></h4>"; 
    } 
} 
     
     
if($remove_gzip_file=="yes"){ 
    exec("rm -r -f $filename2"); 
} 

?>

سپس این خط ها را تغییر دهید به گونه ای که مشخصات دیتابیس و یوزر و پس ورد شما قرار بگیرد:
PHP:
$dbuser = 'username_backupaccountname'; 
$dbpass = 'yourpassword'; 
$dbname = 'username_dbnametobackup'; 
$savepath = "/home/username/backup_mysql";
$to = "ausername[at]yourdomain.com"; 
$from = "anotherusername[at]yourdomain.com";

خط های زیر را بنا به میل خود تغییر دهید که عبارت از نام و متن ایمیل ارسالی به شماست که حاوی بک آپ است :
PHP:
$subject = "Full backup of $dbname completed - $senddate"; 
$message = "See attached file for mysqldump of $dbname";

در خط های زیر yes و no را بنا به موردی که میخواهید انتخاب کنید:

PHP:
$send_email = "yes";   

$use_gzip = "yes";     
$remove_sql_file = "yes";            
$remove_gzip_file = "yes";

5- فایل backup_mysql.php را در شاخه ای که در شماره 1 ساختید آپلود کنید.

6- Chmode فایل backup_mysql.php رو روی 644 قرار بدید

7- اجرای اوتومایتک فایل backup_mysql.php در زمان های مشخص:

1-7- برید به cPanel --> Cron Jobs --> Advanced ( Unix Style )
2-7- یک ایمیل برای کرون جاب وارد کنید ( هر ایمیل خواستید موردی ندارد فقط باید ایمیلی وارد شود)
7-3- مشخص کنید که در چه زمان هایی فایل اجرا شود مثلا اگر میخواهید روزی یک بک آپ بگیرید کافی است ساعت و دقیقه اجرای بک آپ را مشخص کنید و بقیه گزینه ها را خالی رها کنید.
7-4- دستور را به صورت زیر در روبروی زمان جرا وارد کنید:
کد:
php /home/username/backup_mysql/backup_mysql.php > /home/username/backup_mysql/backup_mysql.log

7-5- رویCommit changes کلیک کنید تا تغییرات قرار گیرند.

این مطلب رو از فروم هاستینگ سایتم یاد گرفتم و اینجا هم نوشتم تا همه استفاده کنن
 
آخرین ویرایش توسط مدیر:

Mikhak

Active Member
مرسي دنباله يه همچين چيزي بودم حالا رفتم امتحان كنم
------
سينا
 

Mikhak

Active Member
آقا اين قسمتي كه گفتي بريم توي كنترل پنل سايت توي كنترل پنل سايت من نبود(قسمت 7-1) :cry: :(
همون طور كه گفته بوديد سرور من لينوكس است.
لطفا كمك كنيد
---------------
سينا
 

Majid

مدیر سایت
عضو کادر مدیریت
مقاله خيلي خوبي نوشتي..
دمت گرم

مجيد
 
mikhak گفت:
آقا اين قسمتي كه گفتي بريم توي كنترل پنل سايت توي كنترل پنل سايت من نبود(قسمت 7-1) :cry: :(
همون طور كه گفته بوديد سرور من لينوكس است.
لطفا كمك كنيد
---------------
سينا

کنترل پنل ها همه کرون جاب دارن این ربطی به نوع سرور نداره
سرور شما از این فری هاست یا نه
حالا من میگردم ببینم بدون اینکه کرون جاب در سی پنل باشه امکانش هست یا نه
البته تو میتونی دستی این فایل php رو بریزی یک جا و آدرس ها رو عوض کنی و اجراش کنی دستی باید در اون صورت هم کار کنه

ار بقیه هم ممنون لطف دارید خلاصه اوپن سورس همینه دیگه
 

izone

Active Member
عشق مدرن گرامي

دست شما درد نكنه. كمك خيلي بزرگي كردي. چشم براه ديگر مقالات خوب شما هم هستيم.

شاد و سربلند باشيد.
 

NabiKAZ

Well-Known Member
سلام
دست شما درد نكنه
چيه كه مجيد هم تاييدش كرد و حتي تو صفحه اول سايت گذاشته :cool:


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

Majid

مدیر سایت
عضو کادر مدیریت
يك پيشنهادي هم كه من دارم اينه كه ساعاتي رو كه ميخواين اختصاص بدين براي بك آپ گيري سعي كنيد ساعات خلوت سايتتون باشه.. مثلا اوايل صيح... چون اين كاري زيادي از CPU سرور ميكشه و سرعت مياد پايين

موفق باشيد

مجيد
 

Mikhak

Active Member
آقا يكي بگه اين کرون جاب چيه ؟

من هر چي توي كنترل پنل سايت كشتم پيدا نكردم ممكنه كه اسمش فرق كنه (اصلا به غير از اين كار به چه دردي ميخوره)

در ضمن من هاستم پولي لطفا كمك كنيد تا من هم بتونم از اين بك آپ گيري اتوماتيك استفاده كنم
----------------------
سينا
 

izone

Active Member
دوست گرامي.

Cronjob برنامه اي در سرور هست كه شما توسط آن ميتوانيد برنامه يا اسكريپتي را در زمان تعيين شده توسط شما راه اندازي كنيد. مانند همينكاري كه دوستمان در اينجا توضيح دادند.

براي نمونه شما اگر ميخواهيد يك فايلي را در زمانهاي معيين در سرور (هاست) ران كنيد از كرون جاب براي اينكار بهره ميگيريد.

اگر شما اينرا در هاست خودتان پيدا نميكنيد از مدير هاست بخواهيد شما را راهنمايي كند.

شاد و پيروز باشيد
 
آقا دمت گرم عالي بوودَ ببينم اينو بدون سي پنل هم ميشه انجام داد؟ ميشه مثلأ يك ماژول بنویسیم که بعد از مثلأ 200 بار بازدید از سایت اینکارو بکنه؟ یا نه؟ مثلأ یک شمارنده براش در نظر بگیریم! اینجوری دیگه دیتابیس رو هی بک آپ نمی گیره( این برای سایت های کوچیک خوبه مثلأ!)
 
ببینید یه فایل php v رو به هیچ صورتی نمیشه در زمان های معینی کاری کرد که خودش اجرا بشه در نتیجه کار کرون جاب فقط همینه که اسکریپت رو اجرا میکنه شما میتونید آدرس ها ,و فایل ها رو درون public_html بدید. و فقط کافیه هر وقت خواستید فایل php ؤو دستی اجرا کنید.

برای سایت هایی که دیتابیس بزرگ دارند اگه روی gz قرار بدن مثلا برای یه دیتابیس 100 مگی 6 مگ ذخیره میشه و اگه هر 5-6 روزی بره و اضافی ها رو پاک کنه حله و میتونه هم به صورت ایمیل بگیره
 

meygol

New Member
خيلي جالب بو د .

عشق مدرن مي شه كاري كرد كه بك آپ رو يه سرور يا هاست ديگه گرفته بشه .
 
meygol گفت:
خيلي جالب بو د .

عشق مدرن مي شه كاري كرد كه بك آپ رو يه سرور يا هاست ديگه گرفته بشه .

منظورت اینه که فایل بک آپ رو در یک سرور دیگه ذخیره کنه؟ فکر کنم این کار شدنی باشه البته مطمانا باید روی اون هاست دیگه هم دسترسی داشته باشید دیگه
مورد دیگه اینکه اگه فایل رو در public_html قرار میدید و از کرون جاب استفاده نمیکنید چون یوزر و پسورد دیتابیس و نام دیتابیس در این فایل نوشته شده سکیوریتی نداره در نتیجه هر وقت بک آپ گرفتید فایل رو وردارید و هر وقت خواستید بک آپ بگیرید دوباره بزاریدش
 

izone

Active Member
عشق مدرن جان

من امروز تونستم اينكار را بكنم. مو به مو برابر دستورات شما عمل كردم. ولي يك error.log داد كه نوشته :

کد:
[17-Nov-2004 01:46:00] PHP Parse error:  parse error, unexpected '[' in /home/XXX/backup_mysql/backup_mysql.php on line 72

البته بجاي اون XXX نام سايتم را نوشته است.

حالا ميگيد چيكار كنم؟

ممنون از پاسخ شما.
 

جدیدترین ارسال ها

بالا