文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

AppArmor导致datadir迁移无法启动或初始化失败该怎么办

2024-04-02 19:55

关注

AppArmor导致datadir迁移无法启动或初始化失败该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

【问题描述】:
行为:通过apt-get在一台ubuntu的机子上新装一个mysql做本地日志存储,
由于默认datadir在/var/lib/mysql下,所以准备重新初始化datadir:

  1. mysql_install_db --user=mysql --datadir=/data/mysql_data --basedir=/usr

报错如下:

  1. 160902 15:25:41 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1) starting as process 25512 ...

  2. 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test

  3. 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test

  4. ERROR: 1005  Can't create table 'db' (errno: 13)

  5. 160902 15:25:41 [ERROR] Aborting


  6. 160902 15:25:41 [Note] /usr/sbin/mysqld: Shutdown complete


  7. Installation of system tables failed!  Examine the logs in

  8. /data/mysql_data for more information.

给/data/mysql_data加了对应的权限,再一次执行,报同样错。


于是干脆直接将/var/lib/mysql整个文件夹迁移到/data/mysql_data下,再启动服务:
cp过去之后,修改/etc/mysql/my.cnf中的datadir位置,然后mysqld_safe启动,发现不能启动:

  1. mysqld_safe mysqld from pid file /data/mysql_data/mysqld.pid ended


查看错误日志发现报错找不到mysql schema下的plugin.frm文件:

  1. 160902 15:26:51 [Note] Plugin 'FEDERATED' is disabled.

  2. /usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)

  3. 160902 15:26:51 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.



再次确认目录及文件的权限,然后确认文件的存在之后,启动依然失败,报错不变。



【解决方案】:
然后想到Ubuntu和CentOS文件安全策略可能有一些不一样,然后查到了这样的东西:(P.S. 公司DB server都是部署在CentOS上的,这次安在Ubuntu是特例)

Ubuntu下默认安装了并存在一个AppArmor的服务,这个服务是用于访问控制的。
在以apt-get安装mysql时,个人猜测可能在AppArmor的配置中限制了访问限制——
导致mysqld_safe与mysqld进程无法读写新移植的datadir目录中的文件,也同样导致了mysql_install_db无法在对应的mysql schema下创建文件。

解决方法很简单,通过编辑器打开此文件,并重新让AppArmor加载最新的配置即可:

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


在该usr.sbin.mysqld配置文件中,注释掉部分目录(这些目录是my.cnf中做了修改的):
因为我在my.cnf中修改了pid-file、socket、datadir、log_error,所以我对应注释掉了这些目录:

  1. #/var/log/mysql.log rw,

  2. #/var/log/mysql.err rw,

  3. #/var/lib/mysql/ r,

  4. #/var/lib/mysql/** rwk,

  5. #/var/log/mysql/ r,

  6. #/var/log/mysql/* rw,

  7. #/var/run/mysqld/mysqld.pid rw,

  8. #/var/run/mysqld/mysqld.sock w,

  9. #/run/mysqld/mysqld.pid rw,

当然,也可以简单直接删掉这些。

并紧接着在其下添加新的datadir目录(注意以逗号做结束符)

  1. /data/mysql_data rw,


最后让AppArmor重新加载:

  1. # /etc/init.d/apparmor reload

  2. * Reloading AppArmor profiles

  3. Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd

  4. ...done.


再次启动mysqld即可成功。(当然重新初始化mysql_install_db也是可以的了)

P.S. 当然也可以粗暴地直接停掉apparmor服务。

看完上述内容,你们掌握AppArmor导致datadir迁移无法启动或初始化失败该怎么办的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯