在CentOS虛擬機上安裝好了MySQL服務以后,在windows上用Workbench客戶端去連接時碰到很多問題,現在把解決過程記錄一下。
1.在Windows上ping CentOS IP是可以ping通的,在Workbench上配置好后出現如下提示,
在Windows命令行里輸入 telnet 192.168.199.129 3306 執行,也得到:could not open connection to the host, on port 3306 這樣的提示。
在網上查了一下,覺得可能是3306端口沒有打開,先檢查一下3306端口的使用情況,
3306這個端口沒有被別的進程占用。然后看看防火牆的情況,CentOS7中防火牆改成了firewall,查看firewall的服務狀態,
firewall防火牆正在運行。接下來查詢3306端口是否開放,輸入 firewall-cmd --query-port=3306/tcp,如果顯示的是no,則輸入 firewall-cmd --permanent --add-port=3306/tcp 開放3306端口,
重啟防火牆,輸入 firewall-cmd --reload。
2.完成以上步驟后,再次在Windows命令行中輸入 telnet 192.168.199.129 3306 執行,得到類似:host is not allowed to connect mysql 這樣的提示。
在網上查了一下,似乎是權限的問題,一般有兩個途徑,
第一個方法,可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql后,更改 "mysql" 數據庫里的 "user" 表里的 "host" 項,從"localhost"改稱"%",
在CentOS虛擬機中進去MySQL,用下面的語句,
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
但是改完了后,還是不行,還是提示 host is not allowed to connect mysql。
試第二個方法,授權,例如你想myuser使用mypassword從任何主機連接到MySQL服務器的話,用下面的語句,
mysql>grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option;
mysql>flush privileges;
執行完后成功了,可以用workbench連接上MySQL服務了。
===============================================7月4號添加
有時在上述操作都完成后,連接服務器時還是會報錯: Authentication plugin 'caching_sha2_password' cannot be loaded, 這是因為mysql 8.0 默認使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password。
從 5.7 升級 8.0 版本的不會改變現有用戶的身份驗證方法,但新用戶會默認使用新的 caching_sha2_password 。
方法之一,修改用戶的密碼和加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
這里的用戶名和密碼根據實際情況來輸入。