一、前言
最近开发一个带有数据库远程管理的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位则需要重新编译程序以及相关库。
三、本地权限解决方案
篇文章应该是管用的:
对于这个问题我尝试了:修改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文件配置正确:
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)目录中。