1. 程式人生 > >MySQL本地可以連線,遠端連線不上的問題

MySQL本地可以連線,遠端連線不上的問題

轉自:http://www.2cto.com/database/201504/391816.html

之前遇到過MySQL本地可以連線但是遠端連不上的問題,沒有記錄,今天在ucloud雲上新申請的伺服器上又遇到這個問題,記錄一下解決過程。

1. 排除網路或防火牆問題

先看是否能ping通遠端伺服器,ping 192.168.1.211,如果不可以就是網路問題。然後,檢查埠是否被防火牆擋住了,telnet 192.168.1.211 3306,如果連線失敗,配置防火牆。

配置防火牆,開啟3306埠
vi /etc/sysconfig/iptables
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允許3306埠通過防火牆)
/etc/init.d/iptables restart(重啟防火牆使配置生效)

<h2 id="2-檢查mysql配置">2. 檢查MySQL配置

如果開啟了防火牆,telnet還是失敗,通過netstat檢視3306的埠狀態:
netstat -apn|grep 3360
tcp6 0 0 127.0.0.1:3306 :::* LISTEN 13524/mysqld

注意紅色的地方,這說明3306被繫結到了本地。檢查一下my.cnf的配置,這裡可以配置繫結ip地址。(在新的mysql版本中,具體配置資訊儲存在/etc/mysql/mysql.conf.d/mysqld.cnf檔案中)
bind-address=addr
不配置或者IP配置為0.0.0.0,表示監聽所有客戶端連線。

ps:我開啟3306埠,並且檢查MySQL配置之後,telent仍然失敗,但是在本機telnet是ok的,再三確認了配置沒有問題。後來跟我們的ucloud賬號管理員提了一下,才知道ucloud管理後臺也需要開啟3306埠,用雲伺服器的留意這個。

3. 檢查使用者訪問許可權

MySQL建使用者的時候會指定一個host,預設是127.0.0.1/localhost,那麼這個使用者就只能本機訪問, 其它機器用這個使用者帳號訪問會提示沒有許可權,host改為%,表示允許所有機器訪問。 

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #mysql -u root -p mysql> use mysql; Database changed mysql> update user set host=’%’ where user=’root’; Query OK,
0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> select host,user from user; +———–+———+ | host | user | +———–+———+ | 127.0.0.1 | root | | % | night | +———–+———+ 2 rows in set (0.00 sec)

方案二:賦予所有ip的root賬戶的訪問許可權

mysql> GRANT SELECT, INSERT, DELETE,UPDATE ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec) 
mysql> SELECT user, host,select_priv, insert_priv, update_priv,delete_priv from mysql.user;
+--------+------------+-------------+-------------+-------------+-------------+
| user   | host       | select_priv | insert_priv | update_priv | delete_priv |
+--------+------------+-------------+-------------+-------------+-------------+
| root   | localhost  | Y           | Y           | Y           | Y           |
| root   | server.gao | Y           | Y           | Y           | Y           |
| root   | 127.0.0.1  | Y           | Y           | Y           | Y           |
| root   | ::1        | Y           | Y           | Y           | Y           |
|| localhost  | N           | N           | N           | N           |
|| server.gao | N           | N           | N           | N           |
| usrabc |%| Y           | Y           | Y           | Y           |
+--------+------------+-------------+-------------+-------------+-------------+
7 rows inset (0.00 sec)

最後,別忘了重啟mysql使配置生效。

# /etc/init.d/mysql restart