MySQL 5.7.21启动失败:无法切换至/var/lib/mysql目录(权限拒绝)求助
看起来你遇到的是典型的权限+系统安全模块限制问题,下面一步步帮你搞定:
1. 先处理基础文件权限
首先得停掉MySQL服务,避免操作时出冲突:
sudo systemctl stop mysql
假设你的外置硬盘数据目录是/mnt/external/mysql(换成你实际的挂载路径),得确保这个目录的所有权完全属于MySQL运行用户:
sudo chown -R mysql:mysql /mnt/external/mysql sudo chmod -R 750 /mnt/external/mysql
(750的权限设置符合MySQL安全规范——只有mysql用户能读写,组用户可读,其他用户无权限)
2. 解除AppArmor的访问限制(Ubuntu系统必做)
从错误日志里的0ubuntu0.1能看出来你用的是Ubuntu,系统默认的AppArmor会限制MySQL只能访问预设目录,哪怕改了文件权限,它还是会拦着访问。咱们得修改它的配置:
打开MySQL的AppArmor规则文件:
sudo nano /etc/apparmor.d/usr.sbin.mysqld
找到里面针对/var/lib/mysql的规则:
/var/lib/mysql/ r, /var/lib/mysql/** rwk,
在下面添加上你的外置硬盘目录规则:
/mnt/external/mysql/ r, /mnt/external/mysql/** rwk,
保存退出后,重新加载AppArmor让配置生效:
sudo systemctl reload apparmor
3. 验证软链接(或者直接修改MySQL配置)
如果你坚持用软链接的方式,先确认/var/lib/mysql确实指向了外置硬盘的目录:
ls -l /var/lib/mysql
正常输出应该是这样的:lrwxrwxrwx 1 root root 20 Jan 27 12:00 /var/lib/mysql -> /mnt/external/mysql
其实更稳妥的方式是不用软链接,直接修改MySQL的配置文件。找到/etc/mysql/mysql.conf.d/mysqld.cnf(或者/etc/mysql/my.cnf,取决于你的系统版本),修改datadir参数:
datadir = /mnt/external/mysql
4. 启动MySQL并验证
现在可以启动MySQL了:
sudo systemctl start mysql
用下面的命令检查状态,确认是否正常运行:
sudo systemctl status mysql
如果成功启动,登录MySQL看看数据是否都在:
mysql -u root -p
执行SHOW DATABASES;就能确认数据有没有正常迁移过来啦。
内容的提问来源于stack exchange,提问作者AleRodi




