无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参数,需修改驱动源码:
- 找到Qt源码中的
qsql_mysql.cpp文件:- Qt 5路径:
qtbase/src/plugins/sqldrivers/mysql - Qt 6路径:
qtbase/src/plugins/sqldrivers/mysql
- Qt 5路径:
- 调整条件编译逻辑,允许为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 - 重新编译Qt的MySQL驱动:
- Qt 5:执行
qmake生成Makefile,再运行make && make install - Qt 6:通过
cmake配置编译环境后,执行编译安装流程
- Qt 5:执行
方案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)中的对应库文件,注意版本兼容性:
- 备份新版LAMPP目录下的
libmariadb.so.3(通常路径为lampp/lib/) - 复制旧版LAMPP中的
libmariadb.so.3到新版对应目录 - 更新动态链接库缓存:执行
ldconfig
方案4:修改MariaDB用户权限
在MariaDB中为目标用户设置允许非SSL连接的权限:
ALTER USER 'your_user'@'localhost' IDENTIFIED BY 'your_password' REQUIRE NONE; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者md_dlk
相关产品推荐
相关产品推荐

