MySQL ERROR 2003 (HY000) 無法遠端連線

前面兩篇:Java 連結 MySQLJSP 連結 MySQL 有提到遠端連線設定的方式,但自己回頭看才發現很不清楚啊!因最近朋友遇到類似問題,在這邊完整記錄一下。

先來了解一下 MySQL 遠端登入需要有哪些條件:

  • 帳號要對
  • 密碼要對
  • IP 要對

除了上面這些還有呢?第一次遇到這個錯誤還真的很難處理,上面三個都對了,卻還是一直噴錯誤出來,死活都不讓連。


這邊小蛙大概提一下自己了解的,需要詳細說明的,請自行 Google 囉!以下說明皆以小蛙使用的 Ubuntu 16.04 為主,Ubuntu 下的 MySQL 預設只允許本機連線,其他版本的小蛙不清楚,例如:CentOS 可能還要額外設定打開防火牆 port … 這些暫時不討論,根據上面的敘述我們可以得知,會有一個設定檔的某個設定可以打開禁忌,沒錯,開始設定吧!

設定 mysqld.cnf

這個可能根據不同的版本會叫不同的名字,也可能會放在不同的地方,例如:mysql.conf, mysql.cnf, mysqld.cnf, my.ini … anyway 自己拼湊看看,下面是小蛙的範例:

# 編輯 mysql 設定檔
vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 把這行註解掉,預設只允許 127.0.0.1 連線
#bind-address = 127.0.0.1

好了,重新啟動 MySQL 後,大功告成!興奮的跑去連線,這時候你會罵一聲 X!最好是這樣就可以了,沒錯喔!到這邊其實就可以允許外部連線了(扣除上面提到有額外設定防火牆的情況外),為什麼還是無法連線呢?這又要回到 MySQL 的連線機制了,上面提到除了 帳號、密碼、IP 之外,MySQL 自己有一個使用者權限表,在這權限表裡面詳細記錄了 OO 使用者,密碼是 XX,允許連線的位置是 ZZ,連進來之後有的權限是 AABBCCDD … 等資訊,到這邊懂了嗎?如果上述設定都好了,卻還是無法連線,很大的機率是「允許連線位置是 ZZ」這邊造成的啊!
什麼?我們來前往一探究竟,先用本機登入自己的 MySQL

mysql -u root -p
# 輸入密碼
use mysql;
select host, user from user;
+----------------+------------------+
| host           | user             |
+----------------+------------------+
| 123.3.3.3      | root             |
| localhost      | phpmyadmin       |
| localhost      | root             |
+----------------+------------------+

這邊可以看到允許從 localhost 及 123.3.3.3 的 root 使用者登入,locahost 的 phpmyadmin 使用者登入,讓我們來設定可以遠端登入吧!

(這個步驟如果有 phpmyadmin 的話,可以直接透過 phpmyadmin 來設定更方便)

創建可遠端登入使用者

mysql -u root -p
# 輸入密碼

use mysql;
# 新建一個使用者並允許所有權限
GRANT ALL ON *.* TO 'user_name'@'from_ip' identified by 'password';

# 更新權限,這行一定要輸入
FLUSH PRIVILEGES; 

這樣一來就會建立一個使用者叫做 user_name 密碼是 password,並且允許從 from_ip 遠端登入,如果希望該使用者可以從「任意IP」登入的話,可以把 from_ip 換成「%」,但是要注意喔!如果是開放 root 可以從任意地方登入,又擁有所有權限 … 那 … 風險應該不用小蛙提醒,就記錄到這邊了!希望能幫助到有需要的人。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *