解決MySQL不允許從遠程訪問的方法
解決方法:
1。改表法。可能是你的帳號不允許從遠程登陸,只能在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;
2. 授權法。例如,你想myuser使用mypassword從任何主機連接到mysql服務器的話。
GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'%’ IDENTIFIED BY ‘mypassword’ WI
TH GRANT OPTION;
如果你想允許用戶myuser從ip為192.168.1.6的主機連接到mysql服務器,並使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'192.168.1.3′ IDENTIFIED BY
‘mypassword’ WITH GRANT OPTION;
我用的第一個方法,剛開始發現不行,在網上查了一下,少執行一個語句 mysql>FLUSH PRIVILEGES
使修改生效.就可以了
x:>mysql -u root -pvmware
mysql> use mysql;
mysql> update user set host = ‘%’ where user = ‘root’;
mysql> select host, user from user;
mysql> flush privileges;
注:mysql> flush privileges; 使修改生效。
遠程連接到MySQL需要做的
1. 進入MySQL,創建一個新用戶xuys:
格式: grant 權限 on 數據庫名.表名 用戶@登錄主機 identified by "用戶密碼";
grant select,update,insert,delete on *.* to [email protected] identified by "xuys1234";
查看結果,執行:
use mysql;
select host,user,password from user;
可以看到在user表中已有剛才創建的xuys用戶,host字段表示登錄的主機,其值可以用IP,也可用主機名,將host字段的值改為%就表示在任何客戶端機器上能以xuys用戶登錄到MySQL服務器,建議在開發時設為%.
update user set host = '%' where user = 'xuys';
2.
./mysqladmin -u root -p pwd reload
./mysqladmin -u root -p pwd shutdown
3.
./mysqld_safe --user=root &
記住: 對授權表的任何修改都需要重新reload,即執行第3步.
如果經過以上3個步驟還是無法從客戶端連接,請執行以下操作,在MySQL數據庫的db表中插入一條記錄:
use mysql;
insert into db values('192.168.88.234','%','xuys','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
update db set host = '%' where user = 'xuys';
重復執行上面的第2,3步.
A2:
Web與MySQL數據庫分離開來是一個不錯的選擇,避免因為大量的數據庫查詢占用CPU而使Web資源不足,同時可以使Web服務器的資源盡最大的提供浏覽服務,而數據庫服務器單獨的只處理數據庫事務.
我對這方面的原理不甚太十分了解,我的做法其實就是下面要說的,很簡單.大家有更好的經驗和技巧不妨提出來分享一下.
適用范圍: 擁有獨立主機權限
硬件配置: 兩台服務器,至於具體服務器硬件配置就不在本文范圍內了
其中: A為Web服務器(假設IP為: 192.192.192.192),B為MySQL數據服務器(假設IP為: 168.168.168.168)
著手動作:
1. 在Web服務器A配置好Web服務.關於這方面文章很多了.假設Web服務器的IP為: 192.192.192.192
2. 在數據庫服務器B安裝好MySQL服務
3. 現在新版的MySQL一般默認都不允許遠程連接的,需要建立遠程連接賬號才可以
以命令行方式使用root賬號進入MySQL
mysql -u root -p pass
選擇進入MySQL數據庫
use mysql;
查看所有存在的賬號和地址
SELECT `Host`,`User` FROM `user`;
比如我的就是:
+------------+-------+
| Host | User |
+------------+-------+
| localhost | |
| localhost | pma |
| localhost | root |
+------------+-------+
3 rows in set (0.00 sec)
也就是說,存在三個只允許本地連接的(localhost)賬號,分別為root,pma,空用戶.
現在決定讓root具有上面那個Web服務器A的遠程鏈接的權限,那麼就這樣:
UPDATE `user` SET `Host` = '192.192.192.192' WHERE `User` = 'root' LIMIT 1;
這樣192.192.192.192這台Web服務器就可以遠程連接到這個數據庫服務器了,假如你想讓任何遠程機器都可以連接這個數據庫,就將192.192.192.192換為%,不過不建議這樣做,原因你知道啦!
假如你想新建一個用戶new_user具備遠程鏈接的權限的話,就這樣:
INSERT INTO `user` ( `Host` , `User` , `Password` , `Select_priv` , `Insert_priv` , `Update_priv` , `Delete_priv` , `Create_priv` , `Drop_priv` , `Reload_priv` , `Shutdown_priv` , `Process_priv` , `File_priv` , `Grant_priv` , `References_priv` , `Index_priv` , `Alter_priv` , `Show_db_priv` , `Super_priv` , `Create_tmp_table_priv` , `Lock_tables_priv` , `Execute_priv` , `Repl_slave_priv` , `Repl_client_priv` , `ssl_type` , `ssl_cipher` , `x509_issuer` , `x509_subject` , `max_questions` , `max_updates` , `max_connections` ) VALUES ('192.192.192.192', 'new_user', PASSWORD( 'new_user_password' ) , 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', '0', '0', '0');
將new_user改為你想要的名字就可以了,密碼是: new_user_password,當然你可以隨意設置.
當你的數據庫可以遠程連接後,你就可以在你的Web服務器的論壇config.inc.php中設置$dbhost變量為你的MySQL數據庫服務器B的IP了:
$dbhost = '168.168.168.168';
實際操作中,最好兩台機器在同一個機房的同一網段/防火牆內.當然如果有可能的話,將數據庫服務器放置於Web服務器網絡內的局域網中就更好了.
Q3:
還是這樣簡潔些:
grant all on yourdb.* to yourUsername@yourHost identified by "yourPassword";
flush privileges; //使權限立刻生效