【问题标题】:Connection refused to mysql database from C++ driver拒绝从 C++ 驱动程序连接到 mysql 数据库
【发布时间】:2018-02-17 16:59:11
【问题描述】:

问题

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

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

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

据我所知,111 代表 Permission Denied。

设置

这是取自here并稍作修改的示例代码:

#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:

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 上收听。跑步

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

给了我 0,所以我猜是端口 0。

C 连接器和命令行界面工作正常。

我的操作系统是 ubuntu 16.04。

【问题讨论】:

  • mysql服务器在运行吗?
  • @Galik,是的。正如我所提到的,我可以轻松运行 mysql 并执行查询。
  • 端口0?你确定这是正确的吗?
  • @Galik,查询给了我,所以我猜它是正确的。它在查询给我的 ASCII 艺术表中进行了描述。 0 写在port 的右侧。
  • 我会检查您的服务器配置以查看 mysql 在哪个端口上运行。但如果命令行有效,它可能是默认的

标签: c++ mysql database-connection


【解决方案1】:

我禁用了网络,因此它只会在 localhost 上侦听。

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

connect("tcp://127.0.0.1:0"

如果您确实使用 skip-networking 禁用了网络,则需要更改您的 connect() 以改为引用您的套接字文件。见the docs

unix://path_name

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

找到你的套接字:

mysql> 显示像'socket'这样的全局变量

如果您想保持连接字符串不变,请删除 skip-networking 并改为添加
bind-address = 127.0.0.1

这应该可以解决它!

【讨论】:

    猜你喜欢
    • 2017-01-23
    • 2021-04-18
    • 2017-11-03
    • 1970-01-01
    • 2019-11-07
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多