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

无SSL的MariaDB与QMySqlDriver连接报2026错误的解决方案问询

Qt QMYSQL驱动连接无SSL的MariaDB(LAMPP环境)报2026错误的解决方案

问题描述

在LAMPP环境中运行的MariaDB默认未启用SSL,phpMyAdmin可正常连接,但使用QMARIADB-Driver的Qt应用(5.15.2和6.10.1版本)连接时出现2026错误:

QSqlError("2026", 
"QMYSQL: Unable to connect", 
"TLS/SSL error: SSL is required, but the server does not support it")

需求为本地无SSL连接,且无法为MariaDB安装SSL。经排查:

  • QMySqlDriver针对MariaDB屏蔽了MYSQL_OPT_SSL_MODE连接参数(qsql_mysql.cpp中的条件编译排除了MariaDB)
  • my.conf中[Client] skip-ssl=true配置对QMySqlDriver无效
  • 该问题在新版LAMPP 8.2.12(MariaDB 10.4.32)中出现,旧版LAMPP 7.4.2(MariaDB 10.4.11)无此问题

环境信息

  • 系统:SuSE 16
  • Qt版本:5.15.2、6.10.1
  • 报错环境:LAMPP 8.2.12(2025年11月)、MariaDB 10.4.32、libmariadb.so.3、OpenSSL 1.1.1
  • 正常环境:LAMPP 7.4.2-0(2020年1月)、MariaDB 10.4.11

解决方案

方案1:修改Qt的QSqlMySQL驱动源码重新编译

由于Qt的QMySqlDriver针对MariaDB屏蔽了MYSQL_OPT_SSL_MODE参数,需修改驱动源码:

  1. 找到Qt源码中的qsql_mysql.cpp文件:
    • Qt 5路径:qtbase/src/plugins/sqldrivers/mysql
    • Qt 6路径:qtbase/src/plugins/sqldrivers/mysql
  2. 调整条件编译逻辑,允许为MariaDB设置MYSQL_OPT_SSL_MODE:
    原代码类似:
    #ifndef Q_CC_MSVC
    #if MYSQL_VERSION_ID >= 80000 || defined(MARIADB_VERSION_ID)
    // 针对MySQL 8+或MariaDB的处理,屏蔽SSL_MODE设置
    #else
    mysql_options(d, MYSQL_OPT_SSL_MODE, SSL_MODE_DISABLED);
    #endif
    #endif
    
    修改为:
    #ifndef Q_CC_MSVC
    mysql_options(d, MYSQL_OPT_SSL_MODE, SSL_MODE_DISABLED);
    #endif
    
  3. 重新编译Qt的MySQL驱动:
    • Qt 5:执行qmake生成Makefile,再运行make && make install
    • Qt 6:通过cmake配置编译环境后,执行编译安装流程

方案2:通过连接字符串强制禁用SSL

尝试在Qt数据库连接配置中添加sslmode=disable参数,部分场景下libmariadb库可识别该参数:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("your_db_name");
db.setUserName("your_user");
db.setPassword("your_password");
db.setConnectOptions("sslmode=disable"); // 添加此参数
if (!db.open()) {
    qDebug() << db.lastError();
}

方案3:替换libmariadb库

将新版LAMPP中的libmariadb.so.3替换为旧版LAMPP(7.4.2)中的对应库文件,注意版本兼容性:

  1. 备份新版LAMPP目录下的libmariadb.so.3(通常路径为lampp/lib/)
  2. 复制旧版LAMPP中的libmariadb.so.3到新版对应目录
  3. 更新动态链接库缓存:执行ldconfig

方案4:修改MariaDB用户权限

在MariaDB中为目标用户设置允许非SSL连接的权限:

ALTER USER 'your_user'@'localhost' IDENTIFIED BY 'your_password' REQUIRE NONE;
FLUSH PRIVILEGES;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 22:12:47