MySQL8.0升级到MySQL8.4避坑:密码插件问题
对于广大运维和DBA来说MySQL8.0即将结束官方支持EOL已经是板上钉钉的事。按照Oracle官方的版本生命周期策略MySQL8.0的常规支持周期逐步收尾后续仅保留有限的安全修复不再提供功能更新与全面技术支持。为了保障业务稳定性、安全性并获得新特性将集群升级至MySQL8.4 LTS长期支持版本成为绝大多数企业的首选方案。而生产环境最稳妥的升级路径几乎都是这套标准流程搭建一套全新MySQL8.4从库通过mysqldump从MySQL8.0主库全量备份,再导入到MySQL8.4从库配置主从复制完成数据同步应用连接8.4从库做兼容性、性能、功能验证验证无误后逐步切换流量完成平滑升级但就在第四步应用连接MySQL8.4从库测试时很多同学直接踩坑抛出了这样的经典报错time2026-04-13T19:53:17.76508:00 levelERROR sourceexporter.go:154 msgError opening connection to database errError 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_passwordMySQL8.0中mysql_native_password虽不是默认认证插件但始终默认加载到了MySQL8.4该插件直接默认不加载这是报错的直接根源。2. 该插件已被正式标记废弃Deprecated官方明确mysql_native_password从8.0.34开始废弃在MySQL9.0版本中彻底移除。3. 默认认证插件保持caching_sha2_passwordMYSQL8.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_passwordON重要禁忌不要使用旧参数default_authentication_pluginmysql_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_STATUSACTIVE即为生效应用即可正常连接从库。2. 方案2迁移至官方推荐caching_sha2_password升级MYSQL8.4的核心目的之一就是拥抱安全规范彻底弃用废弃插件才是符合官方建议的最终方案。2.1. 先启用插件按方案1开启mysql_native_password避免业务断连。2.2 筛查所有旧认证方式用户SELECT user, host, plugin FROM mysql.user WHERE pluginmysql_native_password;2.3 批量修改用户认证插件# 单用户修改ALTER USER exporterlocalhost IDENTIFIED WITH caching_sha2_password BY Tt0008167# 批量修改后刷新权限UPDATE mysql.user SET plugincaching_sha2_password WHERE pluginmysql_native_password;FLUSH PRIVILEGES;2.4 驱动兼容检查确保业务驱动支持caching_sha2_passwordJDBC8.0版本Go MySQL Driver最新版PHP7.4 且启用 nd_mysqlPythonmysql-connector-python 8.02.5. 关闭兼容插件所有用户迁移完成后删除配置文件中的mysql_native_passwordON重启服务即可彻底禁用。三、总结MySQL8.4默认禁用mysql_native_password插件是数据库安全和技术演进的必然趋势。短期可通过启用插件快速解决连接问题但长期来看迁移到caching_sha2_password认证方式才是根本解决方案。在升级或添加MySQL8.4从库时建议提前规划用户认证迁移工作避免因认证方式不兼容导致业务中断。同时关注MySQL官方文档及时了解认证机制的最新变化确保数据库架构的安全性和前瞻性。大家在MySQL数据库升级过程中遇到哪些问题也可以在留言区进行交流。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2518997.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!