如何诊断 MySQL 无法加载我的插件?

问题描述 投票:0回答:1

我正在创建一个 MySQL 身份验证插件。参考官方文档,我创建了我的源文件并将其注册到

CMakeLists.txt
中,如下所示:

MYSQL_ADD_PLUGIN(
  auth_token
  auth_token.cc 
  MODULE_ONLY
  LINK_LIBRARIES jwt-cpp::jwt-cpp
)

从源代码和我的插件编译 MySQL 后(按照说明),我安装了服务器,然后使用

--plugin-load
命令行选项启动了守护进程:

./bin/mysqld --user=mysql --plugin-load=auth_token.so &

最后我创建了一个用户,如下:

CREATE USER 'token_user'@'%' IDENTIFIED WITH auth_token

现在,当我尝试在 Workbench 中使用

token_user
连接到服务器时,我收到以下响应:

Your connection attempt failed for user 'token_user' to the MySQL server at XXX.XXX.XXX.XXX:3306:
 Authentication plugin 'auth_token' cannot be loaded: The specified module could not be found.

我执行了

SHOW PLUGINS
并确认结果集包含我的插件的一行:

姓名 状态 类型 图书馆 许可证
auth_token 活跃 身份验证 auth_token.so 专有

我还确认了插件文件存在(位于

/usr/local/mysql/lib/plugin/auth_token.so
),并且mysqld的标准输出或syslog中没有报告错误。

如何解决此问题?

mysql plugins diagnostics mysql-8.3 mysql-plugins
1个回答
0
投票

好吧,我终于找到了问题的根源。我将

client_auth_plugin
属性(来自
st_mysql_auth
结构)误认为是我的服务器端插件的名称,并将其设置为非空值。文档对该属性的定义如下:

客户端必须使用此服务器插件进行身份验证的插件。可以为 NULL 表示“任何插件”。

因为它没有设置为 null,所以它向 MySQL 客户端发出信号,需要一个名为“auth_token”的客户端插件进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.