क्या मैं फ़ाइलों की प्रतिलिपि बनाकर किसी MySQL डेटाबेस को कॉपी कर सकता हूँ? फाइलों में वास्तव में क्या होता है?


13

मैं MySQL डेटाबेस का उपयोग कर रहा हूं और उबंटू लिनक्स मशीन का उपयोग कर रहा हूं।

मेरे डेटाबेस नामित db_test, मैं उस पथ के अंतर्गत नोटिस /var/lib/mysql/db_test, वहाँ फ़ाइलें हैं साथ प्रत्यय .frm, .MYD, .MYIनिम्नलिखित की तरह:

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

प्रत्येक लगता है .frm, .MYD, .MYIफ़ाइलें समूह डेटाबेस में एक मेज के साथ मैप किया।

मेरे पास पूछने के लिए दो प्रश्न हैं:

  1. तीन फाइलें वास्तव में क्या कर रही हैं?

  2. यदि मैं पथ निर्देशिका के तहत एक नई निर्देशिका बनाता /var/lib/mysql/हूं db_test_2, और db_test_1निर्देशिका से प्रत्येक फ़ाइल की प्रतिलिपि बनाता हूं db_test_2, तो क्या यह एक नया डेटाबेस भी बनाएगा db_test_2जिसमें बिल्कुल उसी सामग्री (तालिकाओं) के रूप में है db_test_1?

क्या यह भौतिक रूप से डेटाबेस फ़ाइल चलती कार्रवाई कमांड-लाइन क्रियाओं के परिणामस्वरूप एक ही परिणाम बनाती है:

  1. डेटाबेस को db_test_1बाहर निकालें

  2. एक नया डेटाबेस बनाएँ db_test_2

  3. फिर db_test_1डेटाबेस को नए डेटाबेस में वापस डंप करें db_test_2?

यदि ऐसा है, तो यह प्रतीत होता है कि चलती हुई फाइलें बहुत तेज़ी से होती हैं, फिर mysqldumpडेटाबेस की प्रतिलिपि बनाने के लिए (या MySQL में एक DB से दूसरे DB में डेटा आयात करने के लिए)। इस पर कोई राय?

जवाबों:


5
  1. AFAIR, .frm विवरण-फ़ाइल है (जहाँ डेटाबेस तालिका स्ट्रेचर वर्णित है), .MYD डेटा के साथ फ़ाइल है। MYI इंडेक्स के साथ फ़ाइल है।

  2. हां, नकल ज्यादा तेज होगी। लेकिन एक समस्या है: यह परमाणु नहीं है। उच्च लोड प्रतिलिपि बनाई गई फ़ाइलों के अंतर्गत असंगत होगा और शायद बिल्कुल भी दूषित हो। खासकर यदि आप कुछ और 'स्मार्ट' इंजन का उपयोग कर रहे हैं जैसे कि InnoDB।

संपादित करें: ps आप इन फ़ाइलों को सुरक्षित रूप से कॉपी कर सकते हैं, लेकिन इससे पहले कि आप mysql सर्वर को बंद कर दें।


4

आपके पास एक cmd- लाइन टूल है जो ठीक यही करता है: mysqlhotcopy

यह ठीक wy myisam तालिकाओं पर काम करता है, लेकिन InnoDb तालिकाओं के साथ नहीं।

यदि आपने अपने सर्वर को lvm के साथ कॉन्फ़िगर किया है, और अपने / var / lib / mysql को एक समर्पित वॉल्यूम पर यहां रखा है, तो जिस तरह से मैं बहुत तेजी से और गैर-अवरुद्ध तरीके से आपके सभी डेटाबेस को बैकअप करने की सलाह देता हूं:

mysql -U root -p
  > flush tables with read lock;

यह आपके सभी तालिकाओं को डिस्क और किसी भी आर / डब्ल्यू ऑपरेशन को ब्लॉक करता है

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

आपके कॉन्फ़िगरेशन के अनुकूल होने की आवश्यकता है, यह आपके डेटाबेस के फाइल सिस्टम का एक स्नैपशॉट बनाता है। इसमें समय नहीं लगता है

  > unlock tables;

यह किया जाता है, आर / डब्ल्यू ऑपरेशन फिर से शुरू किया जाता है।

अब आप माउंट / देव / vg_myserver / lvMysql_snap कर सकते हैं और अपने डेटाबेस का एक टार संग्रह बना सकते हैं!


यह DB बैकअप करने के लिए एक तेज़ तरीके की तरह लगता है। लेकिन उस स्नैपशॉट को वापस स्विच करने के बारे में क्या यह फिर से मेरा लाइव डेटाबेस बन जाता है? मैं वास्तव में इस बारे में चिंतित हूं। मैं mysqldumpअपने db को 2 सेकंड से कम में कर सकता हूं। इसे 5-10 मिनट लगते हुए, इसे धीमा करना है।
ब्यूटेल बटुक

हाल के डिस्ट्रोस lvm स्नैपशॉट्स को मूल में वापस लाया जा सकता है, लेकिन यह संभव नहीं है कि आप बैकअप बैकअप प्रबंधित करने के लिए क्या चाहते हैं।
ओलिवियर एस

Mysqlhotcopy के बारे में: "इस उपयोगिता को MySQL 5.6.20 में दर्शाया गया है और MySQL 5.7 में हटा दिया गया है" से: [ dev.mysql.com/doc/refman/5.6/en/mysqlhotcn.html]
zeusstl

0

यह MyISAM के लिए काम करेगा, लेकिन InnoDB के लिए नहीं। Https://serverfault.com/a/367321/57569 देखें

उस उत्तर से, InnoDB के बारे में:

यदि आप .frm और .ibd फ़ाइल को कॉपी करने के बारे में सोच रहे हैं, तो आप चोट पहुँचाने की दुनिया के अनुरूप हैं। एक InnoDB तालिका की .frm और .ibd फ़ाइल की प्रतिलिपि बनाना केवल तभी अच्छा होता है जब आप गारंटी दे सकते हैं कि .ibd फ़ाइल की आईडी आईडी ibdata फ़ाइल के मेटाडेटा में टेबलस्पेस आईडी प्रविष्टि के साथ बिल्कुल मेल खाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.