系统崩溃后无法通过Socket连接本地MySQL服务器求助
解决Vagrant Ubuntu环境下MySQL因AppArmor权限问题启动失败的方案
我来帮你搞定这个MySQL启动故障!从你描述的日志来看,核心问题是AppArmor安全模块阻止了mysqld访问必要的配置文件,再加上之前的BSD突发崩溃,大概率打乱了文件权限或者AppArmor的规则配置。下面是一步步的修复步骤:
1. 先验证AppArmor是否是罪魁祸首
先临时让AppArmor对mysqld的违规操作只报警不阻止,快速验证问题根源:
sudo aa-complain /usr/sbin/mysqld
然后尝试启动MySQL:
sudo service mysql start
如果这次能成功启动,那百分百是AppArmor的权限规则出问题了,继续往下修复。
2. 修复AppArmor的MySQL访问规则
打开AppArmor针对mysqld的配置文件:
sudo nano /etc/apparmor.d/usr.sbin.mysqld
在文件里找到包含/etc/mysql/相关的权限行,添加被拒绝的配置文件访问权限:
/etc/my.cnf r, /etc/mysql/my.cnf.fallback r,
保存退出后,重新加载AppArmor规则:
sudo systemctl reload apparmor
3. 修复MySQL相关目录的权限(解决Socket不存在问题)
BSD崩溃可能导致目录丢失或权限错乱,我们需要确保mysql用户拥有必要目录的权限:
# 修复数据目录权限 sudo chown -R mysql:mysql /var/lib/mysql sudo chmod -R 755 /var/lib/mysql # 重建Socket目录并设置权限 sudo mkdir -p /var/run/mysqld sudo chown mysql:mysql /var/run/mysqld
4. 重新启动MySQL并验证状态
最后启动MySQL服务:
sudo service mysql start
用下面的命令检查状态,确认是否正常运行:
systemctl status mysql.service
额外排查建议
如果上面步骤完成后还是有问题,可以查看AppArmor的详细日志,找出还有哪些文件被拒绝:
sudo grep mysqld /var/log/syslog
把日志里提到的被拒绝文件,重复步骤2添加到AppArmor规则里即可。另外,如果怀疑数据文件损坏,可以尝试运行:
sudo mysqld --repair
内容的提问来源于stack exchange,提问作者Abad Rahman
相关产品推荐
相关产品推荐

