我们在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.说实话,我不明白你为什么认为这是一个问题。