2013-02-08 171 views
196

我已經在本地機器上安裝了MySQL Community Edition 5.5,並且我想允許遠程連接,以便可以從外部源連接。如何允許遠程連接到mysql

我該怎麼做?

+1

可能重複[啓用遠程MySQL連接(http://stackoverflow.com/questions/8380797/enable-remote-mysql-connection) – user 2014-03-10 03:34:37

+0

不要對不是代碼的文本使用代碼格式。無關。 – EJP 2017-11-25 08:51:12

回答

469

這在MySQL中默認是允許的。

默認情況下禁用的是遠程root訪問。如果要啓用,在本地運行SQL命令:

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

,然後找到下面一行,在my.cnf文件,通常生活在/etc/mysql/my.cnf在Unix/OSX系統評論它。在某些情況下,該文件的位置是/etc/mysql/mysql.conf.d/mysqld.cnf)。

如果是Windows系統,可以在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/OSXWindows)以使更改生效。

+0

我做到了(授予權限)但仍然無法連接。我正在使用Windows操作系統我找不到my.cnf – Leo 2013-02-08 18:51:47

+0

更新了答案以反映Windows上my.cnf文件的位置。 – mjuarez 2013-02-08 18:57:21

+3

好吧,我已經在文件的末尾添加了binnd-address = 127.0.0.1,並試圖使用來自外部主機的navicat進行連接,並且我得到10060錯誤 – Leo 2013-02-08 19:03:47

4

如果您的MySQL服務器進程正在偵聽127.0.0.1或:: 1,那麼您將無法遠程連接。如果您在/etc/my.cnf中設置了bind-address設置,則可能是問題的根源。

您還必須爲非localhost用戶添加權限。

+0

奇怪,你的服務器如何能在「127.0.0.1」之外的另一個IP上「收聽」? – Pacerier 2015-01-23 14:27:38

+2

@Pacerier 127.0.0.1僅綁定到回送接口。外部連接將不起作用。系統通常會有多個網絡接口,每個網絡接口都需要專門綁定,或者您可以使用bind-all 0.0.0.0地址。 – tadman 2015-01-23 16:36:00

16

在我的情況下,我試圖連接到分OS的遠程MySQL服務器。在經歷了許多解決方案(授予所有權限,刪除IP綁定,啓用聯網)問題後,仍然沒有解決。

事實證明,在研究各種解決方案時,我遇到了iptables,這讓我意識到mysql端口3306不接受連接。

這是關於如何檢查和解決此問題的小記事。

  • 檢查是否端口正在接受連接:
telnet (mysql server ip) [portNo]
  • 添加IP表規則,允許端口上的連接:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
  • 不會推薦爲生產環境,但如果你的iptables配置不正確,添加規則可能不能解決問題。在這種情況下,下面要做到:
service iptables stop

希望這有助於。

+0

你剛剛救了我的屁股 – JafarAlali92 2017-08-09 13:00:23

26

完成上述所有操作後,我仍然無法遠程登錄爲root,但通過Telnet到端口3306確認MySQL正在接受連接。

我開始看着MySQL中的用戶,注意到有不同的密碼multiple root users

select user, host, password from mysql.user; 

所以在MySQL我再次set all the passwords for root,我終於可以遠程登錄爲root

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

這是對的。在遵循其他答案中的步驟的同時,似乎創建了具有空密碼的用戶帳戶。所以你需要爲它們添加密碼。 – chhantyal 2016-05-25 12:03:55

+1

我花了幾個小時在所有其他建議之後,但只有這個最後工作。 – luizs81 2017-06-01 09:04:27

+0

真棒回答!簡單的執行和修復我的問題 – RLaaa 2017-08-30 19:44:46

1

對於需要它的人,如果您的防火牆服務正在運行,那麼檢查防火牆端口3306也是開放的。

1

僅供參考 我拉我的頭髮,這個問題了幾個小時。最後我把我的託管服務提供商,發現我的情況下使用,在對的1and1控制面板他們有,你有一個二次防火牆的雲服務器克隆和添加端口3306.一旦添加,我就直接進入了。

+0

這聽起來非常特定於您的情況。我不是網絡知識的源泉,但您確定這個解決方案適用於這個問題嗎? – 2016-12-13 21:34:14

+0

我也有過這個問題。與雲託管的服務器共同, – 2017-04-11 07:08:53

1

而對於OS X的人們,請注意綁定地址參數通常在啓動的plist中設置,而不是在my.ini文件中。所以在我的情況下,我從/Library/LaunchDaemons/homebrew.mxcl.mariadb.plist刪除<string>--bind-address=127.0.0.1</string>

+0

plist文件的替代位置:'〜/ Library/LaunchAgents' – 2017-06-14 15:17:38

3

如果您從brew安裝了MySQL,它默認只在本地接口上偵聽。要解決您需要編輯/usr/local/etc/my.cnf並將bind-address127.0.0.1更改爲*

然後運行brew services restart mysql

10

從我的經驗來看,您可以在此路徑下找到配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

(我掙扎了一段時間才能找到這條路徑)

1

請按照以下提到的步驟序來設置通配符遠程訪問MySQL用戶。

(1)打開cmd。 (2)導航到路徑C:\ Program Files \ MySQL \ MySQL服務器5.X \ bin和 運行此命令。

的MySQL -u根-p

(3)輸入根密碼。

(4)執行以下命令以提供權限。

授予特權至'USERNAME'@'IP' 'PASSWORD';

USERNAME:您希望連接到MySQL服務器的用戶名。

IP:您希望允許訪問MySQL 服務器的公共IP地址。

PASSWORD:使用的用戶名的密碼。

IP可以用%代替以允許用戶從任何IP地址連接到 地址。

(5)通過以下命令並退出,沖洗前置物。

FLUSH PRIVILEGES;

exit;

enter image description here

+0

完成之後,我的根目錄仍然存在拒絕訪問。我錯過了什麼? – teapeng 2018-01-04 03:03:57