You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非root用户连接本地MySQL遇socket权限拒绝,需配置何种权限?

解决MySQL非root用户无法访问mysql.sock的权限问题

嘿,这个问题我之前帮不少人排查过——你遇到的(13 "Permission denied")针对/var/lib/mysql/mysql.sock的错误,根本不是MySQL数据库内部的权限问题,而是操作系统层面的文件/目录权限限制了非root用户访问这个套接字文件。下面给你一步步拆解解决思路和需要的权限配置:

1. 先明确问题根源

MySQL通过Unix套接字文件(mysql.sock)进行本地连接时,需要操作系统允许你的非root用户读取/写入这个套接字文件,同时能访问它所在的/var/lib/mysql目录。这和MySQL内部的GRANT权限(比如SELECT、INSERT)完全是两码事——内部权限是成功连接后才会生效的。

2. 检查当前套接字文件和目录的权限

首先执行以下命令查看权限详情:

# 查看mysql.sock的权限、所属用户和组
ls -l /var/lib/mysql/mysql.sock

# 查看/var/lib/mysql目录的权限
ls -ld /var/lib/mysql

正常情况下,输出应该类似这样:

  • mysql.sock:srwxrwx--- 1 mysql mysql 0 Aug 10 10:00 /var/lib/mysql/mysql.sock(权限770,所属mysql用户和组)
  • /var/lib/mysql:drwxr-xr-x 4 mysql mysql 4096 Aug 10 09:50 /var/lib/mysql(权限755,所属mysql用户和组)

3. 让非root用户具备访问权限的具体操作

方法一:将用户加入mysql组(推荐)

如果你的非root用户不在mysql用户组里,就无法访问权限为770的mysql.sock:

  1. 检查用户所属组:
    groups your_non_root_username
    
  2. 如果输出里没有mysql,执行以下命令将用户加入组:
    sudo usermod -aG mysql your_non_root_username
    
  3. 退出当前会话重新登录,或者执行newgrp mysql刷新组权限,之后再尝试连接MySQL。

方法二:调整目录和套接字文件的权限

如果不想把用户加入mysql组,可以放宽文件/目录的权限:

  • 调整/var/lib/mysql目录权限(确保其他用户能进入目录):
    sudo chmod 755 /var/lib/mysql
    
  • 调整mysql.sock文件权限(允许所有用户访问,注意:这种方式安全性稍低):
    sudo chmod 777 /var/lib/mysql/mysql.sock
    
    更安全的选择是保持770权限,配合方法一的组配置。

方法三:通过MySQL配置文件持久化权限设置

上面的调整可能会在MySQL重启后被重置,所以可以修改MySQL配置文件(通常是/etc/my.cnf或/etc/mysql/mysqld.cnf),在[mysqld]段添加以下配置:

socket = /var/lib/mysql/mysql.sock
# 设置套接字文件权限为770(仅mysql用户和组可访问)
chmod = 0770
# 设置套接字文件的所属用户和组
chown = mysql:mysql

修改后重启MySQL服务:

sudo systemctl restart mysqld
# 或者用service命令(取决于系统)
sudo service mysql restart

4. 验证是否解决

执行连接命令测试:

mysql -u your_non_root_username -p

如果能正常进入MySQL命令行,说明权限问题已经解决。

内容的提问来源于stack exchange,提问作者nelaaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:22:10