MySQL移动数据目录出现权限问题

发布时间:2025-02-06 点击:33
环境:ubuntu 14.04.4 lts
现象:把/var/lib/mysql下的数据文件移动到其他目录下,之后发现启动mysql报错,并且mysql无法运行。具体的操作如下:
# service mysql stop # mv /var/lib/mysql /data # serivce mysql start报出的错误信息为:
170425 9:55:36 [warning] using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. please use the full name instead. 170425 9:55:36 [note] plugin 'federated' is disabled. /usr/sbin/mysqld: can't find file: './mysql/plugin.frm' (errno: 13) 170425 9:55:36 [error] can't open the mysql.plugin table. please run mysql_upgrade to create it. 170425 9:55:36 innodb: the innodb memory heap is disabled 170425 9:55:36 innodb: mutexes and rw_locks use gcc atomic builtins 170425 9:55:36 innodb: compressed tables use zlib 1.2.8 170425 9:55:36 innodb: using linux native aio 170425 9:55:36 innodb: initializing buffer pool, size = 128.0m 170425 9:55:36 innodb: completed initialization of buffer pool 170425 9:55:36 innodb: operating system error number 13 in a file operation. innodb: the error means mysqld does not have the access rights to innodb: the directory. innodb: file name ./ibdata1 innodb: file operation call: 'open'. innodb: cannot continue operation.原因
最初以为是简单的权限问题,就把/data/mysql目录赋权给mysql用户
# chown -r mysql:mysql /data/mysql
但是再次启动mysql后,还是遇到同样的错误。上网查了一下,原因是由于现今的linux系统都采用apparmor来限制文件和目录的执行权限。
解决办法
所以需要配置apparmor让mysqld可以访问/data/mysql目录。具体操作如下:
# vi /etc/apparmor.d/usr.sbin.mysqld
在此文件末尾增加你的目录(可以按照/var/lib/mysql的目录改)
/usr/sbin/mysqld { #include <abstractions/base> #include <abstractions/nameservice> #include <abstractions/user-tmp> #include <abstractions/mysql> #include <abstractions/winbind> capability dac_override, capability sys_resource, capability setgid, capability setuid, network tcp, /etc/hosts.allow r, /etc/hosts.deny r, /etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/*.cnf r, /usr/lib/mysql/plugin/ r, /usr/lib/mysql/plugin/*.so* mr, /usr/sbin/mysqld mr, /usr/share/mysql/ r, /var/log/mysql.log rw, /var/log/mysql.err rw, /var/lib/mysql/ r, /var/lib/mysql/ rwk, /var/lib/mysql-files/ r, /var/lib/mysql-files/ rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid rw, /var/run/mysqld/mysqld.sock w, /run/mysqld/mysqld.pid rw, /run/mysqld/mysqld.sock w, /sys/devices/system/cpu/ r, # site-specific additions and overrides. see local/readme for details. #include <local/usr.sbin.mysqld> /data/mysql/ r, /data/mysql/ rwk, }如果不写第一句的/data/mysql/ r,则mysql能启动,但是进入mysql后输入命令会提示下面错误:
error 1018 (hy000): can't read dir of '.' (errno: 13


云服务器租赁排行
电脑发热容易死机是什么原因 电脑过热就死机的解决教程
电脑提示C盘空间不足怎么办?360C盘搬家解决C盘空间不足的方法
Google Cloud现已提供Workspot Cloud PC
云服务器运行ui交互型挂机脚本
租云服务器步骤图
租用阿里云mqtt服务器
【涨知识】教你用网站流量来看出SEO网站推广的效果