对于广大运维和DBA来说,MySQL8.0即将结束官方支持(EOL)已经是板上钉钉的事。按照Oracle官方的版本生命周期策略,MySQL8.0的常规支持周期逐步收尾,后续仅保留有限的安全修复,不再提供功能更新与全面技术支持。
为了保障业务稳定性、安全性并获得新特性,将集群升级至MySQL8.4 LTS(长期支持版本)成为绝大多数企业的首选方案。
而生产环境最稳妥的升级路径,几乎都是这套标准流程:
搭建一套全新MySQL8.4从库
通过mysqldump从MySQL8.0主库全量备份,再导入到MySQL8.4从库
配置主从复制,完成数据同步
应用连接8.4从库做兼容性、性能、功能验证
验证无误后,逐步切换流量,完成平滑升级
但就在第四步应用连接MySQL8.4从库测试时,很多同学直接踩坑,抛出了这样的经典报错:
time=2026-04-13T19:53:17.765+08:00 level=ERROR source=exporter.go:154 msg="Error opening connection to database" err="Error 1524 (HY000): Plugin 'mysql_native_password' is not loaded"明明主库8.0连接一切正常,全量数据也导入成功,为什么从库8.4就连不上?核心原因只有一个:MySQL8.4已默认禁用mysql_native_password认证插件。
一、MySQL8.4对mysql_native_password的关键变更
我们直接对照MySQL官方说明,核心变更如下:
1. mysql_native_password服务端插件默认禁用
MySQL8.0之前默认密码认证插件式mysql_native_password,MySQL8.0中,mysql_native_password虽不是默认认证插件,但始终默认加载;到了MySQL8.4,该插件直接默认不加载,这是报错的直接根源。
2. 该插件已被正式标记废弃(Deprecated)
官方明确:mysql_native_password从8.0.34开始废弃,在MySQL9.0版本中彻底移除。
3. 默认认证插件保持caching_sha2_password
MYSQL8.0/8.4的默认认证插件一致,但MySQL8.4不再兼容旧的原生密码插件,导致从MySQL8.0同步过来的、使用mysql_native_password的业务用户无法连接。
4. 为什么mysqldump导入后会触发报错?
使用mysqldump全量备份MySQL8.0主库时,mysql.user系统表中的用户、密码、认证插件信息会被一并导出。这些在MySQL8.0中正常使用mysql_native_password的账号,导入MySQL8.4后,因插件未加载,直接认证失败。
二、解决方案
针对先搭从库做兼容性测试的升级场景,我们分快速临时方案(优先保障业务验证)和长期合规方案(彻底告别废弃插件)两种,DBA可按需选择。
1. 方案1:临时启用mysql_native_password插件
此方案不改动业务账号,仅开启MySQL8.4从库的兼容插件,完成升级验证后再逐步整改。
1.1 修改MySQL8.4配置文件
编辑my.cnf/my.ini,在[mysqld]模块添加:
[mysqld]# 启用mysql_native_password插件(MySQL8.4专用参数)mysql_native_password=ON重要禁忌:
不要使用旧参数default_authentication_plugin=mysql_native_password
该参数在MySQL8.4中已移除,配置会直接导致数据库启动失败。
1.2 重启MySQL8.4服务
# CentOS/RHEL systemdsystemctl restart mysqld# Debian/Ubuntusystemctl restart mysql1.3 验证插件状态
登录MySQL执行:
SELECT PLUGIN_NAME, PLUGIN_STATUSFROM information_schema.PLUGINSWHERE PLUGIN_NAME = 'mysql_native_password';显示PLUGIN_STATUS:ACTIVE即为生效,应用即可正常连接从库。
2. 方案2:迁移至官方推荐caching_sha2_password
升级MYSQL8.4的核心目的之一就是拥抱安全规范,彻底弃用废弃插件才是符合官方建议的最终方案。
2.1. 先启用插件
按方案1开启mysql_native_password,避免业务断连。
2.2 筛查所有旧认证方式用户
SELECT user, host, plugin FROM mysql.user WHERE plugin='mysql_native_password';2.3 批量修改用户认证插件
# 单用户修改ALTER USER 'exporter'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Tt0008167'# 批量修改后刷新权限UPDATE mysql.user SET plugin='caching_sha2_password' WHERE plugin='mysql_native_password';FLUSH PRIVILEGES;2.4 驱动兼容检查
确保业务驱动支持caching_sha2_password:
JDBC:8.0+版本
Go MySQL Driver:最新版
PHP:7.4 + 且启用 nd_mysql
Python:mysql-connector-python 8.0+
2.5. 关闭兼容插件
所有用户迁移完成后,删除配置文件中的mysql_native_password=ON,重启服务即可彻底禁用。
三、总结
MySQL8.4默认禁用mysql_native_password插件是数据库安全和技术演进的必然趋势。短期可通过启用插件快速解决连接问题,但长期来看,迁移到caching_sha2_password认证方式才是根本解决方案。
在升级或添加MySQL8.4从库时,建议提前规划用户认证迁移工作,避免因认证方式不兼容导致业务中断。同时,关注MySQL官方文档,及时了解认证机制的最新变化,确保数据库架构的安全性和前瞻性。
大家在MySQL数据库升级过程中遇到哪些问题,也可以在留言区进行交流。