जब आप केवल "लोकलहोस्ट" का उपयोग करते हैं तो MySQL क्लाइंट लाइब्रेरी टीसीपी/आईपी कनेक्शन के बजाय कनेक्शन के लिए यूनिक्स डोमेन सॉकेट का उपयोग करने का प्रयास करती है। त्रुटि आपको बता रही है कि सॉकेट, जिसे MySQL
. कहा जाता है , कनेक्शन बनाने के लिए इस्तेमाल नहीं किया जा सकता, शायद इसलिए कि यह मौजूद नहीं है (त्रुटि संख्या 2)।
MySQL Documentation से :
<ब्लॉकक्वॉट>यूनिक्स पर, MySQL प्रोग्राम होस्ट नाम लोकलहोस्ट का विशेष रूप से इलाज करते हैं, जो कि अन्य नेटवर्क-आधारित प्रोग्रामों की तुलना में आपकी अपेक्षा से अलग होने की संभावना है। लोकलहोस्ट से कनेक्शन के लिए, MySQL प्रोग्राम यूनिक्स सॉकेट फ़ाइल का उपयोग करके स्थानीय सर्वर से कनेक्ट करने का प्रयास करता है। यह तब भी होता है जब पोर्टनंबर निर्दिष्ट करने के लिए --port या -P विकल्प दिया जाता है। यह सुनिश्चित करने के लिए कि क्लाइंट स्थानीय सर्वर से TCP/IP कनेक्शन बनाता है, --host या -h का उपयोग होस्ट नाम मान 127.0.0.1, या IP पता या स्थानीय सर्वर का नाम निर्दिष्ट करने के लिए करें। आप --protocol=TCP विकल्प का उपयोग करके, लोकलहोस्ट के लिए भी, कनेक्शन प्रोटोकॉल को स्पष्ट रूप से निर्दिष्ट कर सकते हैं।
इस समस्या को हल करने के कुछ तरीके हैं।
- आप यूनिक्स सॉकेट के बजाय केवल टीसीपी/आईपी का उपयोग कर सकते हैं। आप
127.0.0.1
. का उपयोग करके ऐसा करेंगेlocalhost
के बजाय जब आप कनेक्ट करते हैं। हालांकि, यूनिक्स सॉकेट अधिक तेज़ और उपयोग में सुरक्षित हो सकता है। - आप सॉकेट को में बदल सकते हैं
php.ini
:MySQL कॉन्फ़िगरेशन फ़ाइल खोलेंmy.cnf
यह पता लगाने के लिए कि MySQL सॉकेट कहाँ बनाता है, और PHP काmysqli.default_socket
. सेट करें उस रास्ते को। मेरे सिस्टम पर यह है/var/run/mysqld/mysqld.sock
। -
कनेक्शन खोलते समय सॉकेट को सीधे PHP स्क्रिप्ट में कॉन्फ़िगर करें। उदाहरण के लिए:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')