You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL 5.7.21启动失败:无法切换至/var/lib/mysql目录(权限拒绝)求助

解决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

火山引擎 最新活动