VC远程连接MYSQL失败原因收集:mysql_real_connect()
2010-02-05 15:50
543 查看
以下转自:
http://blog.chinaunix.net/u1/43706/showart_351145.html
mysql_real_connect()
试图建立到运行
的一个MySQL
数据库引擎的一个连接。其函数原形为:
我要编一段程序用来远程连接一个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 '***'(*为你帐号的密码)就可以了。
为了解决这个问题用了一下午的时间,费了不少周折,写出来也能让大家少走些弯路。
MYSQL * STDCALL 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 clientflag);
VC一可用的当写汉字到mysql 表里时就看到乱码, 要设字符编码.
mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gb2312"); //设字符编码
mysql_query(myData,"set names 'gbk'"); 设字符编码
****************************************************************************
=======================完善分割线======================================
****************************************************************************
以下为个人经验:
正如上文所说的,连接失败的原因有很,但由于急于解决往往被一些“不明真相”的转载搞得头晕目眩,浪费了更多的时间,
我也一样,看了很多试了很多,发现都不行。
连接本机可,就是远程失败,偶然的一次尝试,连接同事电脑中的MYSQL,居然连上了,
仔细查看原来同事跟我电脑中的MYSQL版本相同,而我要远程连接的版本较新,找到原因就好解决了。
第一反应把libmySQL.dll、libmySQL.lib换成新版本,连接成功!
******************************************************************************
问题终于解决了,但同时还想说点什么,就是大家在转载的同时也把自己的原因分析一下,都试了哪些方法,一转了之实在是无聊的很啊!
http://blog.chinaunix.net/u1/43706/showart_351145.html
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 '***'(*为你帐号的密码)就可以了。
为了解决这个问题用了一下午的时间,费了不少周折,写出来也能让大家少走些弯路。
MYSQL * STDCALL 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 clientflag);
VC一可用的当写汉字到mysql 表里时就看到乱码, 要设字符编码.
mysql_options(conn, MYSQL_SET_CHARSET_NAME, "gb2312"); //设字符编码
mysql_query(myData,"set names 'gbk'"); 设字符编码
****************************************************************************
=======================完善分割线======================================
****************************************************************************
以下为个人经验:
正如上文所说的,连接失败的原因有很,但由于急于解决往往被一些“不明真相”的转载搞得头晕目眩,浪费了更多的时间,
我也一样,看了很多试了很多,发现都不行。
连接本机可,就是远程失败,偶然的一次尝试,连接同事电脑中的MYSQL,居然连上了,
仔细查看原来同事跟我电脑中的MYSQL版本相同,而我要远程连接的版本较新,找到原因就好解决了。
第一反应把libmySQL.dll、libmySQL.lib换成新版本,连接成功!
******************************************************************************
问题终于解决了,但同时还想说点什么,就是大家在转载的同时也把自己的原因分析一下,都试了哪些方法,一转了之实在是无聊的很啊!
相关文章推荐
- VC远程连接MYSQL失败原因收集:mysql_real_connect()
- VC远程连接MYSQL失败原因收集:mysql_real_connect()
- VC连接MYSQL错误资料收集my_real_connect
- Mysql远程连接失败原因(数据库在linux;持续更新中。。。)
- MySQL错误:Can't connect to MySQL server (10060)远程连接数据库失败
- MySQL错误:Can't connect to MySQL server (10060)远程连接数据库失败
- mysql_real_connect 连接失败 问题!
- php mysql_connect 连接数据库失败解决方案
- MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
- Centos下mysql允许远程连接后本地登陆失败问题(已解决)
- 远程连接MYSQL提示Host is not allowed to connect to this MySQL server
- Navicat 远程连接mysql数据库 2003:Can't connect to MySQL server (10060) /1130: Host '192.168.1.3' is not all
- 解决客户端与远程服务器端的连接(mysql) :xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server
- CentOS下mysql远程连接的失败的解决方法
- 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost
- python连接远程mysql失败(必行方法)
- 远程连接MYSQL提示Host is not allowed to connect to this MySQL server(转)
- 怎么解决mysql不允许远程连接的错误1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server“
- MYSQL-远程连接报:Host 'xxxxx' is not allowed to connect to this MySQL server
- 远程连接服务器出现 SQL Error (1130): Host IP is not allowed to connect to this MySQL server 错误