You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mysql-connector-c++-8.0.33中readDefaultFile属性失效求助

解决mysql-connector-c++ 8.0.33通过readDefaultFile读取my.cnf连接失败的问题

针对你遇到的MySQL error code: 2003连接错误,结合mysql-connector-c++ 8.x的特性,给出以下具体排查和解决步骤:

1. 确认my.cnf的配置段位置

mysql-connector-c++ 8.x默认仅读取[client]段的配置,而mysql++可能兼容读取[mysql]或其他自定义段。请确保你的socket、用户名等配置放在[client]节点下,而非其他段:

[client]
socket=/var/lib/mysql/mysql.sock
user=your_db_user
password=your_db_pwd
host=localhost

如果之前配置在[mysql]或其他段,直接移到[client]下再测试。

2. 检查配置文件的权限与路径

  • 确认程序运行用户(比如你的账号、web服务账号)对/etc/my.cnf有读取权限,执行命令验证:
    ls -l /etc/my.cnf
    
    权限至少要保证其他用户(或对应运行用户组)有读权限(比如-rw-r--r--)。
  • 确认代码中readDefaultFile指定的路径完全正确,避免拼写错误(比如误写为/etc/mysql/my.cnf)。

3. 清理连接代码中的冲突属性

不要在代码中同时设置readDefaultFile和其他连接属性(比如host、user、socket),否则代码中的属性会覆盖配置文件内容,导致驱动忽略socket配置走TCP连接(触发2003错误)。正确的代码示例:

#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/exception.h>
#include <iostream>

using namespace std;
using namespace sql::mysql;
using namespace sql;

int main() {
    MySQL_Driver *driver;
    Connection *con;
    ConnectOptionsMap conn_props;

    driver = get_mysql_driver_instance();
    conn_props["readDefaultFile"] = "/etc/my.cnf";
    // 不要在这里额外设置host、user、socket等属性

    try {
        con = driver->connect(conn_props);
        cout << "连接成功" << endl;
        delete con;
    } catch (SQLException &e) {
        cout << "# ERR: " << e.what() << " (MySQL error code: " << e.getErrorCode();
        cout << ", SQLState: " << e.getSQLState() << " )" << endl;
    }

    return 0;
}

4. 启用调试日志排查读取过程

通过设置环境变量开启驱动调试日志,查看配置文件是否被正确读取:

export MYSQL_DEBUG=d:t:O,/tmp/mysql_debug.log

运行你的程序后,打开/tmp/mysql_debug.log,搜索my.cnf或socket关键字,确认驱动是否加载到了正确的socket路径。

内容的提问来源于stack exchange,提问作者Vijaykumar Ainapur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:42:10