必须先停止mysql服务、确认datadir路径、检查selinux状态,再执行sudo chown -r mysql:mysql /path/to/datadir和sudo chmod 750 /path/to/datadir,最后用mysqld手动试启验证权限生效。

直接改回 mysql 用户和组,但必须停服务、确认路径、检查 SELinux 状态,否则启动失败或报错 Permission denied。
停掉 MySQL 并确认 datadir 路径
权限修复前必须先停止 MySQL,否则文件被占用,chown 可能失败或不生效:
- 执行
sudo systemctl stop mysql(或mysqld,取决于你的服务名) - 确认真实
datadir:查看配置文件/etc/my.cnf或/etc/mysql/my.cnf中的datadir值;若不确定,可运行sudo mysqld --verbose --help 2>/dev/null | grep "datadir" - 常见路径有
/var/lib/mysql、/usr/local/mysql/data、/opt/mysql/data,不能凭经验硬写
chown 重置用户组必须用 mysql:mysql
MySQL 进程默认以 mysql 系统用户身份运行,datadir 及其所有子目录/文件必须归属该用户组,否则启动时报 Can't open the mysql.plugin table 或卡在初始化阶段:
- 执行
sudo chown -R mysql:mysql /var/lib/mysql(把路径替换成你查到的真实值) - 不要用
root:root或其他用户——即使能启动,后续建库、刷日志、写 binlog 都会失败 - 如果系统里没有
mysql用户(极少见),需先创建:sudo useradd -r -s /bin/false mysql
chmod 750 是安全底线,别设 777
datadir 目录权限太松会导致 MySQL 拒绝启动(尤其 8.0+ 版本校验更严):
- 执行
sudo chmod 750 /var/lib/mysql,确保属主可读写执行、属组可读执行、其他人无权限 - 子目录如
mysql/、performance_schema/会继承父目录权限,无需逐个 chmod - 严禁
chmod 777——MySQL 启动时检测到 world-writable datadir 会直接退出,并在错误日志中写secure-file-priv相关警告
SELinux 或 AppArmor 开启时需额外放行
Linux 发行版若启用强制访问控制(如 CentOS/RHEL 的 SELinux、Ubuntu 的 AppArmor),仅改 chown 不够,MySQL 进程仍可能被拒绝访问数据文件:
- 检查 SELinux 状态:
sestatus,若为enabled,运行sudo restorecon -Rv /var/lib/mysql重置上下文 - 若用 AppArmor(如 Ubuntu),确认
/etc/apparmor.d/usr.sbin.mysqld中包含/var/lib/mysql/** rwk,规则 - 临时验证可先
sudo setenforce 0(SELinux)或sudo systemctl stop apparmor,但生产环境务必配好策略再开回来
修完权限后别急着 start,先用 sudo mysqld --user=mysql --datadir=/var/lib/mysql --skip-grant-tables --skip-networking 手动试启一次,看错误日志(通常是 /var/log/mysql/error.log 或 /var/lib/mysql/hostname.err)是否还有 Permission 相关报错——这才是真正生效的信号。











