2009-09-10 19 views
5

मेरी कंपनी वर्तमान में हमारे डेटाबेस को चारों ओर ले जा रही है, पुराने MySQL इंस्टेंस से नए में टेबल के एक सेट को स्थानांतरित कर रही है। हमने इस माइग्रेशन से पहले कुछ विकास किया है, और कुछ टेबल की संरचना मूल से बदल दी गई है (उदाहरण के लिए कॉलम गिराए गए थे)।विभिन्न संरचना के साथ एक तालिका में MySQL माइग्रेट करना

तो वर्तमान में मैंने पुराने डेटाबेस से डेटा को हटा दिया है और अब उन्हें नई तालिका में पुन: दर्ज करने का प्रयास कर रहा हूं। बेशक, जब आयात तालिका में अधिक फ़ील्ड के साथ पंक्तियों को सम्मिलित करने का प्रयास करता है तो आयात बोर्क होता है।

केवल नए फ़ील्ड में आवश्यक फ़ील्ड आयात करने के लिए सबसे अच्छा तरीका क्या है (अधिमानतः स्क्रिप्ट करने योग्य, क्योंकि मुझे यह कुछ और बार करने की ज़रूरत है)?

उत्तर

2

अद्यतन के अनुसार निम्न:

SELECT 'INSERT INTO NEW_TABLE ... ('+ to.column +');' 
    FROM OLD_TABLE ot 

आप नए डेटाबेस पर तालिका के लिए एक सम्मिलित बयान की जरूरत स्तंभ की सूची के साथ। फिर पुरानी तालिका में मानों के आधार पर मूल्य भाग को पॉप्युलेट करें। पुराने वातावरण में चलाएं, और आपके पास नए पर्यावरण के लिए डेटा के साथ आपके आवेषण होंगे - बस एक स्क्रिप्ट में कॉपी न करें।

मन कि हालांकि डेटाटाइप्स तदनुसार संभाला जा करने के लिए है - दिनांक (। Incl समय), और तार नियंत्रित किया जा सकता है क्योंकि आप पाठ में काम कर रहे होगा।

0

यदि आप MySQL 5.1 का उपयोग कर रहे हैं, तो एक शक्तिशाली, हालांकि शायद इस मामले में ओवरकिल में, समाधान एक एक्सएमएल mysqldump करना है और इसे बदलने के लिए एक एक्सएसएलटी का उपयोग करना है। दुर्भाग्यवश कि एक्सएमएल फ़ाइल को फिर से आयात करना 5.0 में समर्थित नहीं है, आपको 5.1, 5.4, या 6.0

2

की आवश्यकता होगी सबसे पहले, पुराने डेटाबेस, या वर्तमान डेटाबेस में टेम्पलेट टेबल के साथ नया डेटाबेस बनाएं। फिर प्रत्येक पंक्ति के लिए सम्मिलित कथन के साथ स्क्रिप्ट चलाएं, लेकिन मानों में केवल उन्हीं फ़ील्ड ही होनी चाहिए जो नई संरचना में हैं।

insert into newTable select row1,row2 from tempTable 
1

उपयोग सबसे तेज़ तरीका है, लोड डेटा infile:

- डंप datas

SELECT * INTO OUTFILE 'mybigtable.csv' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    FROM mybigtable 

- लोड datas

LOAD DATA LOCAL INFILE 'mybigtable.csv' 
    INTO TABLE mynewbigtable 
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' 
    (@col1,@col2,@col3,@col4) set [email protected],[email protected]; 

रेफरी:

http://dev.mysql.com/doc/refman/5.6/en/insert-speed.html

http://dev.mysql.com/doc/refman/5.6/en/load-data.html

संबंधित मुद्दे