2012-06-27 12 views
104

मैंने दूरस्थ Ubuntu मशीन पर MySQL सर्वर स्थापित किया है।सभी होस्टों से MySQL रूट पहुंच

mysql> SELECT host, user, password FROM user WHERE user = 'root'; 
+------------------+------+-------------------------------------------+ 
| host    | user | password         | 
+------------------+------+-------------------------------------------+ 
| localhost  | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 
| 127.0.0.1  | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 
| ::1    | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 
+------------------+------+-------------------------------------------+ 

मैं एक ही रिमोट मशीन कमांड लाइन मानक mysql क्लाइंट का उपयोग इंटरफ़ेस से उपयोगकर्ता root साथ उपयोग कर सकते हैं: root उपयोगकर्ता mysql.user तालिका में इस तरह से परिभाषित किया गया है। अब मैं करना चाहते हैं इंटरनेट पर हर मेजबान से जड़ उपयोग की अनुमति है, इसलिए मैं निम्नलिखित पंक्ति (यह पिछले डंप से पहली पंक्ति की एक सटीक डुप्लिकेट है host स्तंभ को छोड़कर) को जोड़ने की कोशिश की:

mysql> SELECT host, user, password FROM user WHERE host = '%'; 
+------------------+------+-------------------------------------------+ 
| host    | user | password         | 
+------------------+------+-------------------------------------------+ 
| %    | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 
+------------------+------+-------------------------------------------+ 

लेकिन

SQL Error (2003): Can't connect to MySQL server on '46.x.x.x' (10061)

अगर यह एक प्रमाणन त्रुटि या एक नेटवर्क त्रुटि है मैं नहीं बता सकता: मेरी व्यक्तिगत पीसी पर मेरे मुवक्किल मुझे बताओ करने के लिए जारी (मैं सर्वर IP छिप)। सर्वर फ़ायरवॉल पर मैं के लिए 0.0.0.0/0 बंदरगाह 3306/टीसीपी सक्षम, और यह मेरे लिए ठीक है ...

+0

क्या आपने विशेषाधिकारों को फ्लश किया था? – gunnx

+0

@gunnx हाँ, मैंने किया। –

+0

क्या आप पोर्ट 3306 – mihaisimi

उत्तर

254

वहाँ है कि इस प्रक्रिया में दो कदम है:

क) अनुदान विशेषाधिकार। जड़ उपयोगकर्ता के रूप में निष्पादित करें:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; 

ख) बाँध सभी पतों के लिए:

सबसे आसान तरीका है अपने my.cnf फ़ाइल में टिप्पणी बाहर लाइन के लिए है:

#bind-address = 127.0.0.1 

और mysql पुनः आरंभ

service mysql restart 

डिफ़ॉल्ट रूप से यह केवल टी ओ लोकहोस्ट, लेकिन यदि आप लाइन पर टिप्पणी करते हैं तो यह उन सभी इंटरफेस से जुड़ा हुआ है जो इसे पाता है। लाइन को टिप्पणी करना bind-address=* के बराबर है।

जांच करने के लिए जहां mysql सेवा रूट के रूप में अमल आबद्ध है:

netstat -tupan | grep mysql 

अद्यतन Ubuntu 16 के लिए:

कॉन्फ़िग फ़ाइल (अब)

/etc/mysql/mysql.conf.d/mysqld.cnf 

(कम से कम पर है मानक उबंटू 16)

+3

ठीक है, समस्या बाध्यकारी पता थी। धन्यवाद।@Darhazer भी आपको धन्यवाद :) –

+1

वर्तमान अनुदान पूछने के लिए: 'रूट' @ '%' के लिए अनुदान दिखाएं; – robsch

+1

अन्य उपयोगकर्ताओं को अनुमति देने के लिए रूट @% को अनुमति देने के लिए, चरण (ए) चलाने के तुरंत बाद: अनुदान के साथ \ *। \ * TO 'root' @ '%' पर अनुदान का उपयोग करें; – Caleb

19

आर संयुक्त राष्ट्र निम्न क्वेरी:

use mysql;

update user set host='%' where host='localhost'

नोट: उत्पादन में उपयोग के लिए अनुशंसित नहीं है।

+0

यह सही समाधान नहीं है। यह काम कर सकता है। मेरे लिए यह एक त्रुटि उत्पन्न हुई: ERROR 1062 (23000): कुंजी 'प्राथमिक' – Scriptlabs

+2

@Scriptlabs के लिए डुप्लिकेट प्रविष्टि '% -root', संभावना है कि उपयोगकर्ता तालिका में 'स्थानीयहोस्ट' के साथ एक से अधिक प्रविष्टियां हैं। और रूट के साथ एक से अधिक पंक्ति, root.localhost, root.127.0.0.1, root.::1 सहित। तो आप अपडेट करने के बजाए एक अलग उपयोगकर्ता को जोड़ने से बेहतर हैं, यही कारण है कि मैं इस जवाब को कम कर रहा हूं। –

+0

फ्लश प्राइवेट नहीं है; इसके बाद भी जरूरी है? – Nom1fan

6

कभी कभी

bind-address = 127.0.0.1

होना चाहिए

bind-address = *

1

अगर आप कई नेटवर्क आप ओएस से जुड़ी है, यो my.conf फ़ाइल से बाँध-addres में इस नेटवर्क में से एक especify चाहिए। एक उदाहरण:

[mysqld] 
bind-address = 127.100.10.234 

इस आईपी एक ethX विन्यास से है।

+1

कृपया अधिक जानकारी जोड़ें। उस सेटिंग या ढांचे में उस सेटिंग में क्या होना चाहिए? कृपया ethx विन्यास के बारे में अधिक विशिष्ट हो। – BPS

0

मेरे मामले में "बाइंड-एड्रेस" सेटिंग समस्या थी। my.cnf में इस सेटिंग को टिप्पणी करते हुए सहायता नहीं है, क्योंकि मेरे मामले में mysql किसी कारण से 127.0.0.1 को डिफ़ॉल्ट सेट करता है।

क्या MySql वर्तमान में, उपयोग कर रहा है अपने स्थानीय बॉक्स पर कमांड लाइन खोलने की स्थापना का सत्यापन करना:

mysql -h localhost -u myname -pmypass mydb 

बाहर पढ़ें वर्तमान सेटिंग:

Show variables where variable_name like "bind%" 

आप 0.0.0.0 यहाँ अगर देखना चाहिए आप सभी मेजबानों से पहुंच की अनुमति देना चाहते हैं। अगर ऐसा नहीं है, [mysqld] अनुभाग के तहत अपने /etc/mysql/my.cnf और सेट बाँध-पता संपादित:

bind-address=0.0.0.0 

अंत में अपने सर्वर को पुनः आरंभ नई सेटिंग को लेने के लिए: पुन: प्रयास करें

sudo service mysql restart 

और जांचें कि क्या नई सेटिंग उठाई गई है।

0

मारियाडीबी रास्पियन पर चल रहा है - फ़ाइल को बांधने वाले पते को पिन करना मुश्किल है। मारिया डीबी के पास इस विषय पर not-very-helpful-info है।

मैं

# sudo grep -R bind-address /etc 

इस्तेमाल किया जहां लानत बात है पता लगाने के लिए।

मुझे भी उपरोक्त सभी की तरह mysql में विशेषाधिकार और होस्ट सेट करना पड़ा।

और मेरे रास्पबेरी पीआई के रिमोट कनेक्शन के लिए 3306 पोर्ट खोलने में कुछ मजेदार समय भी था - अंत में iptables-persistent का उपयोग किया गया।

सभी अब महान काम करते हैं।

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