安裝MySQL數據庫后一般會遇到遠程計算機不能連接的問題,具體問題需要我們排查。
可能一:MySql數據庫是否提供了外部訪問的用戶以及權限?
可能二:MySql的配置文件是否只綁定了本機ip(ubuntu下:/etc/mysql/mysql.conf.d/mysqld.cnf)?
可能三:操作系統的防火牆不允許外部訪問3306端口
本文實例發生的環境是ubuntu16.04,MySql5.7。
排查一:在安裝了MySql數據庫的計算機上,
命令行進入mysql:mysql -u root -p
並輸入用戶root的密碼:
執行語句:select user, host from user;
如果是上述結果,則說明沒有設定外部訪問的用戶,接下來我們給root用戶賦予外部訪問的權限,執行2條語句:
grant all privileges on *.* to 'root'@'192.168.3.%' identified by 'password' with grant option;
flush privileges;
注意password是你給root設定的密碼,注意拼寫,一切ok后再次查看user表內的內容
紅框里的那條記錄就是剛才我們用grant命令添加的,它的意思是局域網內192.168.3.0-192.68.3.255的ip主機都可以通過用戶root和密碼password來訪問。
這里解釋一下grant語句格式
mysql> grant 權限1,權限2,…權限n on 數據庫名.表名 to 用戶名@用戶地址 identified by ‘用戶密碼’ with grant option;
權限1,權限2,…代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等權限。
如果是all privileges或者all,表示賦予用戶全部權限。
如果數據庫名.表名被*.*代替,表示賦予該用戶可以操作服務器上所有數據庫所有表的權限。
用戶地址可以是localhost,也可以是ip地址、機器名字、域名。也可以用’%'表示從任何地址。
‘用戶密碼’必須提供。
最后的 with grant option 表示權限傳遞,意思是允許該用戶將其權限分配給其他人。
以上所有操作也可在圖形界面完成,如果你的ubuntu上安裝了MySql Workbench會很方便:
排查二:配置文件是否只綁定了本機ip,使用gedit文本編輯器打開mysql的配置文件,把bind-address = 127.0.0.0這行注釋掉(句首加上#),當然,也可以綁定你所需的主機,ubuntu終端執行:sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
保存退出,ubuntu終端執行:service mysql restart,或者手動重啟mysql,或者重啟系統。
另外,重啟之后你可以使用 netstat -an|grep 3306 命令來查看端口情況:
紅框內是注釋掉bind-address后才有的,未注釋前沒有。
排查三:關於操作系統的防火牆不允許外部訪問3306端口,請根據操作系統自行排查。
END.