MySQL 密钥环组件(不是插件)在服务器启动时未加载

MySQL 密钥环组件(不是插件)在服务器启动时未加载

问题:

  • 没有迹象表明 mysqld 确实正在读取服务器清单和/或密钥环组件配置文件。如能提供任何帮助,我将不胜感激。

系统信息:

  • Ubuntu 20.04
  • MySQL 8.0.29

细节:

  • 所有文件都位于“sudo apt-get install mysql-server”放置它们的默认位置。
  • mysql-server 包来自 Ubuntu repos。

我尝试过的:

  • 根据 MySQL 文档,我在 mysqld 安装目录中创建了“一个名为 mysqld.my 的全局清单文件”,并尝试将其放在以下位置但没有成功:(
    注意:Owner:group:perms == root:mysql:640)

    • /usr ('basedir' 位置)
    • /usr/sbin/(mysqld 二进制位置)[文件当前在此处]
    • /var/lib/mysql ('datadir' 位置) [旁注:如果我使用全局和本地清单,则根据 mysql 文档,本地清单将放在这里。]
    • /usr/lib/mysql/plugin/('plugin_dir' 位置)
  • 根据 MySQL 文档,我在以下位置创建了“在安装 component_keyring_file 库文件的目录中名为 component_keyring_file.cnf 的全局配置文件”:(
    注意:Owner:group:perms == root:mysql:640)

    • /usr/lib/mysql/plugin/('plugin_dir' 位置。文件 'component_keyring_file.so' 确实存在于此处。)
  • 我使用了以下测试,初始条件是 mysqld 没有运行:

    1. 将全局清单放在列出的文件夹之一中。
    2. 启动 mysqld。(“sudo service mysql start”)
    3. 验证 mysqld 是否已启动。(“sudo service mysql status”)
    4. 检查密钥环组件状态:mysql -v -v -v -uREDACTED -pREDACTED -e "SELECT * FROM performance_schema.keyring_component_status;"
    5. 停止 mysqld。(“sudo service mysql stop”)
    6. 验证 mysqld 是否已停止。(“sudo service mysql status”)
    7. 重复步骤#1,找到下一个文件位置。

    在所有情况下,SELECT 查询都返回“空集”。

  • 最后,我尝试将全局清单的权限更改为 660,希望在 MySQL error.log 中看到警告,但 error.log 中仍然没有任何内容表明在初始化 InnoDB 之前加载了密钥环组件。(原因:MySQL 文档指出“服务器对清单文件的访问应该是只读的。例如,mysqld.my 服务器清单文件可能由 root 拥有,并且可以由 root 读取/写入,但对于用于运行 MySQL 服务器的帐户来说应该只读。如果在启动期间发现清单文件可以被该帐户读取/写入,则服务器会向错误日志写入警告,建议将文件设为只读。”)

最终结果:我没什么主意了,希望你们中有人能给我指明正确的方向。

其他信息:

答案1

看起来你已经仔细阅读了文档。在我看来它应该可以正常工作。

您可能需要检查的事项:

  1. 插件目录配置好了没?输出结果是什么show variables like 'plugin_dir';

  2. 您使用 AppArmor 吗?运行sudo aa-status。如果使用,并且 mysql 位于强制配置文件之一中,那么您可以将其放入投诉配置文件 ( sudo aa-complain /usr/sbin/mysqld) 中,或者使用 appArmor 中的 mysql 配置文件,例如cat /etc/apparmor.d/usr.sbin.mysqld | sudo apparmor_parser -a。请注意,您可能需要使用加密密钥环文件的特定路径更新配置文件。

让我知道你是怎么办的。

答案2

我遇到了与您在此处描述的完全相同的问题。我使用的是 Ubuntu 22.04 和 mysql 8.031。我对组件密钥环文件执行了与您完全相同的步骤,查询“SELECT * FROM performance_schema.keyring_component_status;”返回“空集”。如果有人对此有更新,请告诉我。

答案3

您确定您的 mysqld 文件位于 /usr/sbin/ 中吗?就我而言,那里有一个与 mysqld 文件关联的符号链接。因此,我在 /usr/libexec 中创建了 mysqld.my 文件,并且它可以正常工作。

[root@mysql-server libexec]# pwd /usr/libexec [root@mysql-server libexec]# cat mysqld.my { “read_local_manifest”:true } [root@mysql-server libexec]#

mysql> SELECT * FROM performance_schema.keyring_component_status; 连接 ID:8 当前数据库:*** NONE ***

+---------------------+------------------------+ | STATUS_KEY | STATUS_VALUE | +---------------------+------------------------+ | Component_name | component_keyring_file | | 作者 | Oracle Corporation | | 许可证 | GPL | | Implementation_name | component_keyring_file | | 版本 | 1.0 | | Component_status | Disabled | | Data_file | | | Read_only | | +---------------------+------------------------+ 集合中有 8 行(0.01 秒)

mysql>

相关内容