在CentOS 7环境中部署MySQL后,用户认证插件决定了客户端如何校验密码以及服务端如何存储凭证。不同MySQL版本默认的认证插件并不一致,错误配置会直接导致连接被拒。理解插件类型并掌握修改方法,是运维和开发调试数据库连接问题的基础。

一、MySQL常见认证插件类型
MySQL支持多种用户认证插件,其中最常用的是mysql_native_password和caching_sha2_password。前者使用SHA1哈希加随机盐,兼容性极广,几乎被所有历史客户端支持;后者从MySQL 8.0开始作为默认插件,采用SHA256并引入缓存机制,安全性更高,但部分旧驱动无法识别。
在CentOS 7上通过YUM安装的MySQL 5.7默认使用mysql_native_password,而如果使用第三方仓库装了MySQL 8.0,则默认是caching_sha2_password。我们可以通过查询mysql.user表来确认当前用户使用的插件类型,这一步是后续配置的前提。
SELECT user, host, plugin FROM mysql.user;
二、创建用户时指定认证插件
如果要在创建用户的同时明确使用某种插件,可以在CREATE USER语句中通过IDENTIFIED WITH子句声明。这样可以避免后续再修改,也方便在自动化脚本中固化配置。下面示例创建一个只能从本地连接的用户,并强制使用mysql_native_password。
这种方式的优点是配置即生效,不需要重启服务,也不会影响既有用户。但要注意密码必须符合该插件的格式要求,例如mysql_native_password对明文密码长度没有特殊限制,而caching_sha2_password要求使用TLS或明文支持。以下代码展示了两种插件的创建语法:
-- 使用mysql_native_password创建用户 CREATE USER 'appuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPass123'; -- 使用caching_sha2_password创建用户 CREATE USER 'appuser2'@'192.168.0.1' IDENTIFIED WITH caching_sha2_password BY 'StrongPass123';
三、修改已存在用户的认证插件
对于已经创建但插件不符合需求的用户,可以使用ALTER USER命令变更。这在迁移旧系统或升级MySQL后尤其常见。执行变更后,该用户的密码会按新插件规则重新加密存储,旧客户端若不支持新插件就会连接失败,因此需要同步升级驱动。
下面演示将已有用户改为caching_sha2_password,并重新设置密码以触发哈希重写。修改完成后必须执行FLUSH PRIVILEGES,让权限系统重新加载,虽然ALTER USER通常自动生效,但在某些CentOS 7的旧版MySQL中显式刷新更稳妥。
-- 修改用户插件并重置密码 ALTER USER 'appuser'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NewStrongPass456'; FLUSH PRIVILEGES;
四、通过配置文件设置默认插件
如果希望所有新用户都默认使用某插件,可以修改MySQL服务端配置。在CentOS 7中,配置文件通常位于/etc/my.cnf或/etc/my.cnf.d/目录下。添加default_authentication_plugin参数后重启服务即可生效。
需要注意,修改默认插件不会影响已有用户,只对之后创建的用户有效。若服务端是MySQL 8.0且客户端多为旧版PHP或Python库,建议设为mysql_native_password以减少连接故障。以下为配置片段示例,修改后需用systemctl重启mysqld。
[mysqld] default_authentication_plugin=mysql_native_password
# 重启MySQL服务使配置生效 systemctl restart mysqld
五、验证配置结果与连接测试
配置完成后,应从数据库内部和客户端两个层面验证。内部验证就是再次查询mysql.user表,确认plugin列已更新;外部验证则使用对应客户端尝试连接,观察是否报“authentication plugin”相关错误。
若使用命令行客户端连接,可以加参数显式指定插件,便于排查。例如在CentOS 7本机执行mysql -u appuser -p后,若提示 caching_sha2 不支持,可临时用支持该插件的8.0客户端测试。下表对比了两种插件的特性,方便按场景选择。
| 插件名称 | 默认版本 | 客户端兼容性 | 安全特性 |
|---|---|---|---|
| mysql_native_password | MySQL 5.7 | 几乎所有旧客户端 | SHA1加盐,较弱 |
| caching_sha2_password | MySQL 8.0 | 需新驱动支持 | SHA256加缓存,强 |
六、常见误区与处理建议
一个常见误区是认为修改了配置文件就自动转换了老用户的插件,实际上老用户依旧保留原插件,必须逐条ALTER。另一个误区是在Docker或远程连接时忽略了防火墙与bind-address,把认证错误误判为网络问题。
建议在变更前备份mysql系统库,并在测试环境验证客户端兼容性。如果业务使用ORM框架,请查阅其依赖的数据库驱动版本是否支持目标插件,以免上线后大面积连接异常。
# 备份mysql系统库 mysqldump -u root -p --single-transaction mysql > mysql_backup.sql
MySQLauthentication_pluginCentOS_7修改时间:2026-08-04 12:30:19