Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C+;连接到mysql数据库被拒绝+;司机 问题_C++_Mysql_Database Connection - Fatal编程技术网

C++ 从C+;连接到mysql数据库被拒绝+;司机 问题

C++ 从C+;连接到mysql数据库被拒绝+;司机 问题,c++,mysql,database-connection,C++,Mysql,Database Connection,下面是dev.mysql提供的关于Connect/C++的教程。复制示例并成功编译和链接后,我遇到了以下问题: 在抛出“sql::SQLException”实例后终止调用 what():无法连接到“127.0.0.1”(111)上的MySQL服务器 据我所知,111代表权限被拒绝 安装程序 以下是示例代码,该代码取自以下代码并稍作修改: #include <mysql_driver.h> int main() { auto driver = sql::mysql::get_

下面是dev.mysql提供的关于Connect/C++的教程。复制示例并成功编译和链接后,我遇到了以下问题:

在抛出“sql::SQLException”实例后终止调用

what():无法连接到“127.0.0.1”(111)上的MySQL服务器

据我所知,
111
代表权限被拒绝

安装程序 以下是示例代码,该代码取自以下代码并稍作修改:

#include <mysql_driver.h>

int main()
{
    auto driver = sql::mysql::get_mysql_driver_instance();
    auto con = driver->connect("tcp://127.0.0.1:0", "root", "123");

    delete con;
}
我可以使用代码中的凭据轻松运行
mysql
。我禁用了网络,因此它只能在
localhost
上侦听。运行

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
给了我0,所以我猜是端口0

C连接器和命令行接口工作正常

我的操作系统是ubuntu 16.04

我禁用了网络,因此它只能在本地主机上侦听

禁用全部联网(tcp)和指定tcp仅在环回适配器(127.0.0.1)上侦听是有区别的。您的mysql客户端几乎肯定是通过Unix套接字而不是TCP进行连接的,这就是为什么它工作正常的原因。通过运行
mysql--protocol-tcp
验证。如果失败了,那么您就知道您同时禁用了TCP连接,并且它是通过Unix套接字连接的

连接(“tcp://127.0.0.1:0"

如果您确实使用
跳过网络功能禁用了网络功能,则需要更改
connect()
以引用套接字文件。请参阅

unix://path_name

此URL格式允许使用Unix域套接字文件连接到Unix和类Unix系统上的本地主机。path_name值是套接字文件路径名,与在Unix上运行的MySQL和mysqladmin等MySQL客户端的--socket选项相同(请参阅连接到MySQL服务器)

使用以下工具查找您的套接字:

mysql>显示全局变量,如“socket”

如果要保持连接字符串不变,请删除
跳过网络
,改为添加
bind address=127.0.0.1

那应该可以解决它

我禁用了网络,因此它只能在本地主机上侦听

禁用全部联网(tcp)和指定tcp仅在环回适配器(127.0.0.1)上侦听是有区别的。您的mysql客户端几乎肯定是通过Unix套接字而不是TCP进行连接的,这就是为什么它工作正常的原因。请通过运行
mysql--protocol TCP
来验证这一点。如果失败,则您知道您已禁用了所有TCP连接,并且它是通过Unix套接字进行连接的

连接(“tcp://127.0.0.1:0"

如果您确实使用
跳过网络功能禁用了网络功能,则需要更改
connect()
以引用套接字文件。请参阅

unix://path_name

此URL格式允许使用Unix域套接字文件连接到Unix和类Unix系统上的本地主机。path_name值是套接字文件路径名,与在Unix上运行的MySQL和mysqladmin等MySQL客户端的--socket选项相同(请参阅连接到MySQL服务器)

使用以下工具查找您的套接字:

mysql>显示全局变量,如“socket”

如果要保持连接字符串不变,请删除
跳过网络
,改为添加
bind address=127.0.0.1


这应该可以解决问题!

mysql服务器正在运行吗?@Galik,是的。正如我提到的,我可以轻松运行
mysql
并执行查询。端口
0
?你确定这是正确的吗?@Galik,查询给我的是正确的。查询给我的ASCII艺术表中描述了这一点。0写在
端口的右侧
。我会检查你的服务器配置,看看mysql在哪个端口上运行。但是如果命令行正常,它可能是默认的mysql服务器在运行?@Galik,是的。正如我提到的,我可以轻松地运行
mysql
并执行查询。port
0
?你确定这是正确的吗?@Galik,查询告诉了我,所以我猜是这样的是正确的。查询提供给我的ASCII art表中描述了这一点。0写在
端口
的右侧。我将检查您的服务器配置,以查看mysql在哪个端口上运行。但如果命令行起作用,它可能是默认端口
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';