2009-05-01 22 views
23

क्या MySQL क्लाइंट का उपयोग कर एक क्रॉस सर्वर चयन क्वेरी लिखना संभव है। असल में सेटअप निम्नानुसार है।MySQL क्रॉस सर्वर क्वेरी का चयन करें

सर्वर आईपी           डाटाबेस
---------           --------
1.2.3.4           टेस्ट
ABCD           टेस्ट

मैं एक क्वेरी लिखना चाहता हूं जो 1.2.3.4 पर टेस्ट डेटाबेस में किसी तालिका से पंक्तियों का चयन करेगी और परिणाम को तालिका में टेस्ट डेटाबेस में एबीसीडी
पर डालें, मेरे सर्वर मील दूर स्थित हैं इसलिए मैं एक खोलूंगा एसएसएच सुरंग दो कनेक्ट करने के लिए।

कोई बात नहीं?

उत्तर

7

mysqldump पहले से उल्लिखित समाधान हो सकता है या आप SELECT ... INTO OUTFILE और फिर LOAD DATA INFILE ... आदेशों का उपयोग करने का प्रयास कर सकते हैं।

MySQL में फ़ेडरेटेड स्टोरेज इंजन है जो आपके लिए उपयोगी हो सकता है। यहां http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html पर कुछ और दस्तावेज दिए गए हैं, मुझे यह स्वीकार करना होगा कि मुझे इसके साथ बड़ी सफलता नहीं मिली है लेकिन यह आपके लिए काम कर सकती है।

तीसरा समाधान आपके आवेदन में काम करना होगा। लाइन द्वारा SELECT क्वेरी लाइन और INSERT के आधार पर अन्य सर्वर लाइन के परिणामों में पढ़ें। हालांकि आप डेटा प्रकारों और शून्य प्रबंधन के साथ कुछ मुद्दों में भाग सकते हैं।

2

के बाद से mysql ग्राहक केवल एक समय, संक्षिप्त उत्तर सं है लेकिन हमेशा एक तरीका है पर एक सर्वर से कनेक्ट कर सकते हैं ...

mysqldump समर्थन एक --where पैरामीटर है कि करने के लिए इस्तेमाल किया जा सकता का हाल संस्करणों डंप किए गए डेटा को सीमित करें। इसका मतलब है कि आपके पास एक साधारण SELECT (यानी एक तालिका पर सभी कॉलम) चलाने का एक तरीका है और वैध SQL को INSERT पर उत्पादन करना है। फिर आप स्रोत सर्वर के लिए कमांड पर स्रोत सर्वर के लिए mysqldump कमांड के आउटपुट को पाइप कर सकते हैं।

शायद आप --no-create-info और --no-add-locks जैसे कुछ विकल्प mysqldump कमांड पर शामिल करना चाहते हैं। जब तक आउटपुट ठीक वही नहीं हो जाता तब तक इसका परीक्षण करें।

+0

आप में कभी रहे हैं स्थिति जहां mysql क्लाइंट एक जॉइन कर रहा है, आप परेशानी में हैं - सर्वर के लिए एक दूसरे के साथ संवाद करने के लिए सही समाधान है और क्लाइंट को भेजने के लिए एक एकल परिणाम सेट उत्पन्न करता है। एमएसएसएलएल आपको सर्वरों को "लिंक" करने की इजाजत देता है - और इसलिए कनेक्शन के लिए वे किस क्रेडेंशियल्स का उपयोग करेंगे, कॉन्फ़िगर करें ... इन सर्वरों को तब उपनाम के माध्यम से एक्सेस किया जाता है। – Basic

+0

मुझे यह समझने में थोड़ा सा लगा कि आप किस बारे में बात कर रहे थे। एक और जवाब वर्णन करता है कि माईएसक्यूएल में ऐसा कैसे किया जाए जो कि मैंने जो पोस्ट किया है उससे अधिक सामान्य समाधान है। – staticsan

31

किसी सर्वर पर फ़ेडरेटेड टेबल का उपयोग करने के बारे में कैसे? रिमोट टेबल पर आधारित फ़ेडरेटेड टेबल बनाएं जो आप क्वेरी में उपयोग करेंगे और केवल अपनी क्वेरी चलाएं जैसे आपका डेटाबेस सभी स्थानीय था। नीचे दिए गए उदाहरण से MySQL site

संघीय तालिकाओं का उपयोग करने के लिए प्रक्रिया बहुत सरल है। आम तौर पर, आपके पास दो सर्वर होते हैं, या तो दोनों एक ही मेजबान या अलग-अलग होस्ट पर होते हैं। (एक ही सर्वर द्वारा प्रबंधित की जाने वाली किसी अन्य तालिका का उपयोग करने के लिए एक फेडेरेटेड तालिका के लिए संभव है, हालांकि ऐसा करने में थोड़ा सा बिंदु है।)

सबसे पहले, आपके पास उस दूरस्थ सर्वर पर एक टेबल होनी चाहिए जिसे आप एक्सेस करना चाहते हैं एक फेडेरेटेड टेबल का उपयोग करके।मान लीजिए कि दूरस्थ तालिका फ़ेडरेटेड डेटाबेस में है और इस तरह परिभाषित किया गया है:

CREATE TABLE test_table (
    id  INT(20) NOT NULL AUTO_INCREMENT, 
    name VARCHAR(32) NOT NULL DEFAULT '', 
    other INT(20) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id), 
    INDEX name (name), 
    INDEX other_key (other) 
) 
ENGINE=MyISAM 
CHARSET=latin1; 

उदाहरण एक MyISAM तालिका का उपयोग करता है, लेकिन तालिका किसी भी भंडारण इंजन इस्तेमाल कर सकते हैं।

इसके बाद, दूरदराज के मेज तक पहुँचने के लिए स्थानीय सर्वर पर एक संघीय तालिका बनाने:

CREATE TABLE federated_table (
    id  INT(20) NOT NULL AUTO_INCREMENT, 
    name VARCHAR(32) NOT NULL DEFAULT '', 
    other INT(20) NOT NULL DEFAULT '0', 
    PRIMARY KEY (id), 
    INDEX name (name), 
    INDEX other_key (other) 
) 
ENGINE=FEDERATED 
DEFAULT CHARSET=latin1 
CONNECTION='mysql://[email protected]_host:9306/federated/test_table'; 

(MySQL 5.0.13 से पहले, बल्कि कनेक्शन से उपयोग टिप्पणी।)

+0

एक तरह से यह "उचित" समाधान है, लेकिन फीडरेटेड टेबल बहुत धीमी हैं (लगभग सबकुछ निष्क्रिय रूप से पूर्ण तालिका स्कैन में परिवर्तित हो जाता है), इसलिए यदि आपका डेटा बिल्कुल बड़ा है तो वे एक विकल्प नहीं हो सकते हैं। – Brilliand

+0

फ़ेडरेट मूल तालिका से इंडेक्स को संभालता है और आपको स्थानीय पर भी उस इंडेक्स का सम्मान करना चाहिए, लेकिन दुख की बात है कि बड़े पैमाने पर आवेषण पर क्वेरी कैश और खराब प्रदर्शन का उपयोग न करें –

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