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

分类:编程技术 时间:2024-02-20 16:02 浏览:0 评论:0
0
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 【注】/usr/sbin/mysqld (mysqld 5.5.50- 0ubuntu0.14.04.1) 作为进程 25512 启动 ...

160902 15:25:41 [警告] 无法创建测试文件 /data/mysql_data/10-8-20-62.lower-测试

160902 15:25:41 [警告]无法创建测试文件/data/mysql_data/10-8-20-62.lower-test

错误:1005 可以'不创建表'db'(错误号:13)

160902 15:25:41 [错误] 正在中止


160902 15:25:41 [注意] /usr/sbin/mysqld:关闭完成


系统表安装失败!查看

/data/mysql_data中的日志了解更多信息。

给/data/mysql_data添加了相应的权限,再次执行,还是报同样的错误。


所以只需将/var/lib/mysql文件夹整个迁移到/data/mysql_data,然后启动服务:
cp通过后,修改/etc/mysql/我的。 cnf中的datadir位置,然后启动mysqld_safe,发现无法启动:

mysqld_safe mysqld from pid file /data/mysql_data/mysqld.pid结束


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

160902 15:26:51 [注意]插件“FEDERATED”已禁用。

/usr/sbin/mysqld:找不到文件:“./mysql/plugin.frm”(errno:13)

160902 15 :26:51 [错误] 无法打开 mysql .plugin ta布莱。请运行mysql_upgrade创建。



再次确认目录和文件的权限,然后确认文件存在,启动仍然失败,错误依旧不变。



[解决办法]:
那么我认为Ubuntu和CentOS的文件安全策略可能有有些不一样,然后发现是这样的:(P.S.公司的DB服务器都部署在CentOS上,这次作为特例安装在Ubuntu上)

Ubuntu有一个AppArmor服务默认安装。 ,该服务用于访问控制。
使用apt-get安装mysql时,猜测可能是AppArmor配置中限制了访问限制 -
导致mysqld_safe和mysqld进程无法读写新移植的datadir目录下的文件,并且同样的情况导致mysql_install_db无法在对应的mysql下创建文件架构。

解决办法很简单,只需通过编辑器打开这个文件,让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

* 重新加载 AppArmor 配置文件

跳过 /etc/apparmor.d/disable 中的配置文件:usr.sbin.rsyslogd

...完成。


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

当然,你也可以直接停止apparmor服务。

看完上面的内容,你知道如果AppArmor导致datadir迁移无法启动或初始化该怎么办吗?如果您想学习更多技能或者想了解更多相关内容,请关注行业资讯频道。感谢您的阅读!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > AppArmor导致datadir迁移无法启动或初始化怎么办?

用户评论