2011-03-21 198 views
298

我在尝试连接到mysql时遇到了一个大问题。当我运行:无法通过套接字连接到本地MySQL服务器'/var/mysql/mysql.sock'(38)

/usr/local/mysql/bin/mysql start 

我有以下错误:

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) 

我有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 

/etc/php.ini我有:使用sudo /opt/local/apache2/bin/apachectl restart

; Default socket name for local MySQL connects. If empty, uses the built-in 
; MySQL defaults. 
mysql.default_socket = /var/mysql/mysql.sock 

我已经重新启动Apache的,但我仍然有错误。

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

--socket   [/tmp/mysql.sock] 
+41

是MySQL的运行? – David 2011-03-21 10:39:49

+0

我会补充@David,你应该看看MySQL日志,看看服务器是否真的在运行,或者它已经崩溃/还没有准备好接受连接。 – Romain 2011-03-21 11:02:37

+0

不,mysql没有运行,我有“无法连接.....”错误 – Lambivist 2011-03-21 11:13:00

回答

179

如果您的my.cnf文件(通常在的/ etc/mysql /下文件夹)的配置是否正确与

socket=/var/lib/mysql/mysql.sock 

你可以,如果MySQL是用下面的命令运行检查:

mysqladmin -u root -p status 

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

sudo chmod -R 755 /var/lib/mysql/ 

上解决了这对我

+10

在我遵循上述步骤并重新启动'mysqld'服务之后,它帮助我。 – whirlwin 2012-02-23 18:13:46

+11

如果将权限设置为755,以便只有目录所有者可以写入权限,那将是最好的。 – codewaggle 2012-06-09 23:07:24

+11

我编辑答案bc chmod 777是坏习惯 – Mateng 2012-08-31 09:44:59

65

一个快速的解决方法是为我工作:使用本地IP地址,试着(127.0.0.1),而不是“本地主机”在mysql_connect()中。这“强制”php通过TCP/IP而不是unix套接字进行连接。

+0

这适用于我。 – konyak 2014-06-16 17:49:31

+0

它工作...但为什么?即使尝试连接,MySQL是否不会解析'localhost'并获取'127.0.0.1'? – 2014-08-02 19:11:59

+3

nope ...使用本地主机时,您不使用Internet Socket。您正在使用IPC套接字。 http://en.wikipedia.org/wiki/Unix_domain_socket。 127.0.0.1是本地环回,这意味着请求不会退出您的机器,但它会使用TCP/IP因此速度较慢... – 2014-10-09 16:31:42

19

请确保您正在运行mysqld时:/etc/init.d/mysqld start

+0

kisco @ kisco:〜$ /etc/init.d/mysqld start -bash:/etc/init.d/mysqld:没有这样的文件或目录 – 2015-03-18 21:17:54

+6

然后它可能是'/etc/init.d/mysql start' – 2015-06-24 11:18:53

+0

为我工作!万分感谢! – 2016-09-01 17:19:06

79

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

例如安装MySQL服务器,我会用yum或apt安装mysql的两命令行工具和服务器:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server) 

启用MySQL服务:

/sbin/chkconfig mysqld on 

启动MySQL服务器:

/sbin/service mysqld start 

事后设置MySQL的root密码:

mysqladmin -u root password 'new-password' (with the quotes) 

我希望它能帮助。

+1

非常有帮助。我非常确定我需要安装它,但是这将所有必要的命令放在一个地方。 – Dan 2013-11-14 14:07:57

+1

是的,它为我工作。 – Awijeet 2014-01-02 16:49:08

+0

我用过自制软件,它的功能就像一个魅力:'brew install mysql' – JaKXz 2014-01-14 18:06:35

3

你可以随时使用--socket选项像

mysql --socket=/var/mysql/mysql.sock 

指定的mysql.sock文件的位置,这将工作启动mysql服务器即使套接字文件在不同的位置指定的位置my.cnf文件。

0

我有这个套接字错误,它基本上归结为MySQL没有运行的事实。如果运行全新安装,请确保安装1)系统软件包和2)面板安装程序(mysql.prefPane)。面板安装程序将允许您转到系统首选项并打开MySQL,然后运行实例。

请注意,在全新安装中,我需要重置计算机以使更改正常生效。重启后,我得到一个新的实例运行,并能够打开一个连接到本地主机,没有任何问题。

另外值得注意的是,我显然已经安装了以前版本的MySQL,但已经移除了面板,这使得为mac用户运行MySQL的实例变得很容易。

一个很好的链接,重新安装的过程:http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

4

我得到的错误,因为我跑甲基苯丙胺和我.sock文件是在不同的位置。我刚刚添加了一个符号链接,这个应用程序认为它应该指向它的实际位置,并且它像魅力一样工作。

+0

如何在应用程序认为应该指向实际位置的地方添加符号链接? – 2015-12-16 16:17:00

46

我有以下错误

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

试过多种方法,最终解决了这个问题,通过修改

#bind-address  = 127.0.0.1 

通过以下方式

sudo gksu gedit /etc/mysql/my.cnf 

bind-address  = localhost 

并重新启动

sudo /etc/init.d/mysql restart 

它的工作

+4

评论代码如何解决此问题? – shkschneider 2012-08-31 09:40:10

+1

@AnupRaj:你的回答对我的工作是将bind-address添加到我的配置文件中(在我的例子中为/etc/my.cnf),就像一个魅力一样。 – 2013-02-20 01:50:48

+0

我的配置没有它,并添加它的工作。出奇。谢谢。 – MikeTwo 2015-11-25 17:09:36

2

添加

--protocol=tcp 

到pramaters列表中的连接为我工作。

9

另一个解决方法是/etc/my.cnf中编辑和包括在节[客户]主机

[client] 
#password  = your_password 
host   = 127.0.0.1 
port   = 3306 
socket   = /var/run/mysql/mysql.sock 

,然后重新启动MySQL服务。服务器版本:

此解决方案在测试5.5.25a日志源的分布

6

在我的情况,我用的Centos 5.5。我发现问题是因为mysql服务停止了一些操作。 于是我开始用命令mysql服务:

/etc/init.d/mysqld start 

所以..愚蠢的错误。

+0

对我来说也是愚蠢的错误!出于某种原因,我最终不得不重新启动一切。正在浏览我的wordpress,然后它突然退出。 – TMilligan 2014-02-18 22:38:33

6

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

sudo的服务mysql的停止

sudo的服务mysql的启动

须藤服务的Apache2停止

须藤服务的Apache2启动

+0

在我的情况下,'mysql'没有运行。在运行'sudo service mysql status'后运行'sudo service mysql start'来验证它没有运行。 – Tass 2014-12-30 19:28:04

3

我还发现这是一个权限问题。我将MySQL文件与工作安装(在Debian 6 squeeze上)进行了比较,并且必须进行以下所有权更改(其中mydatabase是您拥有的任何数据库)。

所有权mysql:mysql

chown mysql:mysql /var/lib/mysql 
chown mysql:mysql /var/lib/mysql/ib* 
chown mysql:mysql /var/lib/mysql/mydatabase 
chown mysql:mysql /var/lib/mysql/mydatabase/* 
chown mysql:mysql /var/lib/mysql/mysql/* 

所有权mysql:root

chown mysql:root /var/lib/mysql/mysql 
chown mysql:root /var/run/mysqld 

所有权mysql:adm

chown mysql:adm /var/log/mysql 
chown mysql:adm /var/log/mysql.err 
chown mysql:adm /var/log/mysql.log* 
2

这对我来说

不够好3210
sudo /etc/init.d/mysql restart 
3

如果您使用的是AWS(Amazon Web Services)Micro版本,那么这是一个内存问题。当我从终端跑

mysql 

它会说

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

所以我尝试以下,它只会失败。

service mysqld restart 

经过大量搜索后,我发现你必须为MySQL创建一个交换文件以拥有足够的内存。列出了说明:http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html

然后,我能够重新启动mysqld。

+0

制作一个交换文件在我的情况下没有解决它。刚刚重启实例,一切都恢复了。 – Jeet 2014-11-20 16:48:53

+0

我在AWS服务器“micro”实例上遇到了同样的问题,我可以确认使交换文件DID修复了“ERROR 2002(HY000):无法通过套接字/ var/run/mysqld/mysqld.sock'(111)“的问题。谢谢@ jth_92! – Konaras 2016-05-25 07:45:57

19

为防止发生此问题,必须从命令行正常关闭服务器,而不是关闭服务器电源。

shutdown -h now 

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

基于CentOS,再次得到它回来了,当你遇到这个问题的另一种方法是移动的mysql.sock:

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

service mysqld start 

重新启动该服务创建了一个名为mqsql新条目。袜子

+1

它也适用于我...; D – B4NZ41 2013-12-22 05:08:23

+1

这是唯一帮助我,我有权限和套接字位置设置正确,与mysqld运行,但未能连接。 – 2014-06-23 13:04:58

+1

同样在这里,这是唯一对我有用的东西。非常感谢@ ali-hashemi – mtchuente 2017-05-18 14:36:49

2

今天我遇到了这个问题。这些答案都没有提供修复。我需要为我的mysql服务执行以下命令(这里找到https://stackoverflow.com/a/20141146/633107)开始:

140319 11:58:21 InnoDB: Completed initialization of buffer pool 
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes 
InnoDB: than specified in the .cnf file 0 5242880 bytes! 
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error. 
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB 
140319 11:58:21 [ERROR] Aborting 

sudo /etc/init.d/mysql stop 
cd /var/lib/mysql/ 
ls ib_logfile* 
mv ib_logfile0 ib_logfile0.bak 
mv ib_logfile1 ib_logfile1.bak 
... etc ... 
/etc/init.d/mysql restart 

这部分是由/var/log/mysql/error.log以下错误指示

我也看到磁盘满错误,但只有在没有sudo的情况下运行命令时。如果权限检查失败,它会报告磁盘已满(即使您的分区甚至没有接近满)。

6

如果一切工作就好了,你刚开始看到这个错误,你做任何事情之前,确保你不出来的磁盘空间:

df -h 

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

2

CentOS 7,64位。新鲜的安装。
在我的情况下,错误是因为我没有安装正确的MySQL服务器和MySQL客户端。
使用yum,我删除了mariadb和mysql-community版本。我从official MySQL website下载了客户端和服务器的rpm,并安装了服务器和客户端。

在安装服务器时,显示一条消息,指出MySQL根帐户的密码存储在一个文件中,我可以用sudo cat /root/.mysql_secret查看该文件。

所以在安装客户端和服务器之后,我用命令sudo service mysql status检查了MySQL是否正常工作(我想我是在重启之前这样做的),并且我得到了结果。

MySQL的运行(2601)[OK]

我登录到MySQL从.mysql_secret文件中使用的密码:
mysql -uroot -pdxM01Xfg3DXEPabpf。请注意,dxM01Xfg3DXEPabpf是.mysql_secret文件中提到的密码。

,然后键入在mysql的提示符下输入以下命令来更改根密码:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

一切正常从那时起。

+1

RHEL6U6服务器版本为5.6.23-enterprise-commercial-advanced。 – 2016-05-13 14:08:06

3

对于那些任何解决方案没有奏效,试一下:

cd /etc/mysql 

检查,如果我。CNF存在

nano my.cnf 

,并确保你只有一个绑定地址如下:

绑定地址127.0.0.1 =

如果没有,那可能是问题,只需退出nano并保存文件即可。

service mysql start

请注意,如果您还没有纳米(它是一个文本编辑器),就在刚刚压力机apt-get install nano安装它,一旦按Ctrl + X退出,不要忘了说Y保存和使用相同的文件)

+0

不幸的是,这没有奏效。这基本上只是说只有本地机器才能访问mysql。没有远程连接。 – surfer190 2017-05-31 08:10:25

5
sudo service mysql start 

这应该只是为你服务。有可能你改变了一些影响mysql配置的命令。

+0

或'systemctl start mariadb.service'在Fedora 22或RedHat 7中。之后可以设置root密码。 – 2015-06-29 13:14:59

0

我删除了mysql.sock文件,它工作。把权利放在它上面根本不起作用。无论是重启,或任何...

4

尝试-H(主机)和-P(端口):

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

+0

为我工作。原来我的mysql服务器在localhost/127.0.0.1上找不到。谢谢! – JohnnyQ 2016-10-21 10:52:15

1

我用127.0.0.1的-h而不是本地主机,一切都OK。在其他情况下有什么 - 上面的错误。

+0

嗯,127.0.0.1也在这里为我工作..不知道怎么回事。也许是因为我在做一些码头工? – theicfire 2015-10-08 05:37:20

0

尝试运行以下命令:

sudo /etc/init.d/mysql start 
8

正如这里的很多答案可以看到,有很多的,可能导致此错误消息,当您启动MySQL服务的问题。问题是,如果你只是查看适当的日志文件,MySQL通常会告诉你到底发生了什么问题。

例如,在Ubuntu上,您应该检查/var/log/syslog。由于许多其他事情可能也会记录到此文件中,因此您可能希望使用grep来查看mysql消息,而使用tail来查看最近的消息。总之,这可能是这样的:

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

不要盲目更改您的配置,因为别人说“这个工作对我的系统。”找出你的系统实际存在的问题,你会更快地得到更好的结果。

+2

+1为了退后一步,指出许多其他答案都没有考虑到的问题 - 实际上看到应用程序可能报告的问题是一种更好的方法,而不是盲目冲入并进行更改甚至不适用...! – SlySven 2016-03-20 01:18:15

+0

明智的答案,谢谢亚光 – 2016-09-15 20:33:15

+0

啊,所以它使用了错误的'.cnf'。这解释了它。现在我可以停止尝试随机事件并解决实际问题。谢谢。 – Synetech 2018-01-28 05:26:35

2
sudo service mysqld start 

为我工作,我使用的Centos

+0

即时通讯使用ubuntu – 2016-09-15 16:50:50

-1

编辑您的配置文件/etc/mysql/my.cnf

[client] 
host  = 127.0.0.1 
port  = 3306 
socket  =/var/run/mysql/mysql.sock 
3

这并不直接回答你的问题,但它的一个子集,即使用PythonAnywhere。在寻找修补程序时,我一直在这个问题上磕磕绊绊,所以我在这里添加它,希望它能帮助其他人解决我的问题。


PythonAnywhere决定更改数据库连接的主机名,以提高效率和可靠性,为detailed here

你应该用于连接到您的帐户的 MySQL数据库实例中使用的正式主机名具有从mysql.server更改为 yourusername .mysql.pythonanywhere-services.com。这绕过了我们基础设施的一部分,该部分已经开始在最近的 周出现问题,并且它应该比旧的 方式更加高效和可靠。

因此,您需要将您的主机名更新为上面突出显示的值。

1

当我尝试启动服务器时,我也遇到了这个问题,所以很多刚才说的启动服务器的答案都不起作用。你可以做的第一件事是执行以下操作,看看是否有任何配置错误:

/usr/sbin/mysqld --verbose --help 1>/dev/null 

我确实有一个错误出现了:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ... 
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead. 
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled. 
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296' 
160816 19:24:33 [ERROR] Aborting 

简单grep -HR "innodb-online-alter-log-max-size" /etc/mysql/向我展示了什么文件包含有问题的行,所以我从文件中删除了该行。

然后,检查我的/var/log/mysql/error.log文件我有:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes 
InnoDB: than specified in the .cnf file 0 671088640 bytes! 
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error. 
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB 
160816 22:46:46 [ERROR] Aborting 

基于this question接受的解决方案是行不通的,因为我甚至不能获得服务器开始,所以我遵循的一些评论说:并删除了我的/var/lib/mysql/ib_logfile0/var/lib/mysql/ib_logfile1文件。

这使得服务器开始,我是能够连接和执行查询,但检查我的错误日志文件,它很快就得到有几万行充满了这样的:

160816 22:52:15 InnoDB: Error: page 1415 log sequence number 82039318708 
InnoDB: is in the future! Current system log sequence number 81640793100. 
InnoDB: Your database may be corrupt or you may have copied the InnoDB 
InnoDB: tablespace but not the InnoDB log files. See 
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html 
InnoDB: for more information. 

基础的根据here的建议,为了解决这个问题,我做了一个mysqldump并恢复所有数据库(请参阅其他几个解决方案的链接)。

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql 
$ mysql -u root -p < backup-all-databases.sql 

一切似乎现在按预期工作。

3

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

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

ii)跑sudo /etc/init.d/mysql restart

应该得到它开始那。

4

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

尝试使用这个命令:

的MySQL -h 127.0.0.1 -P 3306 -u根-p

记住-h意味着主机和-p表示端口

+0

强制通过TCP/IP而不是使用套接字的连接效率低下(并且要求您打开服务器上的本地主机TCP/IP支持,按照[此前的答案](http://stackoverflow.com /一个/19068分之36390449))。从2011年接受的答案是更好的:配置服务器,以便您可以正确使用套接字。 – Quentin 2016-12-01 15:09:22

+3

'-p'并不意味着*端口*,它表示**密码**,您已经将它与'-P'相混淆 – Quentin 2016-12-01 15:09:31

+0

这似乎或多或少是[此早期答案]的副本(http ://stackoverflow.com/a/30938253/19068) – Quentin 2016-12-01 15:11:42

1

对我来说 - 这只是花费很长的时间来加载的MySQL的情况。在我的一个数据库中有超过100,000个表,它最终开始了,但在这种情况下显然需要很长时间。

0

如果有人找Intialization错误

无法连接到数据库 “/var/run/mysql/mysql.sock”

当运行civicrm & Drupal的只是更改低于

的settings.php和civicrm.settings.php

仅在您尝试建立数据库CON地方nection

本地主机为127.0.0.1 #local自安装

相关问题