MySQL ERROR 2003 (HY000) 無法遠端連線
前面兩篇:Java 連結 MySQL、JSP 連結 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 可以從任意地方登入,又擁有所有權限 … 那 … 風險應該不用小蛙提醒,就記錄到這邊了!希望能幫助到有需要的人。
MySQL / MariaDB / Oracle 相關文章: