2010-08-26 15 views
17

मैंSSH सुरंग MySQLdb कनेक्शन

ssh -L 3306:localhost:22 <hostip> 

का उपयोग कर एक SSH सुरंग तब मेरे अजगर स्क्रिप्ट चलाने बनाने की कोशिश की स्थानीय होस्ट के माध्यम से कनेक्ट करने के लिए

conn = MySQLdb.connect(host'localhost', port=3306, user='bob', passwd='na', db='test') 

हालांकि, मैं निम्न त्रुटि प्राप्त

(2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)") 

मैं कैसे सुनिश्चित कर सकता हूं कि मैं सही मेजबान मार रहा हूं और बाध्य के साथ कुछ समस्या नहीं?

उत्तर

16

"localhost" से "127.0.0.1" को बदलने का प्रयास करें, यह आपकी अपेक्षा के अनुसार काम करना चाहिए। यह व्यवहार manual में विस्तृत है:

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

db=_mysql.connect(host="outhouse", port=3307, passwd="moonpie", db="thangs")

तुम सच में करना पड़ा, तो आप स्थानीय होस्ट करने के लिए टीसीपी के साथसे जुड़ सकता 10 पूर्ण होस्ट नाम निर्दिष्ट करें, या 127.0.0.1

+1

ऐसा किया गया। धन्यवाद –

3

आप होस्ट नाम के रूप में localhost निर्दिष्ट नहीं कर सकते हैं, क्योंकि इससे पता चलता है कि MySQLdb को यूनिक्स सॉकेट का उपयोग करने का प्रयास करना चाहिए। इसके बजाय होस्ट के लिए 127.0.0.1 का उपयोग करें।

यदि आप यह सुनिश्चित करना चाहते हैं कि कनेक्शन काम करता है, तो आप मानक mysql क्लाइंट का उपयोग कर सकते हैं।

11

क्या mysqld रिमोट पर बंदरगाह 22 पर चलता है? मुझे अज्ञानी कॉल लेकिन मुझे लगता है कि आप क्या करने की कोशिश कर रहे हैं

ssh -n -N -f -L 3306:localhost:3306 remotehost 

फिर बनाने स्थानीय मशीन पर MySQL कनेक्शन पारदर्शी रूप से लक्ष्य की मेजबानी के लिए खत्म हो गया टनल हो जाएगी है।

+0

हां, और यदि आप स्थानीय होस्ट पर एक टेलनेट क्लाइंट उपलब्ध हैं तो आप इसका परीक्षण कर सकते हैं: 'टेलनेट लोकहोस्ट 3306' को कनेक्शन स्थापित करना चाहिए और एक पहचानने योग्य MySQL संस्करण संख्या प्रदर्शित करना चाहिए। –

+0

आप यह मानने में सही थे कि मेरे पास गलत बंदरगाह था। –

+0

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

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