我遇到了与用户 nerdgeekdork 在此处描述的完全相同的问题:
我尝试按照 mySQL 文档中所述以相同的方式设置组件:
https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html
https://dev.mysql.com/doc/refman/8.0/en/keyring-component-installation.html
和
https://dev.mysql.com/doc/refman/8.0/en/keyring-file-component.html
概括起来,已建立以下内容:
mysqld.my
/usr/sbin/
使用创建的文件root:mysql 0640
该文件包含以下内容:
{
"components": "file://component_keyring_file"
}
然后我有包含的/usr/lib/mysql/plugin
文件component_keyring_file.cnf
root:mysql 0640
{
"path": "/usr/local/mysql/keyring/component_keyring_file",
"read_only": false
}
最后,其中有/usr/local/mysql/keyring/
一个文件。component_keyring_file
root:mysql 0660
重新启动 mySQL 并以 root 身份登录 mySQL 命令行后,问题SELECT * FROM performance_schema.keyring_component_status;
我得到一个空集。
这些是 Ubuntu 和 mySQL 的版本:
Ubuntu 20.04.4 LTS
mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
任何帮助均感激不尽。
答案1
它是 AppArmor!
MySQL 有一个处于活动状态的 AppArmor 强制配置文件,该配置文件阻止 MySQL 对 component_keyring_file 进行更改,因为它不在默认 MySQL AppArmor 配置文件使用的默认位置“/var/lib/mysql-keyring/”。
最初作为故障排除的一部分,通过将 MySQL 配置文件设置为投诉(sudo aa-complain /usr/sbin/mysqld)解决了此问题。最终的解决方案是更新 MySQL 配置文件以使用我指定的路径,然后加载该路径,例如 cat /etc/apparmor.d/usr.sbin.mysqld | sudo apparmor_parser -a。