一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

解决MySQL不允许从远程访问的方法

时间:2009-12-16 编辑:简简单单 来源:一聚教程网

解决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;     //使权限立刻生效

 

热门栏目