AppArmor导致datadir迁移无法启动或初始化失败该怎么办
发布时间:2021-12-18 14:29:57 所属栏目:MySql教程 来源:互联网
导读:AppArmor导致datadir迁移无法启动或初始化失败该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 【问题描述】: 行为:通过apt-get在一台ubuntu的机子上新装一个mysql做本地日志存
AppArmor导致datadir迁移无法启动或初始化失败该怎么办,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 【问题描述】: 行为:通过apt-get在一台ubuntu的机子上新装一个mysql做本地日志存储, 由于默认datadir在/var/lib/mysql下,所以准备重新初始化datadir: mysql_install_db --user=mysql --datadir=/data/mysql_data --basedir=/usr 报错如下: 160902 15:25:41 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1) starting as process 25512 ... 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test 160902 15:25:41 [Warning] Can't create test file /data/mysql_data/10-8-20-62.lower-test ERROR: 1005 Can't create table 'db' (errno: 13) 160902 15:25:41 [ERROR] Aborting 160902 15:25:41 [Note] /usr/sbin/mysqld: Shutdown complete Installation of system tables failed! Examine the logs in /data/mysql_data for more information. 给/data/mysql_data加了对应的权限,再一次执行,报同样错。 于是干脆直接将/var/lib/mysql整个文件夹迁移到/data/mysql_data下,再启动服务: cp过去之后,修改/etc/mysql/my.cnf中的datadir位置,然后mysqld_safe启动,发现不能启动: mysqld_safe mysqld from pid file /data/mysql_data/mysqld.pid ended 查看错误日志发现报错找不到mysql schema下的plugin.frm文件: 160902 15:26:51 [Note] Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13) 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加载最新的配置即可: vi /etc/apparmor.d/usr.sbin.mysqld 在该usr.sbin.mysqld配置文件中,注释掉部分目录(这些目录是my.cnf中做了修改的): 因为我在my.cnf中修改了pid-file、socket、datadir、log_error,所以我对应注释掉了这些目录: #/var/log/mysql.log rw, #/var/log/mysql.err rw, #/var/lib/mysql/ r, #/var/lib/mysql/** 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, 当然,也可以简单直接删掉这些。 并紧接着在其下添加新的datadir目录(注意以逗号做结束符) /data/mysql_data rw, 最后让AppArmor重新加载: # /etc/init.d/apparmor reload * Reloading AppArmor profiles Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd ...done. 再次启动mysqld即可成功。(当然重新初始化mysql_install_db也是可以的了) P.S. 当然也可以粗暴地直接停掉apparmor服务。 看完上述内容,你们掌握AppArmor导致datadir迁移无法启动或初始化失败该怎么办的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读! (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |