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

35 阅读2分钟

一、前言

        最近开发一个带有数据库远程管理的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及以上:

[>8.0](MySQL :: Download MySQL Community Server)

6.2以下:

[<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 mydb < backup.sql来导入备份的backup.sql数据库文件

四、认证不兼容的问题

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

image.png

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)目录中。