Qt MySQL8.X数据库开发问题:本地无权限和认证不兼容

一、前言

        最近开发一个带有数据库远程管理的Qt程序,本地测试通过后,远程连接服务器数据库时发现报错“Authentication plugin 'caching_sha2_password' cannot be loaded: 找不到指定的模块。”,于是上网查询,原来是MySQL8.0以下的客户端只支持mysql_native_password的用户认证方式,和服务器的拥有者简单沟通后服务器那面不能做出退让(新增mysql_native_password认证),只能升级Qt程序了,于是本地重新安装了MySQL8.4,电脑重启后准备用CMD来确认MySQL的安装情况,mysql指令连接又发现报错“Host 'localhost' is not allowed to connect to this MySQL server QMYSQL: Unable to connect”,查询是本地没权限。

二、MySQL下载地址

8.0及以上:
MySQL :: Download MySQL Community Server

6.2以下:
MySQL :: Download MySQL Connector/C (Archived Versions)

注意:8.0以上只支持64bit,如果你的Qt程序是32位则需要重新编译程序以及相关库。

三、本地权限解决方案

篇文章应该是管用的:
mysql8.0以后的ERROR 1130 (HY000): Host ‘localhost‘ is not allowed to connect to this MySQL server_error 1130 (hy000): host 'localhost' is not allowe-CSDN博客

对于这个问题我尝试了:修改mysql服务登录属性、修改mysql配置my.ini文件、以及上述方式都没有用。

如果你也是本地的话,建议直接重新安装,比较数据库数据也没多少,备份重加载也很快。

重新安装步骤:
1.运行对应的安装程序 比如我的mysql-8.4.7-winx64.msi
2.选择remove卸载当前的
3.卸载完成再次运行mysql-8.4.7-winx64.msi
4.创建数据库mysql -u root -p -e "CREATE DATABASE mydb DEFAULT CHARSET utf8mb4;"
4.使用mysql -u root -p mydb < backup.sql来导入备份的backup.sql数据库文件

四、认证不兼容的问题

这里只要重新编译libmysql就可以了,具体步骤:
1、64bit编译套件编译Qt mysql源码(Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql),注意.pro文件配置正确:

2、将编译出的qsqlmysql.dll、qsqlmysqld.dll文件放入对应的套件数据库依赖文件夹(Qt5.14.2\5.14.2\msvc2017_64\plugins\sqldrivers)

3、最后重新编译你的项目即可。

五、遇到的问题

1、程序自动打包后,需要手动添加libmysql.dll(D:\MySQLTemp\MySQL Server 8.4\bin目录中的)

2、如果在其他电脑上报错MYSQL driver not loaded,则直接把MySQL Server 8.4\bin目录中所有DLL文件复制到Qt程序(.exe)目录中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blasit

你是好人呐!大好人呐!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值