के अनुसार MySQL 5.0 प्रमाणन अध्ययन गाइड , अध्याय 32 धारा 32.3.4, पेज 456,457 वर्णन बाइनरी पोर्टेबिलिटी के लिए उपयुक्त परिस्थितियां जो बाहर निम्नलिखित लाने:
बाइनरी पोर्टेबिलिटी महत्वपूर्ण है यदि आप एक बाइनरी बैकअप लेना चाहते हैं जो एक मशीन पर बनाया गया था और इसे दूसरी मशीन पर उपयोग करना है जिसमें एक अलग वास्तुकला है। उदाहरण के लिए, बाइनरी बैकअप का उपयोग करना एक तरह से डेटाबेस को एक MySQL सर्वर से दूसरे में कॉपी करना है।
MyISAM के लिए, बाइनरी पोर्टेबिलिटी का मतलब है कि आप किसी MySQL सर्वर से एक MySQL सर्वर से दूसरी मशीन पर सीधे एक अलग मशीन पर कॉपी कर सकते हैं और दूसरा सर्वर टेबल तक पहुंच बना सकेगा।
InnoDB के लिए, द्विआधारी पोर्टेबिलिटी का मतलब है कि आप एक मशीन पर एक MySQL सर्वर से एक अलग मशीन पर सीधे दूसरे सर्वर पर टेबलस्पेस फ़ाइलों को कॉपी कर सकते हैं और दूसरा सर्वर टेबलस्पेस तक पहुंचने में सक्षम होगा। डिफ़ॉल्ट रूप से, सर्वर द्वारा प्रबंधित सभी InnoDB तालिकाओं को एक साथ टेबलस्पेस में संग्रहीत किया जाता है, इसलिए टेबलस्पेस का पोर्टेबिलिटी एक फ़ंक्शन है कि क्या सभी व्यक्तिगत InnoDB टेबल पोर्टेबल हैं। अगर एक टेबल भी पोर्टेबल नहीं है, तो न तो टेबलस्पेस है।
MyISAM तालिकाओं और InnoDB टेबलस्पेस दो स्थितियों के मिलने पर एक होस्ट से दूसरे में बाइनरी पोर्टेबल हैं:
- दोनों मशीनों में दो-पूरक पूर्णांक अंकगणित का उपयोग करना चाहिए
- दोनों मशीनों में IEEE फ़्लोटिंग-पॉइंट फॉर्मेट का उपयोग करना चाहिए वरना टेबल में फ़्लोटिंग-पॉइंट कॉलम (FLOAT या DOUBLE) नहीं होने चाहिए
व्यवहार में, उन दो स्थितियों में थोड़ा प्रतिबंध है। आधुनिक हार्डवेयर पर दो-पूरक पूर्णांक अंकगणित और IEEE फ़्लोटिंग-पॉइंट प्रारूप आदर्श हैं। InnoDB बाइनरी पोर्टेबिलिटी के लिए एक तीसरी शर्त यह है कि आपको टेबल और डेटाबेस के लिए लोअरकेस नाम का उपयोग करना चाहिए। ऐसा इसलिए है क्योंकि InnoDB इन नामों को विंडोज पर निचले हिस्से में आंतरिक रूप से (इसके डेटा शब्दकोश में) संग्रहीत करता है। लोअरकेस नामों का उपयोग करना विंडोज और यूनिक्स के बीच बाइनरी पोर्टेबिलिटी की अनुमति देता है, लोअरकेस नामों के उपयोग को मजबूर करने के लिए, आप निम्न लाइनों को एक विकल्प फ़ाइल में रख सकते हैं:
[mysqld]
lower_case_table_names=1
यदि आप प्रति-तालिका तालिकाओं का उपयोग करने के लिए InnoDB को कॉन्फ़िगर करते हैं, तो बाइनरी पोर्टेबिलिटी के लिए शर्तों को बढ़ाया जाता है, जिसमें InnoDB तालिकाओं के लिए .ibd फाइलें भी शामिल हैं। (साझा तालिकाओं के लिए स्थितियां अभी भी तालियां बजाती हैं क्योंकि इसमें डेटा शब्दकोश शामिल है जो सभी InnoDB तालिकाओं के बारे में जानकारी संग्रहीत करता है।)
यदि बाइनरी पोर्टेबिलिटी के लिए शर्तें संतुष्ट नहीं हैं, तो आप कुछ पाठ प्रारूप (उदाहरण के लिए, mysqldump के साथ) का उपयोग करके उन्हें गंतव्य सर्वर में पुनः लोड करके MyISAM या InnoDB तालिकाओं को एक सर्वर से दूसरे में कॉपी कर सकते हैं।
व्यक्तिगत टेबल को स्थानांतरित करने के लिए स्टोरेज इंजन पर आधारित दो प्रमुख तरीके हैं।
दिए गए उदाहरण के लिए हम निम्नलिखित मानेंगे:
- डेटादिर / var / lib / mysql है
- डेटाबेस को mydb कहा जाता है
- mydb डेटाबेस में तालिका को mytable कहा जाता है ।
MyISAM टेबल
यदि mydb.mytable MyISAM स्टोरेज इंजन का उपयोग करता है, तो तालिका भौतिक रूप से तीन अलग-अलग फ़ाइलों के रूप में प्रकट होगी
- /var/lib/mysql/mydb/mytable.frm ((.frm फ़ाइल)
- /var/lib/mysql/mydb/mytable.MYD (.MYD फ़ाइल)
- /var/lib/mysql/mydb/mytable.MYI (.MYI फ़ाइल)
.Fr में टेबल संरचना होती है
। एमवाईडी में टेबल डेटा होता है
। एमवाईआई में टेबल इंडेक्स पेज होता है
इन फ़ाइलों को अन्योन्याश्रित रूप से mysql में तार्किक दृष्टिकोण से तालिका का प्रतिनिधित्व करने के लिए उपयोग किया जाता है। चूंकि इन फ़ाइल में कोई और तार्किक संघ नहीं जुड़ा है, इसलिए तालिका को एक DB सर्वर से दूसरे में माइग्रेट करना। आप इसे विंडोज सर्वर से लिनक्स सर्वर या मैकओएस पर भी भेज सकते हैं। बेशक, आप mysql को बंद कर सकते हैं और 3 टेबल फ़ाइलों की प्रतिलिपि बना सकते हैं। आप निम्नलिखित चला सकते हैं:
LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;
केवल पढ़ने के लिए तालिका रखने के लिए एक ssh सत्र में और 24 घंटे के लिए ताला दबाए रखें। एक सेकंड बाद, दूसरे ssh सत्र में प्रतिलिपि निष्पादित करें। फिर 24 घंटे के लॉक के साथ mysql सेशन को मारें। आपको 24 घंटे इंतजार करने की आवश्यकता नहीं है।
InnoDB टेबल
प्रमाणन पुस्तक से पूर्वोक्त उद्धरण के आधार पर, कई कारक हैं जो एक विशिष्ट InnoDB तालिका का बैकअप लेने के तरीके को नियंत्रित करते हैं। सादगी, स्पष्टता, और संक्षिप्तता के लिए, बस तालिका के सही बिंदु-समय डंप करने के लिए -सिंगल-लेन-देन मापदंडों का उपयोग करके वांछित तालिका के mysqldump प्रदर्शन करें। अगर आप सिर्फ एक टेबल चाहते हैं तो खुद को InnoDB शब्दार्थ के साथ cncern करने की आवश्यकता नहीं है। आप उस डंपफाइल को अपने चयन के किसी भी MySQL सर्वर पर पुनः लोड कर सकते हैं।
चूंकि दो सवालों को यहां (jcolebrand) मर्ज किया गया था : EDIT
यदि आप कुछ धीमे DB प्रदर्शन के साथ जीने के लिए तैयार हैं, तो आप पुराने सर्वर (सर्वरए) से नए सर्वर (सर्वरबी) तक की रस्सियों की एक श्रृंखला का प्रदर्शन कर सकते हैं, जबकि mysql अभी भी सर्वरए पर चल रहा है।
चरण 01) ServerB पर Mysql का वही संस्करण स्थापित करें जो ServerA के पास है
चरण 02) सर्वरए पर, SET GLOBAL innodb_max_dirty_pages_pct = 0;
mysql से और लगभग 10 मिनट चलाएं (यह इनो बफर बफर से गंदे पृष्ठों को शुद्ध करता है। यह mysql शटडाउन को तेज़ी से करने में भी मदद करता है) यदि आपका डेटाबेस सभी MyISAM है, तो आप इस चरण को छोड़ सकते हैं।
चरण 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql
चरण 04) चरण 03 को तब तक दोहराएं जब तक कि rsync 1 मिनट से कम न हो जाए
स्टेप 05) service mysql stop
सर्वरए पर
चरण 06) एक और rsync करें
चरण 07) scp ServerA:/etc/my.cnf ServerB:/etc/
चरण 08) service mysql start
सर्वरबी पर
service mysql start
सर्वर 08 पर वैकल्पिक (वैकल्पिक)
कोशिश करो !!!
चेतावनी
आप इस तरह एक प्रतिकृति गुलाम बना सकते हैं। बस मास्टर /etc/my.cnf में सर्वर-आईडी को आसानी से सेट करने के लिए याद रखें और दास /etc/my.cnf में सर्वर-आईडी के लिए एक अलग संख्या