C++ 从C+;连接到mysql数据库被拒绝+;司机 问题
下面是dev.mysql提供的关于Connect/C++的教程。复制示例并成功编译和链接后,我遇到了以下问题: 在抛出“sql::SQLException”实例后终止调用 what():无法连接到“127.0.0.1”(111)上的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_
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
并执行查询。port0
?你确定这是正确的吗?@Galik,查询告诉了我,所以我猜是这样的是正确的。查询提供给我的ASCII art表中描述了这一点。0写在端口
的右侧。我将检查您的服务器配置,以查看mysql在哪个端口上运行。但如果命令行起作用,它可能是默认端口
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';