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

环境: 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

@完


参考:

MySQL移动数据目录出现权限问题的更多相关文章

  1. mysql转移数据目录后无法启动问题

    最近在学习mysql,将mysql的数据目录文件路径/var/lib/mysql转移到/data/mysql,然后通过软连接方式关联. 1. ln -s /data/mysql /var/lib/my ...

  2. mysql 更换数据目录

    mysql 更换数据目录 1.停止MySql服务: /etc/rc.d/init.d/mysql stop 或者 service mysql stop 2.确认MySql原来的数据目录,查找datad ...

  3. Linux普通用户安装配置mysql(非root权限)

    Linux普通用户安装配置mysql(非root权限) 说明:在实际工作中,公司内网的机器我们一般没有root权限,也没有连网,最近参考网上的资料使用一般的账户成功安装mysql,记录如下 Linux ...

  4. mysql 用户管理和权限设置

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  5. Mysql新增用户,权限管理

    MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant selec ...

  6. mysql修改数据库表权限

    ps:通常我用的是:1.“grant all on *.* to root@'%' identified by 'yourpassword';”——这个还可以顺带设置密码.2.“flush privi ...

  7. Linux下给mysql创建用户分配权限

    1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Pas ...

  8. MySQL用户管理和权限设置

    用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...

  9. 一、MySQL的连接建立与权限

    一.MySQL的连接建立与权限 写这些的目的一是记录下工作这几年所学,算是成长脚印吧.二是复习一遍,也给自己当笔记看,通篇观点都属于个人理解较多.读者观看的时候也需要自己判断下是否正确,另外,记下一段 ...

随机推荐

  1. Maven整理笔记の安装及配置

      第一部分:在Windows上安装Maven    检查JDK的安装 在安装Maven之前,首先确认你已经正确安装了JDK.Maven可以运行在JDK1.4及以上版本.先打开Windows命令,运行 ...

  2. 解决 centos 7 部署 tomcat 后外部不能访问应用(端口、防火墙)

    https://blog.csdn.net/Rebs_Hugo/article/details/85042602

  3. leetcode 移动零

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 这道题比较好想出来 /** ...

  4. OO 普通类与静态类的区别

    普通类与静态类的区别 普通类与静态类的区别 一.普通类: 1.可以实例化,即可以new; 2.可以继承: 二.静态类:(静态类本质就是 abstract+sealed类) 1.不能被实例化:(抽象的) ...

  5. ThinkPHP 3.2.x 集成极光推送指北

    3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 -- ThinkPHP 官方仓库 以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无 ...

  6. mysql 代价

    mysql cbo cost base optimizer 基于代价,数据是一直变化的oracle8 以前是rbo rule base optimizer 基于规则, 如果sql使用了索引,必须使用索 ...

  7. selenium(python)登录时账号密码错误提示语

    selenium(python)登录时账号密码错误提示语的获取 可以用text

  8. 主流服务器虚拟化技术简单使用——Hyper-V(一)

    Tips:因为博客园排版的原因,图片显示不清晰,可以放大网页查看清晰图片. 如果系统使用物理机,需要在BIOS里面开启Intel VT-x(或AMD-V),如果是VMware workstation, ...

  9. 接口自动化之unittest+ddt

    我在上一篇(https://www.cnblogs.com/wlyhy/p/10083318.html) 文章整理了unittest的模板,但在后续学习中,发现还有许多值得优化的地方.例如在我们设计测 ...

  10. autokeras 在windows10下的安装与使用

    注意:autokeras只适用于python3.6 先打开命令行(cmd), 输入 python --version 查看python版本,是否需要降级和升级. 降级的命令如下: conda inst ...