最近遇到了一件非常棘手的問題,用或者遠程連接MySQL數據庫居然連接不到,真是頭都大了。網上查閱了一下原因,原來是沒有開通遠程權限或者是端口的問題,好吧,下面我就來回憶一下自己怎么處理這問題的!
當然首先得先確保你填的mysql 主機ip,數據庫名以及密碼等信息都是正確的,最好檢查下,不然就沒用了!!
好了,開始問題整理以及解決辦法
錯誤一:
錯誤原因:
本地IP(xxx.xxx.xxx.xxx)沒有訪問遠程數據庫的權限。于是下面開啟本地IP(xxx.xxx.xxx.xxx)對遠程mysql數據庫的訪問權限。
解決辦法:
1.首先遠程連接進入服務器,在cmd中輸入mysql -u root -p,然后回車,輸入密碼后回車進入mysql命令行。
2.輸入use mysql;
3.輸入 user,,host from user;
可以看到host中只有主機。我們需要將xxx.xxx.xxx.xxx也添加到這里才對。
4.添加方法如下,不同的mysql版本號不一樣,操作口令可能不一樣,請注意:
輸入
grant all on *.* to root@”xxx.xxx.xxx.xxx” by “密碼”;
或者 ?GRANT ALL ON *.* TO ‘root’@’xxx.xxx.xxx.xxx’ BY ‘’ WITH GRANT ;
這相當于是給IP-xxx.xxx.xxx.xxx賦予了所有的權限,包括遠程訪問權限。
然后再輸入
flush ;
這相當于是重新加載一下mysql權限,這一步必須有。
5.再次輸入 user,,host from user;
可以看到host中已經有了新加的IP。
6.現在再次用 for MySQl訪問遠程mysql數據庫,已經能正常打開了。
問題解決。
7.如果還是連接不到,那是不是 MySQL 綁定了本地地址,打開 /etc/mysql/f,
找到:bind- = 127.0.0.1
去除 IP 地址綁定,把它改為:bind- = 0.0.0.0
然后重啟 MySQL :/etc/init.d/mysql
錯誤二:
ERROR 2003 (HY000): Can’t to MySQL on ‘’ (10061)
錯誤原因:
數據庫服務沒有啟動。
解決辦法:
檢查 :在 的任務管理器,或者 unix/linux 下 ps -aux | grep mysql 看一下。確認服務已經啟動。
處理 :啟動 服務
錯誤三:
防火墻未開啟3306了,或者drop了
-- 0.0.0.0/00.0.0.0/0tcp dpt:3306
解決方法:
防火墻需要允許3306端口連接。
drop了的解決方法:
先登錄服務器,用命令 -tuln查看一下:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
...
可以看出,MySQL配置應該沒問題的,當然也確保MySQL用戶密碼等都是對的。
查了半天,懷疑是不是問題(但記不得之前曾經配置過,所以一直沒想這塊):
sudo -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- localhost anywhere tcp dpt:mysql
DROP tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- anywhere anywhere tcp dpt:mysql
ACCEPT tcp -- 192.168.1.0/24 anywhere tcp dpt:mysql

Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
很奇怪這邊怎么會有一個對mysql訪問的DROP規則mysql數據庫不能遠程連接,但還是先刪為敬!
這次再命令多加個參數:
sudo -L -n --line-
Chain INPUT (policy ACCEPT)
num target prot opt source destination

1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4 ACCEPT tcp -- 127.0.0.1 0.0.0.0/0 tcp dpt:3306
5 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
7 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:3306
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
這下每條規則前都有了序號,所以可以根據序號直接來修改或刪除:
sudo -D INPUT 5
把INPUT的第五條規則刪除mysql數據庫不能遠程連接,然后去客戶端再次登錄MySQL,成功!