问题:
- 没有迹象表明 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 没有运行:
- 将全局清单放在列出的文件夹之一中。
- 启动 mysqld。(“sudo service mysql start”)
- 验证 mysqld 是否已启动。(“sudo service mysql status”)
- 检查密钥环组件状态:mysql -v -v -v -uREDACTED -pREDACTED -e "SELECT * FROM performance_schema.keyring_component_status;"
- 停止 mysqld。(“sudo service mysql stop”)
- 验证 mysqld 是否已停止。(“sudo service mysql status”)
- 重复步骤#1,找到下一个文件位置。
在所有情况下,SELECT 查询都返回“空集”。
最后,我尝试将全局清单的权限更改为 660,希望在 MySQL error.log 中看到警告,但 error.log 中仍然没有任何内容表明在初始化 InnoDB 之前加载了密钥环组件。(原因:MySQL 文档指出“服务器对清单文件的访问应该是只读的。例如,mysqld.my 服务器清单文件可能由 root 拥有,并且可以由 root 读取/写入,但对于用于运行 MySQL 服务器的帐户来说应该只读。如果在启动期间发现清单文件可以被该帐户读取/写入,则服务器会向错误日志写入警告,建议将文件设为只读。”)
最终结果:我没什么主意了,希望你们中有人能给我指明正确的方向。
其他信息:
- 我知道有很多关于如何配置密钥环插件的信息,但显然该组件较新并提供更多功能/灵活性,这就是我尝试使用它的原因。
- 如果有帮助的话,这是我在 MySQL 文档中开始的地方:https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html#innodb-data-encryption-about
答案1
看起来你已经仔细阅读了文档。在我看来它应该可以正常工作。
您可能需要检查的事项:
插件目录配置好了没?输出结果是什么
show variables like 'plugin_dir';
您使用 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>