解決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 xuys@192.168.88.234 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; //使許可權立刻生效