MySQL दूरस्थ कनेक्शन स्वीकार करने से इनकार करता है


13

मैंने अभी mysql (percona 5.5) के साथ एक नया ubuntu सर्वर स्थापित किया है, लेकिन यह दूरस्थ मेजबानों से कनेक्शन लेने से इनकार करता है

यदि मैं इस सर्वर से दूरस्थ रूप से जुड़ने का प्रयास करता हूं तो यह होता है:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

जब मैंने जाँच की कि mysql दूरस्थ कनेक्शनों को सुनता है तो मैंने इसे देखा:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

जैसा कि आप देख सकते हैं यह कहता है 127.0.0.1:3306जिसका अर्थ है "मैं केवल स्थानीय कनेक्शन स्वीकार करता हूं"।

मैंने अपना skip_networkingऔर bind-addressचर चेक किया - सब कुछ बंद है:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

मेरे पास एक ही सर्वर है जिसमें बिल्कुल समान कॉन्फ़िगरेशन है और यह बहुत अच्छा काम करता है:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

इसका क्या कारण हो सकता है? मैं दूरस्थ कनेक्शन के लिए mysql कैसे बनाऊं?


ध्यान दें कि चर bind_addressकेवल संस्करण 5.6 ( bugs.mysql.com/bug.php?id=44355 ) के बाद से उपलब्ध है , इसलिए यह v5.5 में एक खाली सेट लौटाएगा भले ही वह सेट हो।
faker

हमें अपनी my.cnf सेटिंग दिखाएं।
user9517

क्या आपने mySQL के बाहर के मुद्दों की जाँच की है, जैसे कि फ़ायरवॉल या कोई रूटिंग समस्या?
6

जवाबों:



0

यह mysql डेटाबेस यूजर टेबल (mysql; शो टेबल; का उपयोग करें) के कारण हो सकता है। यदि आपके लिए 0.0.0.0 का बाइंड काम नहीं करता है, तो अपने उपयोगकर्ता को उस तालिका में 'लोकलहोस्ट' के स्थान पर होस्ट '%' देने का प्रयास करें।

उदाहरण के लिए, उपयोगकर्ता बनाने का प्रयास करें जैसे:

आपका उपयोग करें "yourpassword" द्वारा IDENTIFIED

चींटी उस उपयोगकर्ता से जुड़ने की कोशिश करती है।


3
आमतौर पर मना किए गए कनेक्शन का मतलब है कि संबंधित आईपी: पोर्ट पर कुछ भी नहीं सुना जा रहा है।
user9517

यह सच है, मुझे 'MySQL सर्वर से कनेक्ट नहीं किया जा सकता', मैं टेलनेट पर याद नहीं करता। माफ़ करना।
periket2000

"MySQL से कनेक्ट नहीं किया जा सकता" एक उपयोगकर्ता के लिए अनुपलब्ध होने के विशेषाधिकार से उत्पन्न नहीं होता है। यह एक {आईपी: पोर्ट} जोड़ी है जो एक कनेक्शन के प्रयास से मेल नहीं खाता है।
फेबिन हद्दादी

0

जब सब कुछ विफल हो जाता है और आपको यकीन है कि सर्वर आईएस डिफ़ॉल्ट पोर्ट पर सुन रहा है और आप अन्य होस्ट से हताश होकर mysql क्लाइंट के साथ जुड़ने का प्रयास कर रहे हैं, तो mysql कमांड के URL पर पोर्ट निर्दिष्ट करने का प्रयास करें।

अजीब बात यह है कि मुझे निम्नलिखित सिंटैक्स का उपयोग करना पड़ा है:

mysql -h someHost --port=3306 -u someUser -p someDb

मैंने इसे (बग?) पूरी तरह से दुर्घटना के बाद पाया है (मेरे बाल खोने के बाद :))।

मेरा सेटअप: डेबियन जेसी, ताजा mysql 5.7.18, उपयोगकर्ता / db बनाया, बाइंड-एड्रेस टिप्पणी-आउट, mysqld पुनरारंभ


एक तर्कसंगत स्पष्टीकरण है कि someHost MySQL सर्वर वास्तव में 3306 पर सुन रहा है, जैसा कि --पोर्ट निर्देश द्वारा प्रदर्शित किया गया है। लेकिन आपका mysql क्लाइंट बाइनरी मारबाडी संस्करण से आता है ... इसलिए डिफ़ॉल्ट रूप से पोर्ट 3307 का उपयोग करता है, जब तक कि अन्यथा निर्दिष्ट न हो। आपके द्वारा उपयोग किए जा रहे mysql क्लाइंट बाइनरी की उत्पत्ति की जांच करें। संकेत: अपने पैठ पर्यावरण चर की भी जाँच करें ...
Fabien Haddadi

0

मेरे पास बस यह मुद्दा था और मेरा मुद्दा फ़ायरवॉल से संबंधित था। BTW - धन्यवाद @Temnovit मैसकल समस्या निवारण आदेशों के लिए।

मैंने नेटस्टैट का उपयोग यह बताने के लिए किया कि सर्वर चल रहा था और सही पोर्ट पर था। मैं यह भी बता सकता था कि मेरा सर्वर एक साधारण टेलनेट कमांड के साथ उस पोर्ट पर कनेक्शन स्वीकार नहीं कर रहा था।

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

फेडोरा फ़ायरवॉल कमांड पर एक और उपयोगी उत्तर के बाद मैं सही पोर्ट खोल सकता था।

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

मेरा टेलनेट कमांड तब सफल था।

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

यदि आपको अभी भी समस्या है, तो यह उपयोगकर्ता की अनुमति जारी करने की संभावना है।


0

मैंने mariadbस्थापित किया है। आत्मा को bind-addressस्थित में संशोधित करना था/etc/mysql/mariadb.conf.d/50-server.cnf


-1

लिंक बेलो में वर्णित समाधान आपकी समस्या को हल करना चाहिए http://www.debianhelp.co.uk/remotemysql.htm


2
bml13, आपके उत्तर के समर्थन में एक लिंक को उद्धृत करना उत्कृष्ट अभ्यास है, लेकिन हम बहुत से लोगों को यहाँ उत्तर लिखना पसंद करते हैं और एक लिंक जोड़ते हैं, न कि केवल लिंक डालकर उस पर छोड़ देते हैं।
मदहेट

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