/etc/mysql 权限不允许非超级用户连接到套接字

/etc/mysql 权限不允许非超级用户连接到套接字

我们在 Vagrant 下运行 Ubuntu 服务器 13.10,遇到了一个有趣的问题。

我们正在覆盖 conf.d/my.cnf 中的套接字位置

[client]
port                           = 3306
socket                         = /tmp/mysql.sock


[mysqld_safe]
socket                         = /tmp/mysql.sock

[mysqld]
user                           = mysql
pid-file                       = /var/run/mysqld/mysql.pid
socket                         = /tmp/mysql.sock
port                           = 3306
datadir                        = /var/lib/mysql
bind-address                   = 0.0.0.0

到目前为止一切顺利。启动服务器后,实际上有一个套接字正在监听 /tmp。

但是,只有超级用户才能访问它!

作为非超级用户,mysql -u root -pXXXX 出现以下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

客户端尝试连接错误的套接字。

我们假设问题在于我们的非特权用户无法访问 conf 文件以找到正确的套接字,事实上,将 /etc/mysql 上的权限更改为 0755 可以解决这个问题,但这似乎不是正确的解决方法。

附注:在 12.04 上这种行为是相同的,但是被这样的事实所掩盖:当 mysql 启动时,它会在 /tmp 创建套接字,但也会在 /var/run/mysqld 下创建符号链接,因此当客户端尝试连接时,它会找到默认套接字。

两台机器上的mysql都是5.5.37版本。

答案1

根据您的具体配置,以下内容可能足以解决您的连接问题。

您可以使用 --socket=/tmp/mysql.sock 启动 mysql

来自Mysql手册

--socket=path, -S path

对于与本地主机的连接,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。

为了存储该设置而不让用户读取整个 mysql 配置,您可以更改 ~/.my.cnf 文件的设置

选项文件了解详情

在您的情况下,您需要将 socket=/tmp/mysql.sock 添加到此文件中。

答案2

我刚刚查看了 Ubuntu 14.04 的全新安装,/etc/mysql 上的默认权限是 755。说实话,我不明白你为什么认为这是个问题。

相关内容