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