MySQL调整临时目录启动报错OS errno 13 - Permission denied
将临时目录添加了写的权限了
chown mysql mysqltmp/ -R
chmod 1777 mysqltmp/ -R
启动又又又报错了
systemctl restart mysql
赶紧查看日志tail -100 /var/log/mysql/error.log
还是权限问题,感觉应该是SELinux 安全限制了,Ubuntu看了一下SELinux 默认是关闭的,查了一些资料发现还有一个AppArmor 限制
查询sudo apparmor_status
状态,果然是这个导致的
apparmor module is loaded.
6 profiles are loaded.
6 profiles are in enforce mode.
/usr/sbin/mysqld
/usr/sbin/tcpdump
/usr/lib/NetworkManager/nm-dhcp-client.action
.............
关掉对应的服务,再去reboot机器让其生效
sudo systemctl stop apparmor #停止服务
sudo systemctl disable apparmor #禁止开机启动,将禁用 AppArmor 服务,使其在系统启动时不会自动启动
然后再去启动MySQL, systemctl restart mysql
,检查MySQL就可以正常启动了
登录MySQL 检查临时目录是否修改了
show VARIABLES LIKE 'tmpdir';
补录:
AppArmor 是一个 Linux 安全模块,用于实施应用程序级别的访问控制。它通过限制应用程序的权限和访问范围,提供了额外的安全保护。
AppArmor 的主要作用如下:
应用程序隔离:AppArmor 允许您为每个应用程序创建一个安全策略配置文件,该配置文件定义了应用程序可以访问的文件、目录、网络端口等资源。这样可以将应用程序隔离在自己的安全环境中,防止其访问未经授权的资源。
强制访问控制:AppArmor 强制执行访问控制策略,限制应用程序只能执行其所需的操作。这可以减少应用程序受到恶意行为或错误配置的影响,提高系统的安全性。
安全审计:AppArmor 可以生成日志记录,记录应用程序的访问尝试和被拒绝的访问。这些日志可以用于安全审计和故障排除,帮助发现潜在的安全问题。
默认保护:一些 Linux 发行版默认启用了 AppArmor,并为一些常见的应用程序提供了预定义的安全策略。这些预定义策略可以提供一定程度的保护,减少了配置的复杂性。