解決服務器鏈接錯誤Host ‘XXX’ is not allowed to connect to this MySQL servermysql
在「配置登錄信息和數據庫(mysql)」鏈接中,出現「服務器鏈接錯誤Host 'XXX' is not allowed to connect to this MySQL server」的錯誤。sql
像這種錯誤,就是典型的遠程權限問題。數據庫
問題癥結是MySQL 沒有開放遠程登陸的權限。這時要看你的服務器到底用的那種系統,Linux或者是Windows,這個解決辦法不一樣。解決的辦法就是開啓 MySQL 的遠程登錄賬號。服務器
解決方案:ide
第一步:肯定服務器上的防火牆沒有阻止 3306 端口。this
MySQL 默認的端口是 3306 ,須要肯定防火牆沒有阻止 3306 端口,不然遠程是沒法經過 3306 端口鏈接到 MySQL 的。spa
若是您在安裝 MySQL 時指定了其餘端口,請在防火牆中開啓您指定的 MySQL 使用的端口號。code
若是不知道怎樣設置您的服務器上的防火牆,請向您的服務器管理員諮詢。server
第二步:增長容許遠程鏈接 MySQL 用戶並受權。blog
(1).登錄mysql
(2).建立遠程登錄用戶並受權,在要連接的服務器上操做
mysql> grant all PRIVILEGES on db_name.* to 'username'@'xxx.xxx.xx.x' identified by 'password' WITH GRANT OPTION;
上面的語句表示將數據庫 db_name 的全部權限受權給 username 這個用戶,容許 username 用戶在 xxx.xxx.xx.x 這個 IP 進行遠程登錄,並設置 username 用戶的密碼爲 password。
參數分析:
all PRIVILEGES 表示賦予全部的權限給指定用戶,這裏也能夠替換爲賦予某一具體的權限,例如:select,insert,update,delete,create,drop 等,具體權限間用「,」半角逗號分隔。
db_name.* 表示上面的權限是針對於哪一個表的,db_name指的是數據庫名稱,後面的 * 表示對於全部的表,由此能夠推理出:對於所有數據庫的所有表受權爲「*.*」,對於某一數據庫的所有表受權爲「數據庫名.*」,對於某一數據庫的某一表受權爲「數據庫名.表名」。
username表示你要給哪一個用戶受權,這個用戶能夠是存在的用戶,也能夠是不存在的用戶。
xxx.xxx.xx.x 表示容許遠程鏈接的 IP 地址,你的IP,若是想不限制連接的 IP 則設置爲「%」便可。
password 爲用戶username的密碼。
最後執行了上面的語句後,通常都會當即生效,返回值以下:
Query OK, 0 rows affected (0.01 sec)
若是沒有上面的語句那麼請執行下面的命令,便可當即生效。
Mysql> flush privileges
上面(2)當中的受權語句,在Mysql的圖形界面sql,能夠寫成這樣:
你想root使用123456從任何主機鏈接到mysql服務器的話,代碼以下:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
若是你想容許用戶root從ip爲192.168.1.3的主機鏈接到mysql服務器,並使用123456做爲密碼,代碼以下:
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’192.168.1.3′ IDENTIFIED BY ’123456′ WITH GRANT OPTION;
上面(2)當中的受權還能夠採用改表法:
多是你的賬號不容許從遠程登錄,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql後,更改 "mysql" 數據庫裏的 "user" 表裏的 "host" 項,從"localhost"改稱"%"
mysql -u root -pvmwaremysql>use mysql; mysql>update user set host = '%' where user = 'root'; mysql>select host, user from user;