我想将我的数据库放在另一个目录中,这样我就可以将它们与我的 Web 应用程序和其他持久数据一起存储在 ESB(弹性块存储,只是虚拟化硬盘的别称)中。
我曾尝试过在http://crashmag.net/change-the-default-mysql-data-directory-with-selinux-enabled。
一切似乎都很好,直到我输入这个命令:
# semanage fcontext -a -t mysqld_db_t "/srv/mysql(/.*)?"
然后命令失败并告诉我 mysqld_db_t 是无效的 SELinux 上下文,即使默认的 MySQL 数据目录标有此上下文。我在 Virtualbox(表现得像普通的 x86 兼容机箱)和 Amazon EC2(基于 Xen)上运行 Fedora 15,因此本教程应该兼容。
还值得一提的是,全局关闭 SELinux 或仅关闭 MySQL 进程并不是一个选项,因为如果黑客通过 MySQL 服务器访问系统,这种解决方案将降低系统的安全性。在我改用 Redhat/Fedora 架构之前,我从未见过这个问题,所以这可能是特定于发行版的问题。
非常感谢您的帮助
答案1
您是否尝试过指定完整的上下文名称而不是仅仅指定 *_t 部分?
是不是有什么原因导致您无法将块设备挂载在 /var/lib/mysql 下,这样您就不需要更新标签了?也许可以使用绑定挂载或符号链接?例如 mount -o bind /srv/mysql /var/lib/mysql。
我尝试重现这种行为但未能成功,以下是我所做的。
$ sudo semanage fcontext -a -t mysqld_db_t "/mnt/foo(/.*)?"
$ sudo restorecon -R /mnt/foo
$ ls -Z /mnt/foo/
drwxr-xr-x. root root system_u:object_r:mysqld_db_t:s0 bar
drwxr-xr-x. root root system_u:object_r:mysqld_db_t:s0 baz
-rw-r--r--. root root system_u:object_r:mysqld_db_t:s0 quux