MySQL 8.0 使用MySQLWorkbench出现“外部组件发生异常”和“authentication plugin 'caching_sha2_password”的解决办法

本文针对MySQL8.0在Workbench中遇到的外部组件异常问题及“caching_sha2_password”认证插件不兼容的情况提供了解决方案。介绍了正确的安装步骤,并详细说明如何修改配置文件以使用“mysql_native_password”插件。

1、“外部组件发生异常”的错误在网上找到两个相关博客,以下为记录,希望有同样问题的人少走弯路;可惜尝试许久,还是未能解决我的问题


MySQL外部组件发异常

MySQL 8.0 使用workbench出现外部组件异常解决办法

2、补充一点,我是根据“菜鸟教程”的MySQL 安装安装的,这篇教程已经过期不适合MySQL 8.0版本的安装;以下是正确的安装步骤,如果按以下步骤来走的话就不会有标题提到的两个BUG了

MySQL-mysql 8.0.11安装教程

3、继续折腾后在configure server management 发现另一个报错提示:
这里写图片描述 
点next 然后在下面那里看到红色的报错 
Authentication plugin ‘caching_sha2_password’ cannot be loaded: 

4、“authentication plugin 'caching_sha2_password”这个是因为这种密码加密方式【caching_sha2_password】,客户端不支持。修改方法如下:

4.1、Windows平台:

4.1.1、解压ZIP安装:修改根目录下my.ini文件(该文件是自己创建的)增加以下节点

[mysqld]
default_authentication_plugin=mysql_native_password

整个文件如下:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=E:\Software\mysql-8.0.11-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\data\MySQL
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

然后,“sc delete MySQL”卸载 MySQL 服务-->删除目录“E:\Data\MySQL”-->在MySQL安装目录的 bin 目录下执行命令"mysqld --initialize --console"-->mysqld --install [服务名]-->"net start mysql"启动MySQL的服务

4.1.2、安装包安装的方式安装的时候注意以下选项




使用 Qt 连接 MySQL 数据库时,如果出现错误提示与 `caching_sha2_password` 认证插件相关的加载失败问题,通常是由于客户端库不支持 MySQL 8.0 及以上版本默认使用的 `caching_sha2_password` 插件所致。 MySQL 8.0 引入了新的默认认证插件 `caching_sha2_password`,而某些较旧的客户端库(如某些版本的 Qt SQL 模块或其依赖的 MySQL 客户端库)可能无法识别或加载该插件,导致连接失败。这种问题在使用 Qt 的 `QSqlDatabase` 类连接 MySQL 服务器时尤为常见,特别是在开发环境中使用MySQL 客户端库版本较旧的情况下。 ### 解决方案 1. **修改 MySQL 用户的认证方式** 可以将用户的认证方式从 `caching_sha2_password` 改为 `mysql_native_password`,这是旧版本 MySQL 使用的认证方式,兼容性更好。 使用 MySQL 命令行工具执行以下语句: ```sql ALTER USER 'your_user'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES; ``` 这将更改指定用户的认证方式为 `mysql_native_password`,并刷新权限以使更改生效[^2]。 2. **更新 Qt 或 MySQL 客户端库** 确保使用的 Qt 版本及其依赖的 MySQL 客户端库(libmysqlclient 或 mariadb-connector)支持 `caching_sha2_password` 插件。 如果使用的是静态编译的 Qt 库,可能需要重新配置并链接支持新认证插件的 MySQL 客户端库。 3. **配置 Qt 数据库连接参数** 在 Qt 代码中设置连接参数时,可以尝试显式指定字符集连接属性,以避免潜在的兼容性问题: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("your_database"); db.setUserName("your_user"); db.setPassword("your_password"); db.setConnectOptions("CLIENT_MULTI_STATEMENTS"); ``` 4. **检查插件路径权限** 如果希望保留 `caching_sha2_password` 插件,需确保 MySQL 服务器上的插件路径配置正确,并且客户端库可以访问相应的 `.so` 文件(如 `/usr/lib/mysql/plugin/caching_sha2_password.so`)[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值