2009-08-18 15 views
6

मेरे पास लगभग 1.7 जीबी का MySQL डेटाबेस है। मैं आमतौर पर mysqldump का उपयोग कर इसे वापस लेता हूं और इसमें लगभग 2 मिनट लगते हैं। हालांकि, मैं निम्नलिखित प्रश्नों के उत्तर जानना चाहूंगा:बैकअप MySQL डेटाबेस

  1. mysqldump ब्लॉक डेटाबेस के लिए पढ़ सकते हैं और/या संचालन बारे में है? क्योंकि एक लाइव परिदृश्य में, मैं बैक अप लेने के दौरान उपयोगकर्ताओं को डेटाबेस का उपयोग करने से अवरुद्ध नहीं करना चाहता हूं।

  2. मेरे लिए एक सप्ताह में एक बार कहने के लिए केवल WHOLE डेटाबेस बैकअप करना आदर्श होगा, लेकिन मध्यवर्ती दिनों में केवल एक तालिका का बैक अप लेना होगा क्योंकि अन्य लोग नहीं बदलेंगे। क्या इसको हासिल करने के लिए कोई रास्ता है?

  3. क्या mysqlhotcopy इन उद्देश्यों के लिए एक बेहतर विकल्प है?

उत्तर

2
  1. नहीं, आप --lock-तालिकाओं का उपयोग बंद किया जा करने के लिए टेबल निर्दिष्ट कर सकते हैं, लेकिन आप किसी भी तालिका फिर पूरे डीबी समर्थित है निर्दिष्ट नहीं करते हैं वे डिफ़ॉल्ट
  2. से नहीं कर रहे हैं , या आप तालिकाओं की एक सूची निर्दिष्ट कर सकते हैं: लेकिन मैं MySQL डीबीएस के एक नंबर, चलाने के लिए इसका इस्तेमाल किया नहीं खेद

  3. mysqldump [विकल्प] db_name [टेबल], कुछ 1.7GB और मैं की तुलना में कुछ छोटे बड़े मेरे सभी बैकअप के लिए mysqldump का उपयोग करें ।

+0

धन्यवाद मैक्रो! उपयोगी जानकारी के लिए – TMM

5

mysqlhotcopy कुछ मामलों readlock खो दिया है, और InnoDB तालिकाओं के साथ काम नहीं करता है में काम नहीं करता।

mysqldump अधिक उपयोग किया जाता है क्योंकि यह सभी प्रकार की टेबल का बैक अप ले सकता है।

MySQL प्रलेखन

mysqlhotcopy से एक पर्ल स्क्रिप्ट है कि मूल रूप से लिखा और टिम Bunce के योगदान किया गया है। यह डेटाबेस बैकअप को जल्दी से बनाने के लिए लॉक टेबल, फ्लश टैबलेट और सीपी या एसपीपी का उपयोग करता है। यह डेटाबेस या एकल तालिकाओं का बैकअप बनाने का सबसे तेज़ तरीका है, लेकिन इसे केवल उसी मशीन पर चलाया जा सकता है जहां डेटाबेस निर्देशिका स्थित हैं। mysqlhotcopy केवल MyISAM और ARCHIVE टेबल का बैक अप लेने के लिए काम करता है। यह यूनिक्स और नेटवेयर

mysqldump क्लाइंट मूल रूप से इगोर रोमनेंको द्वारा लिखित एक बैकअप प्रोग्राम है। इसका उपयोग किसी डेटाबेस या डेटाबेस के संग्रह को बैकअप या किसी अन्य SQL सर्वर में स्थानांतरित करने के लिए किया जा सकता है (आवश्यक रूप से एक MySQL सर्वर नहीं)। डंप में आम तौर पर टेबल बनाने, इसे पॉप्युलेट करने या दोनों को बनाने के लिए SQL कथन शामिल होते हैं। हालांकि, mysqldump का उपयोग सीएसवी, अन्य सीमांकित टेक्स्ट, या एक्सएमएल प्रारूप में फ़ाइलों को उत्पन्न करने के लिए भी किया जा सकता है।

अलविदा।

+0

धन्यवाद आरआरयूजेड! – TMM

3

1) mysqldump केवल तब ब्लॉक करता है जब आप इसे पूछते हैं (एक --lock-table, --lock-all-table, --single-creding में से एक)। लेकिन यदि आप चाहते हैं कि आपका बैकअप सुसंगत रहे तो mysqldump ब्लॉक (- सिंगल-लेन-देन या --lock-all-table का उपयोग करके) या आपको एक असंगत डेटाबेस स्नैपशॉट मिल सकता है। नोट: - सिंगल-लेनदेन केवल इनो डीबी के लिए काम करता है।

2) सुनिश्चित करें, बस टेबल आप डेटाबेस नाम के बाद ऊपर का समर्थन करना चाहते हैं की गणना:

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ... 

वैकल्पिक रूप से आप टेबल बाहर कर सकते हैं आप नहीं करना चाहते हैं:

mysqldump ... --ignore-table=TABLE1 --ignore-table=TABLE2 .. DATABASE 

तो आप सप्ताह में एक बार एक संपूर्ण डेटाबेस डंप कर सकते हैं और दिन में केवल एक बार बदलते तालिकाओं का बैकअप ले सकते हैं।

3) mysqlhotcopy आंतरिक रूप से MyISAM तालिकाओं पर काम करता है और अधिकांश अनुप्रयोगों में आप InnoDB के साथ बेहतर होते हैं। Innodb टेबल के हॉटबैक के लिए वाणिज्यिक उपकरण (काफी महंगा) हैं। हाल ही में इस उद्देश्य के लिए नया ओपनसोर्स भी है - Xtrabackup

इसके अलावा, प्रक्रिया को स्वचालित करने के लिए आप astrails-safe का उपयोग कर सकते हैं। यह mysqldump और टैर के साथ फाइल सिस्टम के साथ डेटाबेस बैकअप का समर्थन करता है। + एन्क्रिप्शन + एस 3, + कई अन्य उपहारों पर अपलोड करें। अभी तक कोई xtrabackup समर्थन नहीं है, लेकिन अगर आपको इसकी आवश्यकता है तो इसे जोड़ना आसान होना चाहिए।

+0

उपयोगी उत्तर @ विटाली कुशनर के लिए धन्यवाद – kta

3

आपके सेटअप में एक MySQL गुलाम जोड़ना आपको उत्पादन डेटाबेस को लॉक किए बिना लगातार बैकअप लेने की अनुमति देगा।

दास जोड़ना आपको परिवर्तनों का बाइनरी लॉग भी देता है। जब आप डंप लेते थे तो डंप डेटाबेस का एक स्नैपशॉट होता है। द्विआधारी लॉग में सभी बयान शामिल हैं जो डेटास्टैम्प के साथ डेटा को संशोधित करते हैं।

यदि आपको दिन के मध्य में विफलता हो रही है और दिन में एक बार आपके केवल बैकअप लेते हैं, तो आप आधे दिन के काम खो चुके हैं। बाइनरी लॉग और mysqldump के साथ, आप पिछले दिन से बहाल कर सकते हैं और विफलता के बिंदु पर आगे लॉग 'प्ले' कर सकते हैं।

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

तो एलवीएम डिस्क के साथ एक linux सर्वर या वीएसएस के साथ एक खिड़कियों सर्वर पर आपके चल MySQL, आप Zamanda की जांच करनी चाहिए। यह डिस्क पर डेटा के बाइनरी diffs लेता है, जो डेटाबेस के एक पाठ डंप की तुलना में पढ़ने और बहाल करने के लिए बहुत तेज़ है।

0

mysql और PHP इस यह भी निकाल देंगे फ़ाइलों की कोशिश के लिए n के बाद के दिनों

आपके उत्तर के लिए
$dbhost = 'localhost'; 
$dbuser = 'xxxxx'; 
$dbpass = 'xxxxx'; 
$dbname = 'database1'; 
$folder = 'backups/'; // Name of folder you want to place the file 
$filename = $dbname . date("Y-m-d-H-i-s") . ".sql"; 
$remove_days = 7; // Number of days that the file will stay on the server 



$command="mysqldump --host=$dbhost --user=$dbuser --password=$dbpass $dbname > $folder$filename"; 
system($command); 

$files = (glob("$folder"."*.sql")); 

    foreach($files as $file) { 
     if(is_file($file) 
     && time() - filemtime($file) >= $remove_days*24*60*60) { // 2 days = 2*24*60*60 
      unlink($file); 
      echo "$file removed \n"; 
     } else { echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "\n"; } 
    } 
संबंधित मुद्दे