织梦CMS - 轻松建站从此开始!

罗索

用mysql_real_connect()连接远程数据库的问题

落鹤生 发布于 2011-02-12 12:20 点击:次 
我要编一段程序用来远程连接一个mysql数据库。我在数据库的本机上做试验,发现mysql_real_connect()的第二个参数设 为"localhost"时可以正常连接,当改写为该机器的IP地址"192.168.100.2"时就连接失败。
TAG:

mysql_real_connect()试图建立到运行host的一个MySQL数据库引擎的一个连接。其函数原形为:
  1. MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user,
  2.  const char *passwd, const char *db, unsigned int port,
  3.  const char *unix_socket, unsigned int client_flag) 
我要编一段程序用来远程连接一个mysql数据库。我在数据库的本机上做试验,发现mysql_real_connect()的第二个参数设 为"localhost"时可以正常连接,当改写为该机器的IP地址"192.168.100.2"时就连接失败。我在程序中写的原句为:
 
  1. mysql_real_connect(mysql,"192.168.100.2","root","","mydns",0,NULL,0)。 
 
最初,我以为将"localhost"改为"192.168.100.2"之后要将第六个参数端口号写上,但还是不行。由于我是在Linux上做的,所以 想也许需要将第七个参数unix_socket写上,结果还是不行。于是到google找解决方法,发现要远程连接mysql需要为mysql的指定帐号 设置远程连接的权限。在我的程序中,就要为root设置这一权限。事实证明,我之前连接失败正是由于这个原因导致的。但问题是,网上被广泛转贴的方法是错 误的,我照做后还不行,最后问了同学才解决的。下面我具体说一下,望大家不会再被误导。
 
在mysql数据库中有一个mysql库,它里面包含一个user表,里面存有所有帐号及它们的权限及特征。对应我的user表中找到User项为 root的,发现有两项,其Host项分别为localhost和localhost.localdomain。我们只需要把'localhost'改为 '%'就可以让所有远程机器以root帐号登陆mysql服务器。也可以将'localhost'改为某一个ip地址,这样就可以在该地址的机器上登陆 mysql服务器。这些都没有问题,只是网上被广为传颂的一个更改Host项的方法是错误的。他的方法是用update语句将指定User项的Host项 改过来,如果想添加一个新的用于远程访问的帐号,就用insert语句添加。事实是这根本不行,我按照作了,表是变了,但还是连不上。后来经过询问才知 道,要想改,结合我的情况,必须用下面的这条语句:
 
  1. grant all privileges on mydns.* to 'root'@'%'; 
来改变root帐号的权限。如果添加新帐号也是如此。想必这个表比较特殊,用普通的SQL语句不能操作。如果帐号有密码,后面再加上identified by '***'(*为你帐号的密码)就可以了。
 
上面来自踏雪无痕的博客,看过之后,发觉困扰我的事情可以按照上面的方法解决,就转下来,方便以后的学习。
 
原文地址 踏雪无痕
(踏雪无痕)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201102/10869.html]
本文出处:Linuxtyz.cublog.cn 作者:踏雪无痕
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容