首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C++驱动程序拒绝连接mysql数据库

问从C++驱动程序拒绝连接mysql数据库
EN

Stack Overflow用户
提问于 2017-09-08 17:48:19
回答 1查看 918关注 0票数 0

问题

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

在引发'sql::SQLException‘实例后调用终止 what():无法连接到'127.0.0.1‘(111)上的MySQL服务器

据我所知,111代表拒绝许可。

设置

下面是摘自这里并稍加修改的示例代码:

代码语言:javascript
复制
#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;
}

尝试使用tcp://127.0.0.1:3306会得到同样的结果。

下面是CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.9)
project(mysql_try)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp)
add_executable(mysql_try ${SOURCE_FILES})

target_include_directories(mysql_try PUBLIC /usr/local/include/mysql++)
target_link_libraries(mysql_try mysqlclient /usr/local/lib/libmysqlcppconn-static.a pthread dl)

我可以使用代码中的凭据轻松地运行mysql。我禁用了网络,所以它只会监听localhost。正在运行

代码语言:javascript
复制
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

给了我0,所以我想它是0端口。

C连接器和命令行接口工作得很好。

我的操作系统是ubuntu 16.04。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-08 19:03:27

我禁用了网络,所以它只会在本地主机上监听。

禁用所有网络( tcp )与指定tcp仅在环回适配器上侦听(127.0.0.1)是有区别的。您的mysql客户端几乎肯定是通过Unix套接字连接,而不是通过TCP连接,这就是为什么这样做很好。通过运行mysql --protocol tcp验证这一点。如果失败,那么您就知道您在一起禁用了所有TCP连接,并且它通过Unix套接字进行连接。

连接(“tcp://127.0.0.1:0”)

如果确实禁用了使用skip-networking的网络,则需要将connect()更改为引用套接字文件。请参阅医生们

unix://path_name 这种URL格式允许使用Unix域套接字文件连接到Unix和类Unix系统上的本地主机。path_name值是套接字文件路径名,与运行在Unix上的MySQL客户机(如mysql和mysqladmin )的-套接字选项一样(参见连接到MySQL服务器)。

查找您的套接字:

mysql>显示像“套接字”这样的全局变量

如果希望保持连接字符串不变,请删除skip-networking,然后添加

bind-address = 127.0.0.1

那应该能修好它!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46122028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档