MySQL报错提示没装keyring插件,导致审计日志出问题,远程帮忙修复方案分享
- 问答
- 2026-01-17 10:13:07
- 2
最近在处理一个客户的MySQL数据库问题时,遇到了一个比较典型的错误,客户反馈说他们的数据库审计日志突然无法正常记录了,检查MySQL的错误日志时,发现里面频繁出现类似这样的报错信息:[ERROR] [MY-013169] [Server] Failed to install an audit log plugin: Audit log file password has not been specified,可能还会伴随有关于keyring组件或插件未加载的警告。
这个问题的根源,根据MySQL官方文档的说明,是在于当MySQL服务器配置为使用审计日志功能,并且同时设置了审计日志文件加密时,数据库需要一个安全的地方来存储用于加密和解密审计日志的密钥,这个“保险箱”的角色就是由keyring插件来扮演的,如果服务器在启动时没有成功加载任何keyring插件,那么当它尝试为加密的审计日志文件生成或获取密钥时,就会失败,进而导致整个审计日志功能无法启动,抛出上述错误。
流程是这样的:你想用审计日志(audit log) -> 你开启了审计日志加密 -> MySQL需要钥匙(key)来上锁和解锁日志文件 -> 存放钥匙的钥匙环(keyring)没找到 -> 系统报错,审计日志罢工。
修复这个问题的核心思路就是为MySQL安装并正确配置一个合适的keyring插件,以下是具体的远程协助修复步骤,这些步骤基于MySQL官方文档的指导原则和常见的运维实践:
第一步:确认问题和环境
远程连接上客户的MySQL服务器后,我首先做的不是直接动手修改,而是先彻底搞清楚现状。
- 查看错误日志:使用
tail -f /path/to/mysql/error.log命令实时查看或检查最近的错误日志内容,确认报错信息是否与描述一致,这一步是为了再次验证问题。 - 检查当前插件状态:登录MySQL客户端,执行SQL语句:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%keyring%';,果不其然,查询结果为空,这证实了没有任何keyring插件被加载。 - 检查审计日志状态:执行
SHOW GLOBAL VARIABLES LIKE 'audit_log%';,重点关注audit_log_encryption这个变量,它的值很可能是AES(表示需要加密),但正因为缺少keyring,加密功能无法实现。 - 确定MySQL版本和部署方式:通过
SELECT VERSION();查看MySQL版本,同时询问客户数据库是采用何种方式安装的(如直接使用系统包管理器安装的,还是使用二进制压缩包解压安装的),这会影响keyring插件文件的位置和配置方法,客户使用的是MySQL 8.0,通过Yum包管理器安装。
第二步:选择合适的Keyring插件并配置
MySQL提供了多种keyring插件,比如keyring_file, keyring_encrypted_file, keyring_okv等,对于大多数内部环境,keyring_file是最简单直接的选择,它将加密密钥存储在一个本地文件中,这会带来密钥文件本身的安全性问题,需要妥善设置文件权限。
- 决定使用keyring_file插件:鉴于客户环境是内部网络,安全性要求不是极端苛刻,我决定先采用
keyring_file插件快速恢复功能。 - 定位插件文件:根据MySQL的安装方式,插件动态库文件(例如
keyring_file.so在Linux上)通常位于MySQL的plugin_dir目录下,通过执行SHOW VARIABLES LIKE 'plugin_dir';可以找到这个路径,确认该目录下确实存在keyring_file.so文件。 - 创建密钥文件存储目录:选择一个安全的目录来存放密钥文件,例如
/var/mysql/keyring,使用命令创建该目录并设置严格的权限,确保只有MySQL的运行用户有读写权限:sudo mkdir -p /var/mysql/keyring sudo chown mysql:mysql /var/mysql/keyring sudo chmod 750 /var/mysql/keyring
- 修改MySQL配置文件:这是最关键的一步,找到MySQL的配置文件
my.cnf或my.cnf.d/目录下的配置文件(常见路径如/etc/my.cnf或/etc/mysql/my.cnf.d/server.cnf)。 在[mysqld]配置段落中,添加以下两行配置:[mysqld] early-plugin-load=keyring_file.so keyring_file_data=/var/mysql/keyring/keyringearly-plugin-load的作用是在服务器启动的早期阶段就加载keyring插件,这对于加密功能的初始化至关重要。keyring_file_data指定了密钥文件的具体存放路径和文件名。
第三步:重启MySQL服务并验证
- 谨慎重启:由于是生产环境,我与客户协调了一个短暂的维护窗口,使用命令重启MySQL服务,
systemctl restart mysqld。 - 再次检查插件状态:服务启动后,重新登录MySQL,再次执行
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%keyring%';,这次可以看到keyring_file插件的状态是ACTIVE,说明加载成功了。 - 检查审计日志功能:执行
SHOW GLOBAL VARIABLES LIKE 'audit_log%';,确认audit_log_status变量的值为ON(表示审计日志已启用),可以尝试触发一个会产生审计日志的操作(比如执行一个简单的SQL语句),然后去审计日志文件所在目录查看是否有新的、加密的日志文件生成(文件名可能包含加密后缀)。 - 检查错误日志:再次查看MySQL错误日志,确认之前关于
keyring和审计日志的报错信息已经不再出现。
至此,问题得到解决,整个修复过程的核心就是“缺啥补啥”,识别出缺失的keyring插件,然后通过修改配置将其加载起来,需要注意的是,keyring_file插件虽然方便,但如果密钥文件丢失或损坏,加密的数据(包括审计日志)将无法恢复,因此务必做好密钥文件的备份,对于更高安全要求的场景,则应考虑使用keyring_encrypted_file(对密钥文件本身加密)或基于KMIP等标准的集中式密钥管理解决方案。

本文由符海莹于2026-01-17发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/82349.html
