无法通过套接字'/var/mysql/mysql.sock'连接到本地MySQL服务器(38)

Lam*_*ist 369 mysql

我在尝试连接到mysql时遇到了很大的问题.当我跑:

/usr/local/mysql/bin/mysql start
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)
Run Code Online (Sandbox Code Playgroud)

我确实mysql.sock/var/mysql目录下.

/etc/my.cnf我有:

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

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
Run Code Online (Sandbox Code Playgroud)

/etc/php.ini我有:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

我已经重启了apache sudo /opt/local/apache2/bin/apachectl restart

但我仍然有错误.

否则,我不知道这是否相关,但是当mysql_config --sockets我得到时

--socket         [/tmp/mysql.sock]
Run Code Online (Sandbox Code Playgroud)

mar*_*maf 213

如果您的文件my.cnf(通常在/ etc/mysql /文件夹中)已正确配置

socket=/var/lib/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令检查mysql是否正在运行:

mysqladmin -u root -p status
Run Code Online (Sandbox Code Playgroud)

尝试将您的权限更改为mysql文件夹.如果您在本地工作,您可以尝试:

sudo chmod -R 755 /var/lib/mysql/
Run Code Online (Sandbox Code Playgroud)

这解决了我

  • 我编辑答案bc chmod 777是坏习惯 (12认同)
  • 最好将权限设置为755,以便只有目录所有者才能写入权限. (11认同)
  • 在我按照上面的步骤并重新启动`mysqld`服务后,它帮助了我. (10认同)
  • 在我的openSUSE 12.3上,my.cnf在/ etc /中. (3认同)
  • 我的问题实际上只是因为我的网络应用程序的存储空间已经用完了!经典! (2认同)

Waq*_*qas 89

你确定你安装了mysql以及mysql服务器..

例如,要安装mySql服务器,我将使用yum或apt来安装mysql命令行工具和服务器:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)
Run Code Online (Sandbox Code Playgroud)

启用MySQL服务:

/sbin/chkconfig mysqld on
Run Code Online (Sandbox Code Playgroud)

启动MySQL服务器:

/sbin/service mysqld start
Run Code Online (Sandbox Code Playgroud)

然后设置MySQL root密码:

mysqladmin -u root password 'new-password' (with the quotes)
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.

  • 我已经安装了客户端,我需要的命令是`sudo apt-get install mysql-server`然后生活很好 (2认同)

小智 74

一个对我有用的快速解决方法:尝试在mysql_connect()中使用本地IP地址(127.0.0.1)而不是"localhost".这"迫使"php通过TCP/IP而不是unix套接字连接.

  • nope ...当使用localhost时,你没有使用Internet套接字.您正在使用IPC插槽.http://en.wikipedia.org/wiki/Unix_domain_socket.127.0.0.1是本地环回,这意味着请求不会退出您的机器,但它将使用TCP/IP因此更慢... (3认同)

Anu*_*Raj 49

我收到以下错误

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
Run Code Online (Sandbox Code Playgroud)

尝试了几种方法,最后通过以下方式解决了这个问题

sudo gksu gedit /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

改性

#bind-address       = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

bind-address        = localhost
Run Code Online (Sandbox Code Playgroud)

并重新启动

sudo /etc/init.d/mysql restart
Run Code Online (Sandbox Code Playgroud)

有效


Zor*_*ayr 24

确保你正在运行mysqld: /etc/init.d/mysql start

  • 或者为Ubuntu提供`sudo service mysql start | restart`. (2认同)

Ali*_*emi 18

要防止出现此问题,必须从命令行正常关闭服务器,而不是关闭服务器电源.

shutdown -h now
Run Code Online (Sandbox Code Playgroud)

这将在关闭机器之前停止正在运行的服务.

基于Centos,当您遇到此问题时,再次备份它的另一种方法是移动mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start
Run Code Online (Sandbox Code Playgroud)

重新启动该服务会创建一个名为mqsql.sock的新条目


mat*_*000 12

从这里的许多答案中可以看出,当您启动MySQL服务时,会出现许多可能导致此错误消息的问题.问题是,如果你只是查看相应的日志文件,MySQL通常会告诉你到底出了什么问题.

例如,在Ubuntu上,你应该检查/var/log/syslog.由于许多其他内容也可能会记录到此文件,因此您可能希望使用grep查看mysql消息,并tail仅查看最新消息.总之,这可能看起来像:

grep mysql /var/log/syslog | tail -50

不要盲目地改变你的配置,因为有人说'这对我的系统起作用'.弄清楚你的系统究竟出了什么问题,你会更快地得到更好的结果.

  • +1为了退后一步并指出许多其他答案甚至未能考虑的事实 - 实际上看到应用程序可能报告的问题是一个更好的方法,而不是盲目地匆忙进行并做出可能没有的更改甚至适用......! (4认同)

小智 11

另一个解决方法是编辑/etc/my.cnf并在[客户端]部分中包含主机

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

然后重启mysql服务.

此解决方法已在以下位置进行了测试:服务器版本:5.5.25a-log源分发


Dou*_*han 11

当我为我的文件设置cron作业时出现此错误.我将文件的权限更改为777,但它仍然不适合我.最后我得到了解决方案.可能会对其他人有所帮助.

尝试使用此命令:

mysql -h 127.0.0.1 -P 3306 -u root -p

请记住,-h表示主机,-p表示端口.

  • `-p`不代表*port*,它意味着**密码**,你把它与`-P`混淆了 (10认同)

fus*_*aki 7

我有同样的问题,它是由mysql服务器运行时更​​新mysql驱动程序引起的.我修复它只是重新启动mysql和apache2:

sudo服务mysql停止

sudo服务mysql启动

sudo service apache2 stop

sudo服务apache2启动


Shy*_*dka 6

就我而言,我使用的是Centos 5.5.我发现问题是因为mysql服务被停止了一些如何.所以我用命令启动了mysql服务:

 /etc/init.d/mysqld start
Run Code Online (Sandbox Code Playgroud)

所以..愚蠢的错误.


der*_*ekg 6

如果一切正常并且您刚刚开始看到此错误,那么在执行任何其他操作之前,请确保您没有磁盘空间:

df -h
Run Code Online (Sandbox Code Playgroud)

如果创建mysql.sock的卷是100%使用,MySql将无法创建它,这将是此错误的原因.您需要做的就是删除不需要的东西,比如旧的日志文件.


Ram*_*dov 6

尝试使用-h(主机)和-P(端口):

mysql -h 127.0.0.1 -P 3306 -u root -p


小智 5

sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

这应该对你很好.您可能有可能更改了一些影响mysql配置的命令.


Tad*_*she 5

对于这个问题,很多解决方案,但我的情况,我只需要纠正DATE机/服务器(Ubuntu的16.04服务器)。

i)检查服务器的日期并进行更正。

ii)运行 sudo /etc/init.d/mysql restart

那应该开始。


Luc*_*scu 5

您可能想检查硬盘是否已满(df在控制台上),这就是我最终触发此错误的原因。