इस लेख में, हम उस सामान्य समस्या को संबोधित करते हैं जिससे उपयोगकर्ता अक्सर MySQL से Manticore में डेटा आयात करने का प्रयास करते समय सामना करते हैं।
Manticore की indexer
टूल का उपयोग करके MySQL से डेटा इंडेक्स करने की क्षमता व्यापक रूप से मान्यता प्राप्त है। हालांकि, इस लेख में उल्लिखित विशिष्ट मुद्दे में गहराई से जाने से पहले, पहले Manticore और MySQL के बीच के संबंध को समझें।
वर्तमान में, Manticore द्वारा प्रदान किया जाने वाला सबसे शक्तिशाली API SphinxQL है। यह API MySQL परिवहन प्रोटोकॉल का उपयोग करता है, जो अपने क्वेरी भाषा की वाक्य रचना की MySQL के समानता के कारण खोज कार्यों और अन्य संचालन को काफी सरल बनाता है। SphinxQL के लिए आवश्यक MySQL प्रोटोकॉल कमांड को searchd
में मूल रूप से लागू किया गया है। इसलिए, Manticore को जिस होस्ट पर इंस्टॉल किया गया है, वहां MySQL लाइब्रेरी या MySQL आवश्यकता की न्यूनतम संख्या नहीं होती है।
indexer
टूल MySQL डेटाबेस से इंटरफ़ेस कर सकता है और Manticore इंडेक्स बनाने के लिए डेटा प्राप्त कर सकता है। MySQL डेटाबेस से यह कनेक्शन MySQL डेवलपर्स के लिए प्रदान किए गए आधिकारिक C++ क्लाइंट के माध्यम से सुविधाजनक बनाया जाता है। महत्वपूर्ण बात यह है कि जब Manticore कंपाइल किया जाता है, तो MySQL क्लाइंट लाइब्रेरी Manticore बाइनरी में एम्बेडेड नहीं होती है। यह PostgreSQL, XML पाइप्स और ODBC के लिए भी सच है। यदि कोई indexer
उपयोगकर्ता PostgreSQL, MySQL या ODBC समर्थित डेटाबेस से कनेक्ट करना चाहता है, तो आवश्यक ड्राइवर लाइब्रेरी को उसी सिस्टम पर इंस्टॉल किया जाना चाहिए जहां indexer मौजूद है।
तो, ‘MySQL स्रोत प्रारंभीकृत नहीं था। dlopen में गलत नाम?’ त्रुटि संदेश क्या कारण से होता है?
कई संभावित कारण हैं:
libmysqlclient
आपके सिस्टम पर इंस्टॉल नहीं हो सकता है। यह लाइब्रेरी Linux पैकेज के साथ वितरित की जाती है और प्लेटफॉर्म के अनुसार अलग-अलग लेबल की जा सकती है:- CentOS/RHEL पर, इसे
mysql-libs
कहा जाता है। - Debian/Ubuntu उपयोगकर्ताओं को
default-libmysqlclient-dev
ढूंढना चाहिए। - Alpine में
mariadb-connector-c-dev
पैकेज शामिल हैं।
- CentOS/RHEL पर, इसे
भले ही
libmysqlclient
इंस्टॉल हो, यह सही संस्करण नहीं हो सकता है। Indexer को एक विशेष क्लाइंट लाइब्रेरी संस्करण के खिलाफ कंपाइल किया जाता है, जो आमतौर पर Linux वितरण के डिफ़ॉल्ट MySQL पैकेज के साथ बंडल किया जाता है। MySQL संस्करण Linux वितरण में भिन्न हो सकते हैं, कुछ आधिकारिक MySQL का उपयोग करते हैं, और अन्य डिफ़ॉल्ट के रूप में MariaDB को चुनते हैं।समस्याएं तब उत्पन्न होती हैं जब आप MySQL के नए मुख्य संस्करण में अपग्रेड करते हैं या एक अलग MySQL वेरिएंट में स्विच करते हैं। दोनों परिदृश्य संगतता समस्याओं को जन्म दे सकते हैं, क्योंकि इन क्रियाओं से क्लाइंट लाइब्रेरी का एक अलग (आमतौर पर नया) संस्करण शामिल हो सकता है।
MySQL वितरण एक संगतता पैकेज प्रदान करते हैं जिसमें क्लाइंट लाइब्रेरी के पुराने संस्करण शामिल होते हैं उन अनुप्रयोगों के लिए जो उन संस्करणों के साथ काम करने के लिए डिज़ाइन किए गए हैं। उदाहरण के लिए, यदि आप एक वितरण में स्विच कर रहे हैं जो डिफ़ॉल्ट रूप से MariaDB का उपयोग करता है लेकिन नवीनतम आधिकारिक MySQL का उपयोग करना चाहते हैं, तो आपको आधिकारिक MySQL स्रोत से
mysql-community-libs-compat
संगतता पैकेज इंस्टॉल करना चाहिए।आपने एक अनुचित Manticore पैकेज इंस्टॉल किया हो सकता है। उदाहरण के लिए, आप Ubuntu का उपयोग कर रहे हो सकते हैं लेकिन गलती से Debian Manticore पैकेज इंस्टॉल कर दिया हो। हालांकि
searchd
काम कर सकता है, लेकिन indexer काम नहीं कर सकता यदि वह उस संस्करण के लिए अभिप्रेत था जो वर्तमान वितरण द्वारा प्रदान नहीं किया गया था।एक कम सामान्य परिदृश्य तब होता है जब MySQL को मैनुअल रूप से इंस्टॉल किया जाता है, या MySQL क्लाइंट लाइब्रेरी को साझा लाइब्रेरी पथ में शामिल नहीं किया जाता है। हालांकि Manticore MySQL की इंस्टॉलेशन पद्धति के प्रति उदासीन है, उसे ऑपरेटिंग सिस्टम के साझा लाइब्रेरी पथ का उपयोग करके क्लाइंट लाइब्रेरी को खोजने में सक्षम होना चाहिए, जो आमतौर पर
/usr/lib
या/usr/lib/x86_64-linux-gnu/
पर मिलता है। ऐसे मामलों में,libmysqlclient
को डिफ़ॉल्ट ld पथ में जोड़ा जाना चाहिए (या symlink किया जाना चाहिए)। यदि आप एक कस्टम पथ का उपयोग कर रहे हैं, तो आपको/etc/ld.so.conf.d/
में उस पथ को शामिल करना होगा। उदाहरण के लिए, कुछ वितरणों में, क्लाइंट लाइब्रेरी/usr/lib/mysql
फ़ोल्डर में स्थित होती हैं, और जो पैकेज इन फ़ाइलों को इंस्टॉल करता है वह/etc/ld.so.conf.d/
में एक प्रविष्टि भी योगदान देता है। वैकल्पिक रूप से, ld लाइब्रेरी पथ को समायोजित किया जा सकता है ताकि डेमन शुरू करते समय MySQL लाइब्रेरी शामिल हो, जैसेLD_LIBRARY_PATH=/path/to/mysql searchd
। यदि आप systemd यूनिट फाइल का उपयोग करते हैं, तो आप इसेEnvironment
में सेट कर सकते हैं, लेकिन आमतौर पर क्लाइंट लाइब्रेरी पथ को सिस्टम-व्यापी रूप से हल करना अनुशंसित है। यह भविष्य में अपडेट के कारण यूनिट फाइलों में संभावित परिवर्तनों के कारण है।