解決MySQL不允許從遠端存取的方法

來源:互聯網
上載者:User

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.