जवाबों:
नकल MyISAM के लिए बहुत सरल है और पूरी तरह से 100% जोखिम भरा है (आत्महत्या के करीब) InnoDB के साथ।
अपने प्रश्न से, आप लाए
cp /db1/mytable.frm /db2/mytable.frm
यह करना ठीक है। हालाँकि, आप सिर्फ .frm को स्थानांतरित नहीं कर सकते। आपको सभी घटकों को स्थानांतरित करना होगा। आप सवाल से, चलो db1.mytable नामक एक तालिका लेते हैं। एक सामान्य स्थापना में, तालिका / var / lib / mysql / db1 में स्थित है। टेबल बनाने वाली तीन फाइलें होंगी।
आपको एक तालिका को स्थानांतरित करने के लिए सभी तीन फ़ाइल को स्थानांतरित करना होगा। यदि आपके सभी टेबल MyISAM स्टोरेज इंजन का उपयोग करते हैं, तो आप mysql को बंद कर सकते हैं और कॉपी कर सकते हैं। यदि आप केवल तालिका की प्रतिलिपि बना रहे हैं और इसे किसी अन्य डेटाबेस में रखते हैं, तो आपको SQL का उपयोग करना चाहिए।
उदाहरण के लिए, यदि आप डेटाबेस db2 पर db1.mytable की प्रतिलिपि बनाना चाहते हैं, तो यह करें:
CREATE TABLE db2.mytable LIKE db1.mytable;
ALTER TABLE db2.mytable DISABLE KEYS;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
ALTER TABLE db2.mytable ENABLE KEYS;
अब यदि आप तालिका को db1 से db2 पर ले जा रहे हैं, तो आप यह कर सकते हैं:
ALTER TABLE db1.mytable RENAME db2.mytable;
इनफ़बीडी के तहत काम करने वाले बुनियादी ढांचे की वजह से नकल बहुत खतरनाक है। दो बुनियादी संरचनाएँ हैं: 1) innodb_file_per_table अक्षम और 2) innodb_file_per_table सक्षम
अचिल्स 'हील ऑफ इनोबीडी' सिस्टम टेबलस्पेस फ़ाइल है जिसे आईबेटा 1 (सामान्य रूप से / var / lib / mysql में स्थित) के रूप में जाना जाता है। उस फ़ाइल में क्या निहित है ?
Innodb_file_per_table अक्षम होने पर, इन सभी प्रकार की InnoDB जानकारी ibdata1 के भीतर रहती हैं। Ibdata1 के बाहर किसी भी InnoDB तालिका की एकमात्र अभिव्यक्ति InnoDB तालिका की .frm फ़ाइल है। एक बार में सभी InnoDB डेटा कॉपी करना सभी / var / lib / mysql की प्रतिलिपि बनाने की आवश्यकता है।
एक व्यक्ति InnoDB तालिका की नकल करना कुल असंभव है। आपको डेटा के तार्किक प्रतिनिधित्व और उसकी अनुक्रमणिका परिभाषाओं के रूप में तालिका का एक डंप निकालने के लिए mysqldump होना चाहिए। फिर आप उस डंप को उसी सर्वर या किसी अन्य सर्वर पर दूसरे डेटाबेस में लोड करेंगे।
Innodb_file_per_table सक्षम होने के साथ, तालिका डेटा और इसके अनुक्रमित .frm फ़ाइल के बगल में डेटाबेस फ़ोल्डर में रहते हैं। उदाहरण के लिए, तालिका db1.mytable के लिए, ibdata1 के बाहर उस InnoDB तालिका की अभिव्यक्ति होगी:
Db1.mytable के लिए सभी मेटाडेटा अभी भी ibdata1 में रहते हैं और इसके आसपास कोई रास्ता नहीं है । Redo लॉग और MVCC डेटा अभी भी ibdata1 के साथ रहते हैं।
यदि आप .frm और .ibd फ़ाइल को कॉपी करने के बारे में सोच रहे हैं, तो आप चोट पहुँचाने की दुनिया के अनुरूप हैं। एक InnoDB तालिका की .frm और .ibd फ़ाइल की प्रतिलिपि बनाना केवल तभी अच्छा होता है जब आप गारंटी दे सकते हैं कि .ibd फ़ाइल की आईडी आईडी ibdata फ़ाइल के मेटाडेटा में टेबलस्पेस आईडी प्रविष्टि के साथ बिल्कुल मेल खाती है।
मैंने इस टेबल्स आईडी कॉन्सेप्ट के बारे में DBA StackExchange में दो पोस्ट लिखे
यहाँ बेमेल तालिकाओं की स्थिति में ibdata1 पर फ़ाइल को रीबेट करने और .ibd करने के लिए उत्कृष्ट लिंक दिया गया है: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file । इसे पढ़ने के बाद, आपको यह देखने में सक्षम होना चाहिए कि मैंने आत्महत्या के निकट क्यों कहा।
InnoDB के लिए आपको केवल इसकी आवश्यकता है
CREATE TABLE db2.mytable LIKE db1.mytable;
INSERT INTO db2.mytable SELECT * FROM db1.mytable;
एक InnoDB तालिका की एक प्रतिलिपि बनाने के लिए। यदि आप इसे किसी अन्य DB सर्वर पर माइग्रेट कर रहे हैं, तो mysqldump का उपयोग करें।
.frm
, .MYD
और .MYI
।
संपूर्ण MySQL डेटादिर को कॉपी करना एक व्यावहारिक तकनीक है, माना जाता है कि MySQL सेवा बंद कर दी गई है और आप संपूर्ण डेटाबेस सर्वर की प्रतिलिपि बनाना चाहते हैं।
यह बड़े सूचकांक के साथ डेटाबेस को बदलने के लिए एक उपयोगी तकनीक है, और एक mysql डंप में अनुक्रमणिका शामिल नहीं होगी, जिसे आयात समय पर पुनर्जीवित करने की आवश्यकता होगी। MySQL गुलामों की स्थापना करते समय मैंने इस तकनीक को उपयोगी पाया है।
एक व्यक्तिगत फ़ाइल की प्रतिलिपि बनाना उपयोग में टेबल स्कीमा पर निर्भर करेगा, लेकिन ज्यादातर स्थिति में एक उपयुक्त समाधान नहीं है।
का प्रयोग करें xtrabackup डब्ल्यू / ow w / ओ innobackupex आवरण और आप दोनों MyISAM और InnoDB डेटाबेस पर ठीक हो जाएगा। ध्यान दें, कि innodb डेटाबेस को पुनर्स्थापित करना न केवल फ़ाइलों को कॉपी करना है, भले ही आप xtrabackup का उपयोग करें। यदि आपको अधिक जानकारी चाहिए तो बताएं
नहीं, आपको mysqdump के साथ बैकअप लेना चाहिए और mysql cli यूटिलिटी के साथ रिस्टोर करना चाहिए, जिस frm फाइल को आप कॉपी कर रहे हैं वह केवल टेबल स्ट्रक्चर को कॉपी कर रही है न कि डेटा को अंदर, और अगर आप innodb पर हैं तो फाइल को सीधे कॉपी करना संभव नहीं है।
सबसे अच्छा तरीका डंप है और टेबल को पुनर्स्थापित करना है।