当前位置:首页 > 问答 > 正文

MySQL报错MY-010354,审计插件不支持认证事件,远程帮你快速修复问题

MySQL报错MY-010354,这个错误信息通常出现在MySQL的错误日志文件中,而不是直接展示给前端用户,它的完整描述可能类似于:“[ERROR] [MY-010354] [Server] Could not write event 'startup' to the audit log file: Authentication event is not supported.” 或者是在用户尝试登录时,日志中出现与认证相关的事件无法被审计插件处理的错误。

这个错误的核心意思是:你正在使用的MySQL数据库里,安装并启用了一个名为“审计插件”的东西,这个插件就像一个非常尽责的保安,负责记录数据库里发生的所有重要事情,比如谁在什么时候连接了数据库、执行了什么操作等等,然后把这些记录写到一个专门的日志文件里,方便后续查看和审计。

这个“保安”有点死板,它遵循的是一套比较旧的或者说是特定版本的“工作手册”,在这套手册里,它明确被告知:有一种叫做“认证”的事件,是不需要记录或者说不被允许记录的。“认证事件”具体指的是什么呢?就是用户登录数据库时,输入用户名和密码进行身份验证的这个过程。

问题来了,你的MySQL服务器可能因为版本升级,或者审计插件本身被更新了,导致在数据库启动时,或者在有新用户登录时,系统内部会尝试生成一个关于“认证”的记录事件,并准备交给审计插件去写入日志,这个审计插件一看:“嗯?这是个认证事件?我的工作手册上写着不支持记录这个啊!”它就直接“摆工”了,并向错误日志报告了MY-010354这个错误,它不是在说认证失败了,而是在说“我无法处理记录认证事件这个任务”。

为什么会出现这种情况呢?根据MySQL官方文档和相关社区讨论的普遍情况,这通常是由于MySQL服务器版本与所安装的审计插件版本不兼容导致的,尤其是当你将MySQL升级到一个较新的版本(比如从5.7升级到8.0系列中的某个版本)后,但之前使用的审计插件(企业版审计插件或一些第三方插件)却没有随之更新到对应的兼容版本,新版本的MySQL可能在内部事件类型上做了一些调整或增加,包括了更详细的认证过程事件,而老版本的插件无法识别这些新事件,因此报错。

知道了原因,修复的思路就很清晰了:核心就是让审计插件的版本与MySQL服务器的版本匹配起来,以下是具体的步骤,你可以根据你的实际情况来选择操作,在进行任何操作之前,强烈建议你先对MySQL的数据目录进行一次完整的备份,以防万一。

MySQL报错MY-010354,审计插件不支持认证事件,远程帮你快速修复问题

第一步,你需要确认当前MySQL的版本和审计插件的状态,登录到你的MySQL服务器,执行以下命令来查看MySQL版本: SELECT VERSION(); 检查审计插件是否已安装和启用: SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%audit%'; 这会告诉你当前安装的审计插件叫什么名字(比如audit_log)以及它的状态(应该是ACTIVE)。

第二步,确定错误来源,你需要查看MySQL的错误日志文件,定位到具体的MY-010354错误信息,错误日志文件的位置可以通过在MySQL中执行 SHOW VARIABLES LIKE 'log_error'; 来找到,仔细看错误发生的时间点,是在MySQL启动时,还是在用户登录时,这有助于确认问题。

第三步,也是最重要的步骤,更新审计插件,既然问题根源是版本不匹配,那么最彻底的解决办法就是使用与你的MySQL版本完全对应的审计插件文件。

MySQL报错MY-010354,审计插件不支持认证事件,远程帮你快速修复问题

  1. 寻找正确的插件文件:MySQL的审计插件通常是一个动态链接库文件,在Linux下是.so文件,在Windows下是.dll文件,对于MySQL企业版用户,这个插件通常随安装包提供,你需要找到与你当前MySQL版本号完全一致的安装包,从中提取出对应的审计插件文件,对于MySQL 8.0.33,你就需要找8.0.33版本的插件文件,对于使用某些发行版(如Ubuntu、CentOS)自带MySQL包的情况,可能需要通过包管理器来更新插件包,例如在Ubuntu上可能是mysql-server-plugin-audit这样的包。

  2. 进行操作

    • 停止MySQL服务,以Linux系统为例,使用命令:systemctl stop mysqlservice mysql stop
    • 备份旧的插件文件,找到当前正在使用的审计插件文件的位置,你可以通过MySQL命令 SHOW VARIABLES LIKE 'plugin_dir'; 找到插件目录,将旧的审计插件文件(比如audit_log.so)重命名备份,例如改为audit_log.so.bak
    • 复制新的插件文件:将从正确版本MySQL安装包中提取出的新插件文件,复制到上一步找到的插件目录中,并确保文件权限与原来的文件一致(通常是属于mysql用户和组,并有可执行权限)。
    • 启动MySQL服务systemctl start mysql
  3. 验证修复:再次登录MySQL,检查审计插件状态是否正常为ACTIVE,观察错误日志中是否还有MY-010354的错误信息出现,如果错误消失,并且审计日志功能正常(你可以尝试触发一些操作,看审计日志文件是否有新内容写入),说明问题已经解决。

如果更新插件后问题依旧,或者你无法立即获得正确版本的插件,一个临时的解决方案是调整审计插件的配置,让它过滤掉不支持的事件类型,你可以查看审计插件的系统变量,特别是那些以audit_log_开头的变量,看看是否有类似于audit_log_exclude_accountsaudit_log_include_accounts的配置,或者是否有事件过滤的选项,尝试将认证相关的账户或事件排除在审计范围之外,但这只是权宜之计,根本解决办法还是版本匹配。

MySQL报错MY-010354本质上是一个兼容性问题,修复的关键在于确保你的审计插件能够跟上MySQL主程序的更新步伐,通过检查版本、更新插件文件,你通常可以快速且有效地解决这个让“保安”感到困惑的问题,让数据库的审计日志功能恢复正常记录。