2012-07-27 20 views
5

मेरी प्रोजेक्ट का अपना डेटाबेस है। साथ ही, मैं उपयोगकर्ताओं की तालिका का उपयोग करता हूं, जो अन्य डेटाबेस पर है। दो कार्यालयों का एक ही सर्वर पर डेटा होता है, लेकिन तीसरे व्यक्ति के पास अन्य सर्वर पर अपनी उपयोगकर्ता तालिका होती है।मुझे अन्य डेटाबेस से टेबल में शामिल होने की आवश्यकता है और कभी-कभी अन्य सर्वर

तो, प्रश्नों की बहुत सारी में मैं या तो तालिका some_db.users या other_server.some_db.users

क्या समाधान आप इस परिदृश्य के लिए सलाह देंगे शामिल होने की आवश्यकता?

मैं MySQL का उपयोग करता हूं।

उत्तर

13

वहाँ MySQL में Federated tables है:

संघीय भंडारण इंजन आप प्रतिकृति या क्लस्टर प्रौद्योगिकी का उपयोग कर के बिना एक दूरस्थ MySQL डेटाबेस से डेटा एक्सेस करने देता है। स्थानीय फ़ेडरेटेड तालिका क्वेरी करने से स्वचालित रूप से दूरस्थ (फ़ेडरेटेड) तालिकाओं से डेटा खींचता है। स्थानीय टेबल पर कोई डेटा संग्रहीत नहीं किया जाता है।

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

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

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

CREATE TABLE federated_table (
    id  INT(20) NOT NULL AUTO_INCREMENT, 
    name VARCHAR(32) NOT NULL 
    PRIMARY KEY (id) 
) 
ENGINE=FEDERATED 
DEFAULT CHARSET=latin1 
CONNECTION='mysql://fed_user:[email protected]:3306/sakila/test_table'; 

नमूना कनेक्शन तार:

CONNECTION='mysql://username:[email protected]:port/database/tablename' 
CONNECTION='mysql://[email protected]/database/tablename' 
CONNECTION='mysql://username:[email protected]/database/tablename' 

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

निष्पादित करें: अगर संघीय भंडारण इंजन अपने स्थानीय सर्वर पर उपलब्ध है

show variables like '%federated%'; 

जाँच करने के लिए।

स्थानीयहोस्ट में तालिका federated_table दूरस्थ सर्वर में test_table की आभासी तालिका बन जाती है।

अब आप स्थानीयहोस्ट सर्वर में डीबी में टेबल के बीच जॉइन का उपयोग कर सकते हैं।

SELECT * FROM `federated_table` JOIN `test`; 

federated_table में: यदि कोई तालिका अपने स्थानीय होस्ट सर्वर में test कहा जाता है, और आप पूर्व sakila.test_table जो दूरस्थ सर्वर में है से जोड़ना चाहते हैं, नीचे दिखाए गए जैसा एक क्वेरी लिखने क्वेरी वास्तव में दूरस्थ सर्वर में test_table का संदर्भ लेंगे।


संघीय स्टोरेज इंजन को सक्षम करने पर

संघीय भंडारण इंजन चल रहा सर्वर में डिफ़ॉल्ट रूप से सक्षम नहीं है; FEDERATED को सक्षम करने के लिए, आपको --federated विकल्प का उपयोग करके MySQL सर्वर बाइनरी शुरू करनी होगी।

नोट:
वैकल्पिक स्टोरेज इंजनों को विशेषाधिकारों की आवश्यकता होती है और --skip-grant-tables निर्दिष्ट होने पर लोड होने में विफल हो जाएगा।

परिणाम पूरे डाटाबेस लोड करने के लिए असफल हो जायेगी और निम्न त्रुटि लॉग में दिखाई देगा:

110318 21:37:23 [ERROR] /usr/local/libexec/mysqld: unknown option '--federated' 

बदले में इसका मतलब यह है 5.x से एक उन्नत दो चरणों में किया जाना चाहिए कि अगर आप संघीय टेबल है। एक बार --skip-grant-tables और बिना --federated के साथ, --skip-grant-tables के बिना और --federated के साथ।

स्रोत: The FEDERATED Storage Engine

+0

धन्यवाद, खासकर त्वरित ट्यूटोरियल के लिए। दुर्भाग्य से मुझे इसे काम करने में परेशानी है। '% federated%' जैसे चर दिखाएं; खाली सेट देता है। मुझे # my.ini में डिफ़ॉल्ट स्किप-फ़ेडरेटेड द्वारा संघीय अक्षम करें, मैंने स्किप लाइन पर टिप्पणी की है और सेवाओं को पुनरारंभ किया है, मैंने इस फ़ाइल में [mysqld] अनुभाग में फ़ेडरेटेड भी जोड़ा है और सेवाओं को पुनरारंभ किया है। –

+0

आप किस MySQL संस्करण का उपयोग कर रहे हैं? – Jacob

+0

नहीं, ठीक है .. ऐसा लगता है कि यह अब काम कर रहा है, भले ही खाली सेट रिटर्न। धन्यवाद:) –

0

कृपया डेटाबेस का भी उल्लेख करें। SQL सर्वर में आप लिंक किए गए सेवर का उपयोग कर सकते हैं। http://msdn.microsoft.com/en-us/library/ms188279.aspx

+1

मुझे MySQL के लिए समाधान की आवश्यकता है। –

0

MySQL में, आप

`database_name1`. `table_name1` JOIN `database_name2`.`table_name2` 

की तरह पूरी तरह से योग्य नामों का उपयोग कर विभिन्न डेटाबेस से तालिकाओं शामिल हो सकते हैं लेकिन मैं डर, तुम नहीं कर सकते क्योंकि यह है कि आप दो अलग अलग कनेक्शन की आवश्यकता के लिए और के रूप में विभिन्न सर्वरों से तालिकाओं में शामिल होने के मेरे ज्ञान के अनुसार क्वेरी में उपयोग करने के लिए कोई पूरी तरह से योग्य कनेक्शन नाम नहीं हैं।

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

आशा है कि यह मदद करता है ....

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

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