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

mysql_real_connect()试图建立到运行host的一个MySQL数据库引擎的一个连接。其函数原形为:

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)

我要编一段程序用来远程连接一个mysql数据库。我在数据库的本机上做试验,发现mysql_real_connect()的第二个参数设为"localhost"时可以正常连接,当改写为该机器的IP地址"192.168.100.2"时就连接失败。我在程序中写的原句为:

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语句添加。事实是这根本不行,我按照作了,表是变了,但还是连不上。后来经过询问才知道,要想改,结合我的情况,必须用下面的这条语句:

grant all privileges on mydns.* to 'root'@'%';

来改变root帐号的权限。如果添加新帐号也是如此。想必这个表比较特殊,用普通的SQL语句不能操作。如果帐号有密码,后面再加上identified by '***'(*为你帐号的密码)就可以了。

上面来自踏雪无痕的博客,看过之后,发觉困扰我的事情可以按照上面的方法解决,就转下来,方便以后的学习。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种常用的关系型数据库管理系统,mysql_real_connect()是MySQL C API提供的一个函数,用于建立与MySQL服务器的连接。下面是mysql_real_connect()函数的用法: ``` MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); ``` 参数说明: - mysql:已经初始化的MYSQL结构体指针,用于存储连接和查询结果。 - host:MySQL服务器的主机名或IP地址。 - user:连接MySQL服务器的用户名。 - passwd:连接MySQL服务器的密码。 - db:连接MySQL服务器后要使用的数据库名。 - port:MySQL服务器连接端口,默认为3306。 - unix_socket:UNIX域套接字文件路径。 - clientflag:用于设置连接选项。 函数返回一个MYSQL结构体指针,代表与MySQL服务器的连接连接建立成功时返回非空指针,否则返回空指针。 下面是一个建立与MySQL服务器连接的示例: ``` #include <mysql.h> #include <stdio.h> int main() { MYSQL *conn; char *host = "localhost"; char *user = "root"; char *password = "123456"; char *database = "test"; conn = mysql_init(NULL); if (!conn) { printf("MySQL initialization failed!\n"); return 1; } conn = mysql_real_connect(conn, host, user, password, database, 0, NULL, 0); if (conn) { printf("MySQL connection succeeded!\n"); } else { printf("MySQL connection failed!\n"); } mysql_close(conn); return 0; } ``` 在这个示例中,我们使用mysql_init()函数初始化一个MYSQL结构体指针,然后使用mysql_real_connect()函数建立与MySQL服务器的连接。如果连接建立成功,则输出"MySQL connection succeeded!",否则输出"MySQL connection failed!"。最后使用mysql_close()函数关闭与MySQL服务器的连接。 希望这个示例能够帮助你理解mysql_real_connect()函数的用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值