Ubuntu 24.04下修改MySQL 8.0.39数据目录后服务无法启动,权限报错排查求助
刚上手Ubuntu就折腾MySQL数据目录,遇到权限报错确实挺闹心的!我结合经验给你几个排查方向,一步步来应该能找到问题:
检查AppArmor规则(最容易忽略的坑)
Ubuntu 24.04默认启用AppArmor,它会限制进程的文件访问范围,就算你改了目录权限,没更新AppArmor规则也会触发权限拒绝。- 先看MySQL的AppArmor状态:
sudo aa-status,找到/usr/sbin/mysqld对应的profile,确认是enforced状态 - 编辑AppArmor配置文件:
sudo nano /etc/apparmor.d/usr.sbin.mysqld - 在文件里找到类似
/var/lib/mysql/** rwk,的行,在下面添加一行/你的新数据目录/** rwk,(把路径换成你实际的新目录) - 重启AppArmor生效:
sudo systemctl restart apparmor,然后再尝试启动MySQL:sudo systemctl start mysql
- 先看MySQL的AppArmor状态:
检查数据目录的父目录权限链
很多人只改了目标目录的权限,却忽略了父目录的访问权限!比如你的新目录是/mnt/new-mysql-data,那/mnt、/mnt/new-mysql-data的父目录都需要让mysql用户有执行(x)权限,不然mysql连进入父目录的权限都没有,更别说访问子目录了。
可以用这个命令查看整个路径的权限链:namei -l /你的新数据目录路径,逐行检查每一级目录的权限,确保mysql用户能遍历到目标目录。查看MySQL的详细错误日志
systemctl的状态提示太笼统,直接看MySQL的专属错误日志能拿到精准的报错信息:
执行sudo cat /var/log/mysql/error.log | grep -i "permission denied",会显示具体是哪个文件/目录触发了权限拒绝,这样就能精准定位问题点。验证MySQL配置文件的datadir设置
确认你修改的配置文件是正确的,并且没有被其他配置覆盖:- 打开
/etc/mysql/mysql.conf.d/mysqld.cnf,检查datadir参数是不是准确指向你的新目录 - 用命令验证生效的datadir:
mysqld --help --verbose | grep -A 1 "datadir",确保输出的路径和你设置的一致
- 打开
手动用mysql用户启动测试
跳过systemd,直接用mysql用户手动启动mysqld,能看到更直接的错误输出:
执行sudo -u mysql /usr/sbin/mysqld --datadir=/你的新数据目录,如果有问题会直接在终端打印详细错误,比systemctl的日志更清晰。
备注:内容来源于stack exchange,提问作者Simon LTFRB

