1. 程式人生 > >遠程連接不上mysql

遠程連接不上mysql

原創 rest put 4.2 遠程連接 mpp tin ddr user

1. 沒有開啟 MySQL 的遠程登陸帳號。
1.找到mysql數據庫的user表。在user表中新建一條數據,設置User(username)和Host(開放訪問MySQL的IP:例如123.118.17.201)以及登錄密碼。這樣就設置了允許訪問的用戶名和IP地址(若想所有IP都可以訪問,則可將Host設置為‘%’,但是這樣很危險,不建議)。

若想myuser使用mypassword從任何主機連接到mysql服務器

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘myuser‘@‘%‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION;


1
若想僅允許用戶myuser從ip為 123.57.20.21 的主機連接到mysql服務器,並使用mypassword作為密碼

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘myuser‘@‘123.57.20.21‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION;
1
2.修改完user表後執行 flush privileges 刷新權限。

如果上述方法沒能成功解決問題,請繼續往下。

2. 配置文件限制遠程訪問。
1.使用 ss -tlnp 命令查看網絡接口開啟狀態


若如上圖所示,或者沒有開啟3306端口。則mysql僅允許服務器本地訪問。

2.打開 MySQL 配置文件 my.cnf(/etc/mysql/my.cnf)
找到

bind-address = 127.0.0.1
1
或者

skip-networking
1
直接註釋掉,然後重啟mysql。

skip-networking : 開啟 skip-networking 選項可以徹底關閉MySQL的TCP/IP連接方式。

再使用 ss -tlnp 命令查看網絡接口開啟狀態


如果上述方法沒能成功解決問題,請繼續往下。

3. iptables (防火墻) 限制了外部訪問MySQL接口。
首先聲明,此步驟修改要慎重,千萬不要輕易使用sudo iptables -F命令清空iptables,很可能造成服務器拒絕所有端口訪問(包括80端口,也就是服務器上的網站無法訪問了),ssh斷開連接(無法遠程控制),只能通過重啟服務器才能恢復正常。

1.使用 sudo iptables -L -n 查看iptables設置

# sudo iptables -L -n

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
發現服務器僅開放了21(ftp),22(ssh),和80(http)端口。

2.修改 iptables

#將iptables配置存儲到一個文件
# sudo iptables-save > ~/iptables.save
# 編輯這個文件
# sudo vim ~/iptables.save

# Generated by iptables-save v1.4.21 on Tue Sep 13 09:00:12 2016
*filter
:INPUT DROP [31186:1828159]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [73190648:74353549865]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Sep 13 09:00:12 2016
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
做出如下修改:

# Generated by iptables-save v1.4.21 on Tue Sep 13 09:00:12 2016
*filter
:INPUT DROP [31186:1828159]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [73190648:74353549865]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT


-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
#-s 後為允許訪問的IP
#-A INPUT -p tcp -m tcp -s 123.57.20.21 --dport 3306 -j ACCEPT

COMMIT
# Completed on Tue Sep 13 09:00:12 2016
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
保存

3.將iptables.save中的配置應用到服務器的iptables中

# sudo cat ~/iptables.save | sudo iptables-restore
#(註意:這樣修改iptables只能臨時生效,重啟服務器後會失效,要想永久生效,需要修改開機啟動時iptables默認讀取的文件:/etc/iptables/rules.v4(ubuntu14.04))

# centos修改修改iptables的配置文件路徑為/etc/sysconfig/iptables
1
2
此時使用 sudo iptables -L -n 查看iptables設置

# sudo iptables -L -n

Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT tcp -- 123.57.20.21 0.0.0.0/0 tcp dpt:3306
ACCEPT tcp -- 123.57.20.21 0.0.0.0/0 tcp dpt:3306
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
再次嘗試連接mysql應該既可以連接成功了

擴展:數據庫添加權限

進入

cd /opt/lampp/bin

./mysql -uroot -p

默認密碼為空

grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘123456‘ with grant option;

flush privileges;
---------------------
作者:crossangles_2017
來源:CSDN
原文:https://blog.csdn.net/crossangles_2017/article/details/79529064
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

遠程連接不上mysql