Mysql को रिमोट कनेक्शन की अनुमति कैसे दें


362

मैंने अपने स्थानीय मशीन पर MySQL सामुदायिक संस्करण 5.5 स्थापित किया है और मैं दूरस्थ कनेक्शन की अनुमति देना चाहता हूं ताकि मैं बाहरी स्रोत से जुड़ सकूं।

मैं उसे कैसे कर सकता हूँ?



1
यदि आप DigitalOcean का उपयोग करते हैं, तो आप उपयोग करने का प्रयास कर सकते हैं sudo mysql_secure_installation। FYI करें।
एलन डोंग

पाठ के लिए कोड फ़ॉर्मेटिंग का उपयोग न करें जो कोड नहीं है। विषय से परे।
लोर्न

@ ईजेपी क्यों? जिज्ञासा से बाहर ईमानदार सवाल
रेने रोथ

जवाबों:


776

MySQL पर डिफ़ॉल्ट रूप से इसकी अनुमति है।

डिफ़ॉल्ट रूप से जो अक्षम है वह रिमोट rootएक्सेस है। यदि आप इसे सक्षम करना चाहते हैं, तो स्थानीय रूप से इस SQL ​​कमांड को चलाएं:

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

और फिर निम्न पंक्ति ढूंढें और इसे अपनी my.cnfफ़ाइल में टिप्पणी करें , जो आमतौर /etc/mysql/my.cnfपर यूनिक्स / ओएसएक्स सिस्टम पर रहता है । कुछ मामलों में फ़ाइल का स्थान /etc/mysql/mysql.conf.d/mysqld.cnf) है।

यदि यह एक विंडोज सिस्टम है, तो आप इसे MySQL इंस्टॉलेशन डायरेक्टरी में पा सकते हैं, आमतौर पर कुछ ऐसा होता है C:\Program Files\MySQL\MySQL Server 5.5\ और फ़ाइल नाम होगा my.ini

लाइन बदलें

 bind-address = 127.0.0.1

सेवा

 #bind-address = 127.0.0.1

और परिवर्तनों को प्रभावी करने के लिए MySQL सर्वर ( Unix / OSX , और Windows ) को पुनरारंभ करें ।


4
ठीक है, इसलिए मैंने फ़ाइल के अंत में Binnd-address = 127.0.0.1 जोड़ दिया है और मैंने बाहरी होस्ट से नेवीकाट का उपयोग करके कनेक्ट करने का प्रयास किया है और मुझे 10060 त्रुटि मिली है
लियो

7
हम्म, आपको इसे जोड़ने की आवश्यकता नहीं है। जैसे मेरे उत्तर ने कहा, आपको इसे टिप्पणी करने की आवश्यकता है, इसे जोड़ने की नहीं। वहाँ डिफ़ॉल्ट रूप से एक है, इसलिए आपको इसे ढूंढना होगा, और इसे #
प्रीज्यूइंग

7
हम्म, इन माय MYqql सर्वर 5.5 \ my-default.ini नामक केवल 1 आईएनआई फ़ाइल है और # के बिना एक ही लाइन है: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRY_TABLES
Leo

2
यह जवाब सही काम करता है। thnx @mjuarez - सभी मूल्यों पर ध्यान दें GRANT विकल्प के साथ '' '%' 'IDENTIFIED' 'पासवर्ड' तक;
यादव

66
my.cnfफ़ाइल की तलाश करने वालों और इसमें कोई bind-addressनिर्देश नहीं मिलने पर , ध्यान दें कि मेरे मामले में (MySQL संस्करण 14.14 Ubuntu 16.04.2 पर) फ़ाइल का स्थान था/etc/mysql/mysql.conf.d/mysqld.cnf
ऐश मेनन

49

उपरोक्त सभी करने के बाद भी मैं rootदूरस्थ रूप से लॉगिन नहीं कर सका , लेकिन पोर्ट को टेलनेटिंग 3306ने पुष्टि की कि MySQLकनेक्शन स्वीकार कर रहा था।

मैंने MySQL में उपयोगकर्ताओं को देखना शुरू किया और देखा कि वहाँ थे अलग-अलग पासवर्ड वाले कई रूट उपयोगकर्ता

select user, host, password from mysql.user;

इसलिए MySQLमैंने रूट के लिए सभी पासवर्ड को फिर से सेट किया और मैं अंत में दूरस्थ रूप से लॉग इन कर सकता था root

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
यह सही है। अन्य उत्तरों में चरणों का पालन करते समय, खाली पासवर्ड वाले उपयोगकर्ता खाते बनाए जाते हैं। इसलिए आपको उनके लिए पासवर्ड जोड़ने की आवश्यकता है।
छैनीताल

1
मुझे इस एक के साथ स्वीकृत उत्तर को संयोजित करने की आवश्यकता थी और फिर सब कुछ ठीक से काम किया।
जेम्स

8
5.7 और उससे अधिक के लिए SQLupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft

स्वीकृत उत्तर पासवर्ड सेट करता है और मेरे लिए काम करता है।
माइककूल

1
धन्यवाद, @James की तरह, मुझे इसे ठीक करने के लिए स्वीकृत उत्तर के साथ जोड़ना था।
बेन एवरार्ड

39

मेरे अनुभव से बस एक नोट, आप इस पथ के तहत कॉन्फ़िगरेशन फ़ाइल पा सकते हैं /etc/mysql/mysql.conf.d/mysqld.cnf

(मैं इस पथ को खोजने के लिए कुछ समय तक संघर्ष करता रहा)


1
यह इस बात पर अत्यधिक निर्भर है कि आप किस वितरण का उपयोग कर रहे हैं। सबसे अच्छा तरीका सिर्फ इसके लिए खोज करना है:sudo find /etc -iname 'mysql*.cnf'
मार्टिन कोंकनी

मैं 'खोज' कमांड की सराहना करता हूं। मैं कमांड लाइन में नया हूं, इसलिए यह बहुत मददगार है। धन्यवाद!
हर्सेउ 2

मैंने /etc/mysq/conf.d/mysql.cnf को संपादित करने में घंटों का संघर्ष किया जब तक कि मुझे यह unswer नहीं मिला।
गवन कविरथने

26

मेरे मामले में मैं सेंट ओएस पर एक दूरस्थ mysql सर्वर से कनेक्ट करने का प्रयास कर रहा था। बहुत सारे समाधानों से गुजरने के बाद (सभी विशेषाधिकारों को प्रदान करते हुए, आईपी बाइंडिंग को हटाने, नेटवर्किंग को सक्षम करना) समस्या अभी भी हल नहीं हो रही थी।

जैसा कि यह निकला, विभिन्न समाधानों को देखते हुए, मैं iptables में आया, जिससे मुझे पता चला कि mysql पोर्ट 3306 कनेक्शन स्वीकार नहीं कर रहा है।

यहाँ एक छोटा सा नोट है कि कैसे मैंने इस मुद्दे की जाँच की और हल किया।

  • यदि पोर्ट कनेक्शन स्वीकार कर रहा है, तो जाँच करना:
टेलनेट (mysql सर्वर आईपी) [portNo]
  • पोर्ट पर कनेक्शन की अनुमति के लिए आईपी टेबल नियम जोड़ना:
iptables-INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
  • उत्पादन वातावरण के लिए यह अनुशंसा नहीं करेगा, लेकिन यदि आपके iptables को ठीक से कॉन्फ़िगर नहीं किया गया है, तो नियम जोड़ने से समस्या अभी भी हल नहीं हो सकती है। उस मामले में निम्नलिखित किया जाना चाहिए:
सेवा iptables बंद करो

उम्मीद है की यह मदद करेगा।


17

MySQL यूजर के लिए वाइल्डकार्ड रिमोट एक्सेस सेट करने के लिए कृपया नीचे बताए गए स्टेप इन्वर्टर का पालन करें।

(1) ओपन cmd।

(2) C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin को पथ करने के लिए नेविगेट करें और इस कमांड को चलाएं।

mysql -u रूट -p

(3) रूट पासवर्ड डालें।

(4) अनुमति प्रदान करने के लिए निम्न आदेश निष्पादित करें।

* * 'USERNAME' @ 'IP' को 'PASSWORD' द्वारा IDENTIFIED करने के लिए * सभी सिद्धांतों को प्राप्त करें;

USERNAME: उपयोगकर्ता नाम जिसे आप MySQL सर्वर से कनेक्ट करना चाहते हैं।

IP: सार्वजनिक IP पता जहाँ से आप MySQL सर्वर तक पहुँच की अनुमति देना चाहते हैं।

पासवर्ड: उपयोग किए गए उपयोगकर्ता नाम का पासवर्ड।

उपयोगकर्ता को किसी भी आईपी पते से कनेक्ट करने की अनुमति देने के लिए आईपी को% से बदला जा सकता है।

(५) कमांड और एग्जिट का पालन करके प्रिलिम्स को फ्लश करें।

फ्लश PRIVILEGES;

बाहर जाएं; या \ q

यहां छवि विवरण दर्ज करें


3
यह करने के बाद, मेरी जड़ अभी भी उपयोग से वंचित है। मुझे क्या याद किया?
3

आप चौथे चरण में% के बजाय अपने स्थानीय सिस्टम IP पते के साथ प्रयास कर सकते हैं। यह काम करना चाहिए। % का अर्थ है कोई भी IP पता।
हिरेन परागी

6

यदि आपकी MySQL सर्वर प्रक्रिया 127.0.0.1 या :: 1 पर ही सुन रही है, तो आप दूरस्थ रूप से कनेक्ट नहीं कर पाएंगे। यदि आपके पास इसमें bind-addressसेटिंग /etc/my.cnfहै तो समस्या का स्रोत हो सकता है।

आपको गैर- localhostउपयोगकर्ता के लिए भी विशेषाधिकार जोड़ना होगा ।


अजीब, कैसे एक और आईपी पर आपका सर्वर "सुन" सकता है 127.0.0.1?
पचेरियर

2
@Pacerier 127.0.0.1 केवल लूपबैक इंटरफ़ेस के लिए बाध्य है। बाहरी कनेक्शन काम नहीं करेंगे। एक सिस्टम में अक्सर कई नेटवर्क इंटरफेस होते हैं, जिनमें से प्रत्येक को विशेष रूप से बाध्य करने की आवश्यकता होती है, या आप बाइंड-सभी 0.0.0 पते का उपयोग कर सकते हैं।
तद्मान

6

यदि आपने इससे MySQL स्थापित किया है तो brewयह केवल स्थानीय इंटरफ़ेस पर डिफ़ॉल्ट रूप से सुनता है। है कि आप संपादित करने की जरूरत है ठीक करने के लिए /usr/local/etc/my.cnfऔर परिवर्तन bind-addressसे 127.0.0.1करने के लिए *

फिर चला brew services restart mysql


1
मेरे ubuntu 16.04.4 सर्वर के लिए, बाइंड-पता सेटिंग /etc/mysql/mysql.conf.d/mysqld.cnf में है
फ्रैंक

यह केवल काढ़ा का उपयोग नहीं है, किसी भी MySQL में यह डिफ़ॉल्ट सेटिंग होगी, केवल स्थानीय कनेक्शन की अनुमति देने के लिए।
nivs1978

6

रिमोट लॉगिन के लिए सभी प्रक्रिया। रिमोट लॉगिन डिफ़ॉल्ट रूप से बंद है। आपको इसे सभी आईपी के लिए मैन्युअल रूप से खोलने की आवश्यकता है

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

विशिष्ट आई.पी.

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

फिर

flush privileges;

आप अपने उपयोगकर्ता होस्ट और पासवर्ड की जांच कर सकते हैं

SELECT host,user,authentication_string FROM mysql.user;

अब आपका कर्तव्य यह बदलना है

bind-address = 127.0.0.1

आप इस पर पा सकते हैं

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

अगर आपको वहां पर यह नहीं मिला है, तो यह प्रयास करें

sudo nano /etc/mysql/my.cnf

इसमें टिप्पणी करें

#bind-address = 127.0.0.1

फिर मैसूर को पुनः आरंभ करें

sudo service mysql restart

अब रिमोट लॉगिन का आनंद लें


3

सिर्फ FYI करें मैंने अपने बालों को घंटों तक इस समस्या से बाहर निकाला। आखिरकार मैंने अपने होस्टिंग प्रदाता को कॉल किया और पाया कि मेरे मामले में क्लाउड सर्वर का उपयोग करते हुए कि 1and1 के लिए कंट्रोल पैनल में उनके पास एक द्वितीयक फ़ायरवॉल है जिसे आपको क्लोन करना है और पोर्ट जोड़ना है 3306. एक बार जोड़ा मैं सीधे में मिला ..


यह आपकी स्थिति के लिए बहुत विशिष्ट लगता है। मैं नेटवर्किंग पर ज्ञान का एक अंतहीन स्रोत नहीं हूं, लेकिन क्या आप सुनिश्चित हैं कि यह समाधान इस समस्या पर अच्छी तरह से लागू होता है?
सैंडी जिफोर्ड

2
मेरा भी यह मुद्दा रहा है। क्लाउड होस्टेड सर्वर के साथ आम,
मैथ्यू लॉक

2

जिनके लिए इसकी आवश्यकता है, फ़ायरवॉल पोर्ट 3306 की जाँच करें, यदि आपकी फ़ायरवॉल सेवा चल रही है, तो भी खुला है।


2

यह ब्लॉग कैसे स्थानीय क्षेत्र नेटवर्क पर एक MySQL सर्वर सेटअप करने के लिए एक MySQLखरोंच से स्थापित करने में उपयोगी होगा


@ कोकोकोडको मुझे खुशी है कि इसने :)
कसुन सियामबलपिटिअ

1

और ओएस एक्स के लिए लोगों को पता है कि बाइंड-एड्रेस पैरामीटर आमतौर पर लॉन्च प्लिस्ट में सेट किया गया है न कि my.info फ़ाइल में। तो मेरे मामले में, मैं हटा दिया <string>--bind-address=127.0.0.1</string>से /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist


~/Library/LaunchAgents
प्लिस्ट

1

यदि किसी लूपबैक / स्थानीय पते (जैसे ) के लिए mysqldएक बाइंड पता निर्धारित है 127.0.0.1, तो सर्वर दूरस्थ होस्ट से उपलब्ध नहीं होगा, क्योंकि किसी भी दूरस्थ होस्ट से लूपबैक इंटरफ़ेस तक नहीं पहुँचा जा सकता है।

यदि आप किसी इंटरफ़ेस पर केवल कनेक्शन की अनुमति देना चाहते हैं, तो किसी भी होस्ट से या किसी अन्य बाहरी पते पर कनेक्शन स्वीकार करने के लिए 0.0.0.0( ::IPv4 + 6 के लिए) इस विकल्प को सेट करें ।

स्रोत


0

कुछ बार विंडोज़ पर पीसी के नाम का उपयोग करने की आवश्यकता होती है

पहला चरण) mysql की कॉन्फिग फाइल में डालें:

mysqld.cnf SET बाइंड-एड्रेस = 0.0.0.0

(tcp / ip पर पुन: कनेक्शन देने के लिए)

दूसरा चरण) mysql में उपयोगकर्ता बनायें, तालिका उपयोक्ता पर पीसी के नाम के साथ तालिका उपयोगकर्ता , न कि आईपी

यहां छवि विवरण दर्ज करें


0

रिमोट रूट एक्सेस को सक्षम करना खतरनाक हो सकता है। यदि आप अधिक प्रतिबंधात्मक अनुमतियों के साथ उपयोगकर्ता खाते सेट करना चाहते हैं, तो यह बेहतर होगा। निम्नलिखित तीन चरणों को करना चाहिए।

  1. सुनिश्चित करें कि आपके साथ शुरू होने वाली लाइन bind-address ...आपके my.ini या my.cnf फ़ाइल में कम से कम टिप्पणी की गई है। यदि यह मौजूद नहीं है, तो आगे बढ़ें। आप इस फाइल C:\ProgramData\MySQL\MySQL Server 8.0को विंडोज पर पा सकते हैं ।

  2. बाद में, जांचें कि आप जिस उपयोगकर्ता खाते के साथ कनेक्शन स्थापित कर रहे हैं localhost, वह सीमा में होस्ट्स मैचिंग फ़ील्ड में नहीं है। हालांकि यह अनुशंसित नहीं है, आप इसके बजाय %परीक्षण उद्देश्यों के लिए उस क्षेत्र में रख सकते हैं। आप MySQL वर्कबेंच के साथ सर्वर से एक स्थानीय कनेक्शन खोलकर ऐसा कर सकते हैं, फिर मेनू बार से सर्वर> उपयोगकर्ताओं और विशेषाधिकार पर जा सकते हैं और उस उपयोगकर्ता खाते को खोज सकते हैं जिसे आप कनेक्ट करना चाहते हैं।

"होस्ट्स टू होस्ट्स मैचिंग" फ़ील्ड वह है जो आपको गैर-स्थानीय रूप से कनेक्ट करने के लिए नापसंद है। यानी यह स्वीकृत पतों को IP पतों के पैटर्न में सीमित करता है। आदर्श रूप से, आपको स्थैतिक आईपी पते या सबनेट से MySQL सर्वर तक पहुंच प्राप्त करनी चाहिए, ताकि आप यथासंभव प्रतिबंधात्मक हो सकें।

  1. जाहिर है, आपके फ़ायरवॉल को MySQL सर्वर एप्लिकेशन को आपके इच्छित पोर्ट पर संवाद करने की अनुमति देनी चाहिए। आपके और आपके सर्वर के बीच भौतिक नेटवर्किंग उपकरण को उस पोर्ट पर संचार की अनुमति देनी चाहिए जिसे आप कनेक्ट करना चाहते हैं। (पोर्ट 3306 आमतौर पर)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.