遇到 Plugin 提示

正在学习 Android Project 时遇到如下的错误:

Plugin [id: 'com.android.application', version: '8.9.2', apply: false] was not found in any of the following sources:

折腾了半天发现是之前自己配置的全局 Gradle 代理配置有问题,全局gradle.properties 在不同系统中的位置如下:

  • Windows: C:\Users<用户名>.gradle\gradle.properties
  • macOS/Linux: ~/.gradle/gradle.properties

我修改了我的代理配置如下:

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=7897
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7897
当你在 MySQL 中修改密码时遇到如下提示: ``` ERROR 1059 (HY000): The password hash doesn&#39;t have the expected format. Check if the correct password hashing plugin is loaded. ``` 或者出现: ``` Plugin &#39;mysql_native_password&#39; is not loaded ``` 或日志中显示: ``` [Warning] Plugin mysql_native_password reported: &#39;Not loaded&#39; ``` 这说明 **MySQL 的密码验证插件没有正确加载**,导致无法设置/验证用户密码,尤其是使用 `ALTER USER` 或 `SET PASSWORD` 命令时失败。 --- ## 🔍 问题原因 MySQL 使用 **认证插件(Authentication Plugin)** 来管理用户如何登录。常见的插件包括: - `mysql_native_password`:传统密码加密方式(基于 SHA1) - `caching_sha2_password`:MySQL 8.0 默认的新密码插件(更安全) - `sha256_password`:用于 SSL 连接的强加密 如果你看到 `plugin &#39;mysql_native_password&#39; is not loaded` 错误,通常是因为: 1. 插件被手动卸载了(例如执行过 `UNINSTALL PLUGIN mysql_native_password;`) 2. 配置文件禁用了该插件 3. 数据目录损坏或初始化异常 4. 使用旧客户端连接 MySQL 8.0+ 且未启用兼容模式 --- ## ✅ 解决方案 ### ✅ 方法一:重新安装缺失的认证插件 #### 1. 登录 MySQL(需要有管理员权限) ```bash sudo mysqld --skip-grant-tables & # 如果无法登录,先跳过权限检查 mysql -u root ``` #### 2. 检查当前是否加载了 `mysql_native_password` 插件 ```sql SELECT * FROM information_schema.plugins WHERE plugin_name = &#39;mysql_native_password&#39;; ``` 如果没有结果,说明插件未加载。 #### 3. 手动安装插件 ```sql INSTALL PLUGIN mysql_native_password SONAME &#39;auth_socket.so&#39;; -- ❌ 错!这是错的 SO 名 ``` 📌 正确命令是: ```sql INSTALL PLUGIN mysql_native_password SONAME &#39;mysql_native_password.so&#39;; ``` > ⚠️ 注意: > - 文件扩展名根据操作系统不同可能是 `.so`(Linux)、`.dll`(Windows) > - 路径由 `plugin_dir` 变量决定 查看插件目录: ```sql SHOW VARIABLES LIKE &#39;plugin_dir&#39;; ``` 示例输出: ```text +---------------+------------------------------+ | Variable_name | Value | +---------------+------------------------------+ | plugin_dir | /usr/lib/mysql/plugin | +---------------+------------------------------+ ``` 确保该路径下存在 `mysql_native_password.so` 文件。 #### 4. 验证插件已加载 ```sql SELECT PLUGIN_NAME, PLUGIN_STATUS FROM information_schema.plugins WHERE PLUGIN_NAME LIKE &#39;%password%&#39;; ``` 你应该能看到: ```text +-----------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-----------------------+---------------+ | mysql_native_password | ACTIVE | | caching_sha2_password | ACTIVE | +-----------------------+---------------+ ``` --- ### ✅ 方法二:通过配置文件恢复默认行为(推荐) 编辑 MySQL 配置文件,强制使用兼容的认证方式。 #### 编辑配置文件 ```bash sudo vim /etc/my.cnf # 或 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf ``` 添加以下内容: ```ini [mysqld] default_authentication_plugin=mysql_native_password ``` > ✅ 这会让新创建的用户默认使用 `mysql_native_password` 认证方式。 保存后重启 MySQL: ```bash sudo systemctl restart mysqld # 或 sudo systemctl restart mysql ``` --- ### ✅ 方法三:为特定用户指定认证插件并重设密码 即使插件已加载,某些用户的 `plugin` 字段可能被错误设置为不存在的插件。 #### 1. 查看用户使用的认证插件 ```sql SELECT user, host, plugin FROM mysql.user WHERE user = &#39;root&#39;; ``` 输出示例: ```text +------+-----------+-----------------------+ | user | host | plugin | +------+-----------+-----------------------+ | root | localhost | caching_sha2_password | +------+-----------+-----------------------+ ``` 如果客户端不支持 `caching_sha2_password`,就会连接失败。 #### 2. 修改用户认证方式并重置密码 ```sql ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED WITH mysql_native_password BY &#39;YourNewPass123!&#39;; ``` 等价于: ```sql ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED WITH mysql_native_password AS &#39;*YOUR_HASHED_PASSWORD*&#39;; -- 一般不用手动指定哈希 ``` 然后刷新权限: ```sql FLUSH PRIVILEGES; ``` ✅ 现在你可以用老版本客户端正常连接了。 --- ## 🛠 应急处理:当所有方法都失效时 ### 启动时跳过权限验证并修复 ```bash # 1. 停止 MySQL sudo systemctl stop mysqld # 2. 以安全模式启动(跳过权限表) sudo mysqld --skip-grant-tables --skip-networking --user=mysql & # 3. 直接登录 mysql -u root # 4. 设置认证插件和密码 mysql> FLUSH PRIVILEGES; mysql> ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED WITH mysql_native_password BY &#39;MySecurePass123!&#39;; mysql> EXIT; # 5. 杀掉临时进程并正常启动 pkill mysqld sudo systemctl start mysqld ``` --- ## 💡 预防建议 | 措施 | 说明 | |------|------| | ✅ 不要随意卸载认证插件 | 尤其是 `mysql_native_password` 和 `caching_sha2_password` | | ✅ 开发环境尽量启用 `mysql_native_password` | 兼容 PHP、Python、Navicat 等工具 | | ✅ 升级到 MySQL 8.0 后注意客户端兼容性 | 推荐升级客户端库至支持 `caching_sha2_password` 的版本 | | ✅ 使用统一的认证策略 | 在 `my.cnf` 中设定 `default_authentication_plugin` | --- ## ✅ 总结 你遇到的 “plugin 密码 is not loaded” 错误本质是: > 🔹 MySQL 无法找到或加载所需的密码认证插件(如 `mysql_native_password.so`),导致不能修改或验证密码。 ✅ 解决步骤总结: 1. 检查 `information_schema.plugins` 是否加载了插件 2. 使用 `INSTALL PLUGIN ... SONAME &#39;mysql_native_password.so&#39;;` 手动安装 3. 或通过 `my.cnf` 设置 `default_authentication_plugin=mysql_native_password` 4. 用 `ALTER USER ... IDENTIFIED WITH mysql_native_password BY &#39;xxx&#39;` 修复用户 5. 重启服务使配置生效 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值