- 剛剛在虛擬主機上安裝mysql, 想使用Navicat 操作mysql. 但是連接不上
報錯: 2003 - can't connect to MySQL server on '192.168.1.108'(10038)
使用apt-get安裝的mysql, 沒有修改任何配置. 在虛擬機里 查看數據庫,
use mysql; # mysql庫里有一個user表 show tables; select user,host from user; # 看到root那一行記錄 root對應的host是localhost, 也就是不能遠程登錄的意思. 需要將其修改成%. update user set host='%' where user='root'; #表示允許遠程其他用戶登錄
還有一種方法(沒有嘗試): grant all privileges on *.* to 'root'@'%' identified by '密碼' with grant option; #也是修改登錄權限,這個和修改表任選其一
- 設置完user表還是不行, 繼續
netstat -apn | grep 3306 #顯示的如果是127.0.0.1:3306那么就注釋/etc/mysql/mysql.conf.d/mysqld.cnf 中的bind-address 127.0.0.1
注釋完成后重啟mysql.
#重啟mysql (Ubuntu系統) /etc/init.d/mysql restart
再使用netstat -apn | grep 3306 查看 如果顯示的是 :::3306 就OK了 連接成功!!!
- flush privileges #刷新權限, 有的時候可能需要刷新一下,
- 上面的是在Windows的Ubuntu虛擬機上操作的, 在服務器上操作的時候發現略有不同, 記錄一下. 在服務器上創建新的用戶的時候, 如果想要修改user表, 不需要修改mysqld.cnf文件, 在修改user 表之后, 重啟mysql 即可生效.
不用注釋掉這一行了。因為這里不是綁定127.0.0.1,如果綁定127.0.0.1,那就注釋掉。
- 如果新買的阿里雲服務器,安裝mysql之后,在服務器上能訪問,Navicat鏈接不上,並且已經按照上面的步驟修改了user表和配置文件mysqld.cnf等,還是不能訪問,原因是沒有開放3306端口。
- 注意:如果user表中同一個用戶名有多個行,比如說root 賬戶,有兩行,一行是host 為localhost 另一行 host 為% , 這個時候如果你在其他電腦登錄mysql 的 root 賬號發現登錄不上去,是因為mysql讀取多個賬號的時候,判斷user,host是有順序的。%排在localhost 的后面,所以判斷結果還是localhost,只能本機登錄。解決辦法:可以臨時修改user表的host為你當前使用的電腦IP,實現永久的在其他電腦登錄mysql , 那就把localhost那個記錄從user表刪除。
-
訪問控制-連接驗證官方文檔:https://dev.mysql.com/doc/refman/8.0/en/connection-access.html