Qt远程连接MySQL
基于项目需求,现需要在Windows环境下使用Qt项目远程连接Ubuntu下的MySQL数据库。
一、
Qt在5.12版本后下载不再自带QMYSQL 驱动,所以如果要使用QMYSQL驱动需要自己编译。
1. 下载mysql-connector-c-6.1.11源码
下载地址:https://downloads.mysql.com/archives/c-c/
下载对应位数版本的源码,
注意,使用的Qt版本和数据库MySQL的版本位数必须相同,既要么都是32位,要么都是64位。
2. 打开官方提供文件sqldrivers.pro
文件所在路径为D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers
D:\Qt是我的Qt的安装目录,如果没有找到Src文件夹,则使用Qt的MaintenanceTool.exe在选择组件时选中Source。
3. 编译源码
3.1 修改.pro文件
注释掉 QMAKE_USE += mysql语句,不然会报错找不到
添加库文件路径LIBS和 头文件路径(直接复制过来的路径是 \ ,需要修改成 / )
指定编译后的结果文件存放的地方 DESTDIR
3.2 修改qsqldriverbase.pri文件
该文件中有这么一句
include($$shadowed($$PWD)/qtsqldrivers-config.pri)
但是在Qt的文件夹中并不能找到该文件,会报错。但是,我们可以在文件夹中找到configure.pri文件。所以,修改上面语句:
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include (./configure.pri)
3.3 编译程序
在Debug模式下编译或Release模式。
(笔者在Debug下编译成功但没有结果文件,在Release下编译成功得到结果文件
3.4 移动dll文件
将结果文件中的两个DLL文件移动到你的Qt目录下, D:\Qt\5.15.2\msvc2019_64\plugins\sqldrivers(笔者用的msvc)
3.5 移动mysql的库文件
将mysql-connector-c-6.1.11的lib目录下的libmysql.dll放到Qt的目录bin下,(笔者是D:\Qt\5.15.2\msvc2019_64\bin)
3.5 在Qt中查看可用的SQL 驱动
qDebug() << QSqlDatabase::drivers();
4. 远程连接MySQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //选择使用的QSql Driver db.setHostName("192.168.1.229"); //远程连接的数据库IP地址 db.setPort(3306); //数据库提供的端口 db.setUserName("xxx"); //远程连接的用户 db.setPassword("xxx"); // 密码 db.setDatabaseName("0voice"); //要访问的数据库 // db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); if(!db.open()) { qDebug() << db.lastError().text(); }else { qDebug() << "连接成功"; return ; }
需要在MySQL的数据库中有可用于远程访问的用户。
MySQL8.0版本默认的加密方式是caching_sha2_password。但是很多客户端很难支持,笔者在数据库配置中将密码加密方式改为了mysql_native_password。
项目的.pro文件中需要添加 QT += sql
运行时若提示"driver not load",将libmysql.dll放到exe同级文件夹下。
5. SSL问题
ubuntu下的MySQL8.0默认开启远程连接SSL。
所以远程连接需要处理SSL。
5.1 选择关闭ssl
show variables like ‘%ssl%’;
查看数据库的SSL设置情况,
在/etc/mysql/mysql.conf.d/目录下,修改mysqld.cnf文件。
[mysqld]
skip_ssl #在这个位置添加这一行
重启mysql服务
service mysql restart
mysql的SSL就关闭了。
5.2 提供SSL
。。。暂时没找到办法。。。我的Qt使用了setConnectOptions设置了证书也还是提示SSL连接错误
http://slproweb.com/products/Win32OpenSSL.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)