定制MySQL数据目录

MySQL的数据存在哪里

具体位置可以在配置文件中指定datadir:

# /etc/mysql/mysql.conf/mysqld.cnf
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysqldata
log-error       = /var/log/mysql/error.log
# By default we only accept connections from localhost
# bind-address  = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

数据目录无法访问

尽管已经修改好了datadir,但是此时重启mysql,会提示无法访问这个新的datadir。原因是apparmor限制了mysql能够访问的目录。
运行aa-status,可以看到相应结果:

[root@boxy ~]# aa-status 
apparmor module is loaded.
18 profiles are loaded.
18 profiles are in enforce mode.
   /sbin/dhclient
...
   /usr/sbin/cupsd
   /usr/sbin/mysqld
   /usr/sbin/tcpdump
0 profiles are in complain mode.
2 processes have profiles defined.
...

在上面的结果中, mysqld处于enfore mode,也就是说mysqld现在受apparmor的控制。
而mysqld具体能访问什么目录,则是在

/etc/apparmor.d/usr.sbin.mysqld

文件中指定的。

 # Allow data dir access                                                                                                                                                             
   /var/lib/mysql/ r,                                                                                                                                                                
   /var/lib/mysql/** rwk,  

这是mysql缺省的数据目录。

允许访问新的数据目录

在usr.sbin.mysqld文件中,可以使用如下指令,引用用户配置文件,

  include <local/usr.sbin.mysqld>

然后用户就可以在

/etc/apparmor.d/local/usr.sbin.mysqld

文件中指定新的、允许访问的数据目录。

 # Allow data dir access                                                                                                                                                             
   /path/to/new/datadir/ r,                                                                                                                                                                
   /path/to/new/datadir/** rwk,  
##

重新载入apparmor配置文件,重新启动mysql即可访问新的数据目录。

[root@boxy ~]# service apparmor reload
 * Reloading AppArmor profiles
Skipping profile in /etc/apparmor.d/disable: usr.bin.firefox
Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容