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

非root用户执行含MySQL查询的Bash脚本失败求助

问题:非root用户运行Bash脚本连接MySQL失败

脚本示例

#!/bin/bash
USER="myuser"
PASS="mypass"
author="tester"

whoami >> /tmp/log
echo $author >> /tmp/log
cmdu=`/usr/bin/mysql -D mydb -s -u $USER -p$PASS -e "SELECT id FROM users WHERE username='$author'"`
echo $cmdu >> /tmp/log
echo "ended" >> /tmp/log

运行结果对比

  • root用户运行,/tmp/log输出正常:
root
tester
2987
ended
  • 非root用户(如kola)运行,MySQL查询报错:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (13)

/tmp/log输出:

kola
tester

ended

已尝试但无效的操作

usermod -a -G mysql kola
chmod -R 777 /var/lib/mysql

已在mysql.user中创建kola用户并授予全部权限,生产环境中apache用户运行类似脚本也失败。


解决方案

1. 检查MySQL套接字文件及目录权限

错误码13为权限拒绝,先查看套接字文件的权限与归属:

ls -l /var/run/mysqld/mysqld.sock

正常应属mysql:mysql组,权限为rw-rw----(660)。同时检查套接字所在目录权限:

ls -ld /var/run/mysqld

目录需至少开放rx权限给其他用户/组,可执行命令修正:

chmod 755 /var/run/mysqld

2. 修正过度授权的安全问题

之前给/var/lib/mysql设置777权限存在严重安全风险,需恢复正确权限:

chown -R mysql:mysql /var/lib/mysql
chmod -R 750 /var/lib/mysql

3. 确认MySQL连接用户权限

脚本中使用myuser连接,需确保该用户允许本地连接,而非仅创建kola用户。执行以下SQL语句验证并授权:

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;

4. 切换为TCP/IP连接绕过套接字问题

若套接字权限问题难以排查,可强制MySQL使用TCP连接,在命令中添加-h 127.0.0.1:

cmdu=`/usr/bin/mysql -D mydb -s -u $USER -p$PASS -h 127.0.0.1 -e "SELECT id FROM users WHERE username='$author'"`

5. Apache用户的适配方案

  • 确保apache用户加入可访问MySQL资源的组:usermod -a -G mysql apache
  • 若仍有问题,可采用上述TCP连接方式,或在sudoers中配置apache无密码运行特定mysql命令(需严格限制范围)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:22:29