/ 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创build一个套接字,而且在/ var / run / mysqld下创build了一个符号链接,所以当客户端尝试连接,它find默认的套接字。

在这两台机器上,MySQL版本是5.5.37。

根据您在下面的确切configuration可能足以解决您的连接问题。

你可以用–socket = / tmp / mysql.sock来启动mysql

从Mysql手册

 --socket=path, -S path 

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

为了让这个设置保存而不让用户读取整个mysqlconfiguration,你可以改变〜/ .my.cnf文件的设置

详细信息请参阅选项文件

在你的情况下,你会添加socket = / tmp / mysql.sock这个文件。

我只是看了一个相当新鲜的安装Ubuntu 14.04和/ etc / mysql的默认权限是755.说实话,我不明白你为什么认为这是一个问题。