मैं कोड का उपयोग करके ऐसा करना चाहता हूं और "MySQL माइग्रेशन टूलकिट" जैसे टूल का उपयोग नहीं करना चाहता हूं। मुझे पता है कि सबसे आसान तरीका एक कनेक्शन (MySQL कनेक्टर का उपयोग करके) को डीबी 1 में खोलना है और इसके डेटा को पढ़ना है। डीबी 2 से कनेक्शन खोलें और डेटा को लिखें। क्या कोई बेहतर/आसान तरीका है?मैं 2 MySQL डेटाबेस के बीच डेटा कैसे स्थानांतरित कर सकता हूं?
उत्तर
सबसे पहले मुझे लगता है कि आप एक स्थिति अभी कॉपी करने के लिए नहीं कर रहे हैं जा रहा हूँ कर सकते हैं डेटा/निर्देशिका, क्योंकि यदि आप फिर अपने मौजूदा स्नैपशॉट/बैकअप का उपयोग कर रहे/बहाल शायद पर्याप्त होगा (और अपने बैकअप परीक्षण/सौदा में प्रक्रियाओं को बहाल)।
जो मामले में, यदि दो तालिकाओं में एक ही संरचना आम तौर पर तेज, और विडंबना यह है कि राशि के लिए सबसे आसान दृष्टिकोण का चयन करें उपयोग करने के लिए ... outfile जांच ... एक छोर पर हो जाएगा, और डेटा लोड INFILE ... पर अन्य।
http://dev.mysql.com/doc/refman/5.1/en/load-data.html देखें और .../निश्चित जानकारी के लिए select.html।
तुच्छ तालिकाओं के लिए निम्नलिखित काम करेगा:
SELECT * FROM mytable INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
LOAD DATA INFILE '/tmp/mytable.csv' INTO TABLE mytable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\\\'
LINES TERMINATED BY '\\n' ;
हम भी वास्तव में डिस्क पर लिखने की भूमि के ऊपर से बचने के लिए फीफो का इस्तेमाल किया है महान प्रभाव के लिए, या यदि हम किसी कारण से डिस्क पर लिखने की ज़रूरत है, gzip के माध्यम से इसे पाइप करने के लिए।
यानी।
mkfifo /tmp/myfifo
gzip -c /tmp/myfifo > /tmp/mytable.csv.gz &
... SEL
ECT... INTO OUTFILE '/tmp/myfifo' .....
wait
gunzip -c /tmp/mytable.csv.gz > /tmp/myfifo &
... LOAD DATA INFILE /tmp/myfifo .....
wait
मूल रूप से, एक तुम एक फीफो के लिए तालिका डेटा आप इसे सेक कर सकते हैं, यह Munge प्रत्यक्ष, या अपने दिल की सामग्री के लिए एक नेटवर्क के पार सुरंग।
धन्यवाद, हालांकि यह dev.mysql मैनुअल में है लेकिन यह proberly काम नहीं कर रहा है। यह मुझे यह त्रुटि दे रहा है: आपको अपने SQL वाक्यविन्यास में कोई त्रुटि है; लाइन 1 पर '\ n' 'के निकट उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैन्युअल की जांच करें) यह' \ n 'स्वीकार नहीं कर रहा है .. क्यों? – Morano88
स्टैक ओवरफ़्लो ने नमूना क्वेरी को दूषित कर दिया। स्रोत में, खंड द्वारा एस्केप में स्लैश बच निकला था, लेकिन एचटीएमएल में परिवर्तित होने पर बच निकला था। इसके बारे में खेद है, मैंने भ्रष्टाचार पर ध्यान नहीं दिया - मैंने इसे ऊपर तय कर दिया है। – Recurse
यह वही है जो मुझे काफी बड़े डेटाबेस का बैक अप लेने के लिए उपयोग करने की ज़रूरत है, लेकिन मुझे काम करने के लिए आपका उदाहरण नहीं मिल सकता है। मैं फीफो बना सकता हूं, और यदि मैं mysqldump का उपयोग करके पाइप पर डंप करता हूं तो यह ठीक काम करता है। हालांकि, अगर मैं चयन का उपयोग कर पाइप पर डंप करने का प्रयास करता हूं ... आउटपुट में मुझे एक त्रुटि मिलती है कि "myfifo पहले से मौजूद है"। –
फेडेरेटेड स्टोरेज इंजन? गुच्छा में सबसे तेज़ नहीं है, लेकिन एक समय के लिए, आकस्मिक, या डेटा की थोड़ी मात्रा में यह होगा। ऐसा लगता है कि आप 2 सेवा के बारे में बात कर रहे हैं। एक पर 2 डेटाबेस और एक ही सर्वर के साथ यह बस हो जाएगा:
INSERT INTO databasename1.tablename SELECT * FROM databasename2.tablename;
बहुत बहुत धन्यवाद, मुझे अभी तक यकीन नहीं है कि यदि 2 डेटाबेस एक ही सर्वर पर हैं या नहीं। – Morano88
यह मेरी स्थिति के लिए शानदार था। चीयर्स :) – Nick
अमेज़ॅन आरडीएस के साथ बहुत अच्छा काम किया जहां आपके पास अंतर्निहित मशीन तक पहुंच नहीं है, जिसमें MySQL इंस्टेंस चल रहा है, INFILE/OUTFILE से जुड़े समाधानों का निर्णय लेना। – Andz
आप mysqldump
और mysql
(कमांड लाइन ग्राहक) का उपयोग कर सकते हैं। ये कमांड लाइन टूल्स हैं और आपके द्वारा लिखे गए प्रश्न में आप उनका उपयोग नहीं करना चाहते हैं, लेकिन फिर भी उनका उपयोग कर रहे हैं (यहां तक कि उन्हें अपने कोड से चलाकर) सबसे आसान तरीका है; mysqldump
बहुत सारी समस्याएं हल करता है।
आप एक डेटाबेस से select
एस और insert
को दूसरे में बना सकते हैं, जो कि बहुत आसान है। लेकिन अगर आपको डेटाबेस स्कीमा (create table
एस इत्यादि) को स्थानांतरित करने की भी आवश्यकता है, तो यह थोड़ा और जटिल हो जाता है, यही कारण है कि मैं mysqldump
की अनुशंसा करता हूं। लेकिन बहुत सारे PHP-MySQL-admin टूल भी ऐसा करते हैं, ताकि आप उनका उपयोग कर सकें या उनके कोड को देख सकें।
या शायद आप MySQL प्रतिकृति का उपयोग कर सकते हैं।
क्या यह (चयन, आवेषण) काम करेगा यदि दो डेटाबेस 2 अलग-अलग सर्वर पर हैं? नहीं मैं सिर्फ डेटा, नहीं तालिका कृतियों स्थानांतरित करना चाहते हैं .. आदि – Morano88
हाँ, आप tvo कनेक्शन होगा - एक सिलसिले में आप डेटा है कि चयन से लौटे के साथ अन्य सम्मिलित में चयन चलाते हैं, तो - प्रत्येक सर्वर एक के लिए । – Messa
आप अपने वर्तमान सर्वर पर बाइनरी लॉगिंग सक्षम (और सभी बिन लॉग है) आप दूसरे सर्वर के लिए सेटअप प्रतिकृति
:
जब तक दो डेटाबेस में एक ही फाइल सिस्टम पर कर रहे हैं, जब आप एक डेटाबेस से एक मेज के लिए कदम का पुन: नामकरण तालिका का उपयोग कर सकते हैं: एक ही सर्वर पर
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
दो डेटाबेस या अलग अलग सर्वरों पर दो डेटाबेस? –
@Itay: मुझे यकीन है कि नहीं कर रहा हूँ अभी तक मौसम वे एक ही सर्वर या नहीं पर कर रहे हैं? मुझे पता है कि यह एक फर्क नहीं पड़ता, लेकिन उन्हें पूछने के लिए मेरे मन में आया था नहीं था।मैं कल करूँगा – Morano88