'लोकलहोस्ट' का उपयोग करके MySQL से कनेक्ट नहीं किया जा सकता, लेकिन '127.0.0.1' का उपयोग करना ठीक है?


12

मेरा / etc / मेजबान फ़ाइल इस तरह दिखता है:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

मैंने सर्वर का निर्माण करते समय पाया, कि यद्यपि मैं लोकलहोस्ट को सफलतापूर्वक पिंग कर सकता हूं, पोस्टफ़िक्स और अपाचे और डवकोट जैसी सेवाओं के लिए कुछ निश्चित कॉन्फ़िगरेशन फ़ाइलों में, मुझे उन्हें काम करने के लिए निर्दिष्ट 127.0.0.1करने के बजाय निर्दिष्ट करने की आवश्यकता थी localhost

मुझे कुछ डेटाबेस संचालित वेबसाइटों की कॉन्फ़िगरेशन फ़ाइलों को बदलने की भी आवश्यकता थी, जो localhostMySQL से कनेक्ट करने के लिए उपयोग की जाती थीं।

मैंने hostsफ़ाइल में विभिन्न संशोधनों की कोशिश की है, लेकिन मैंने अभी तक जो भी कोशिश की है, उससे कुछ भी मदद नहीं मिली है।

सर्वर Ubuntu 12.04.02 LTS चल रहा है। इसमें सेलिनक्स स्थापित नहीं है और उपर्युक्त स्थिति उन्हें स्वीकार करने और फ्लशिंग करने के लिए आईपीटैबल्स डिफ़ॉल्ट नीतियों को सेट करने के बाद भी बनी हुई है।

जवाबों:


15

जांच सुनिश्चित करें कि आप करने के लिए प्रवेश की अनुमति है कि बनाने के लिए - एक बात आप जाँच कर सकते हैं (जो MySQL कंसोल के लिए लॉग इन करने की आवश्यकता है) है rootके माध्यम से localhost

mysql -h 127.0.0.1 -u root -p

- एक बार जब आप सफलतापूर्वक लॉग इन कर लेते हैं -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

बस इसे वहां फेंक देना, बस इस मामले में यही है।


मुझे लग रहा है कि आप सही रास्ते पर हैं। मैंने ऐसा किया है और मैं यह देख सकता हूं कि यद्यपि स्थानीय होस्ट के लिए अन्य उपयोगकर्ताओं के रूट और जोड़े बनाए गए थे, जो उपयोगकर्ताओं के लिए होस्टिंग नियंत्रण कक्ष द्वारा बनाए गए हैं, वे सभी 127.0.0.1(एक को छोड़कर %) के लिए हैं। मुझे लगता है कि शायद यह मुझे इसे ठीक करने के लिए पर्याप्त रूप से प्रकट करता है, इसलिए मैं शायद थोड़ी देर में आपके उत्तर को स्वीकार कर लूंगा।
पीटर स्नो

सहायता के लिए धन्यवाद! मैं जोड़ना चाहूंगा कि परिवर्तन को प्रभावित करने के लिए mysql.user तालिका को अपडेट करने के बाद mysql सर्वर पुनरारंभ की आवश्यकता है।
9:30

हालांकि स्वीकार किया जाता है, यह आम तौर पर (कभी?) मुद्दा नहीं है, mysql के लिए। देखें EEAA के जवाब के बजाय (mysql की व्याख्या localhostके रूप में socketके बजाय TCP)।
टूलमेकरसेव

8

अधिकांश MySQL क्लाइंट इस तथ्य में अजीब हैं कि यदि आप होस्ट को निर्दिष्ट करते हैं localhost, तो वे एक टीसीपी कनेक्शन के बजाय सॉकेट कनेक्शन के लिए उर्फ ​​करते हैं। आपके विकल्प या तो साथ रहना है 127.0.0.1या, यदि क्लाइंट इसका समर्थन करता है (जैसे कि mysql CLI बाइनरी --protocolध्वज के साथ करता है ), तो इसे यूनिक्स सॉकेट के बजाय टीसीपी का उपयोग करने के लिए मजबूर करें।


धन्यवाद EEAA समस्या यह है कि जूमला इंस्टॉलर जैसी चीजें विफल हो जाती हैं। यदि आप स्थापना के दौरान होस्टनाम फ़ील्ड के 127.0.0.1बजाय निर्दिष्ट करते हैं localhost, तो यह मुझे अन्य त्रुटियों को देने के लिए गड़बड़ करने के लिए स्थापना पथ का कारण बनता है, लेकिन स्थानीयहोस्ट को निर्दिष्ट करने से डेटाबेस कनेक्ट करने में विफल रहता है! इस स्थिति का कारण क्या है? मेरे पास क्यों है?
पीटर स्नो

3
@PeterSnow आपके MySQL कॉन्फ़िगरेशन में एक यूनिक्स डोमेन सॉकेट स्थापित करता है।
माइकल हैम्पटन

धन्यवाद @Michael Hampton मैंने पिछले आधे घंटे की खोज की है और इसे स्थापित करने का तरीका नहीं खोज पाया। क्या आप मुझे एक लेख में इंगित कर सकते हैं या मुझे कुछ विचार दे सकते हैं? मैं क्या ज़रूरत है socket = /var/run/mysqld/mysqld.sockमें my.cnfऔर फ़ाइल विद्यमान है, अनुमतियाँ 777 धन्यवाद के साथ mysql के स्वामित्व वाले।
पीटर स्नो

@PeterSnow क्या आपने उस परिवर्तन को करने के बाद mysqld को पुनः आरंभ किया?
EEAA

वर्तमान में मैं जूमला इंस्टॉल स्क्रिप्ट के माध्यम से इसका उपयोग करने की कोशिश कर रहा हूं। Http पेज होस्टनाम के लिए पूछता है। यदि मैं 127.0.0.1इसे चुनता हूं तो यह काम करता है (लेकिन स्क्रिप्ट बाद में प्रविष्टि का उपयोग करता है और विफल रहता है क्योंकि यह resolvable नाम की अपेक्षा करता है localhost), लेकिन अगर मैं localhostडेटाबेस बनाने के लिए, कनेक्ट करना , कनेक्ट करना, विफल रहता है।
पीटर स्नो


1

आप इस तरह की अनुमति की जांच कर सकते हैं:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

यदि यह 0 0.0.0.0:* पर सुन रहा है, तो इसका मतलब है कि हर एक उस mysql को एक्सेस कर सकता है।

आप my.conf फ़ाइल में इसके लिए बाइंडिंग संपादित कर सकते हैं। इसके लिए linux default path है:

[learner@localhost ~]$ sudo vi /etc/my.cnf

IP को अनुमति देने के लिए my.conf फ़ाइल में इन पंक्तियों को जोड़ें।

bind-address = 127.0.0.1   
bind-address = 0.0.0.0

धन्यवाद a_learner, जानकारी के लिए, हालांकि मैंने पहले ही एक उत्तर स्वीकार कर लिया है।
पीटर स्नो

0

PHP अभी भी डिफ़ॉल्ट सॉकेट स्थान का उपयोग करने की कोशिश कर रहा है। यदि आप MariaDB / MySQL फ़ोल्डर को / var / lib / mysql से किसी अन्य स्थान पर ले गए हैं तो यह समस्या दिखाई दे सकती है । समस्या को हल करने के लिए आपको /etc/php.ini फ़ाइल में नए सॉकेट के स्थान को परिभाषित करना होगा ।

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

0

मैं, सिमलिंक बनाने के द्वारा इस समस्या का समाधान sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock। लेकिन पहले मुझे फ़ोल्डर बनाना होगा /var/run/mysqld/क्योंकि फ़ोल्डर शुरू में मौजूद नहीं था।


-1

आपको / tmp में mysql.sock की आवश्यकता है

ln -s /var/lib/mysql/mysql.sock mysql.sock

उसके बाद ठीक काम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.