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

时间:2011-03-21 10:33:36

标签: mysql

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

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

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

我已使用sudo /opt/local/apache2/bin/apachectl restart

重新启动了apache

但我仍然有错误。

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

--socket         [/tmp/mysql.sock]

41 个答案:

答案 0 :(得分:209)

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

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

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

mysqladmin -u root -p status

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

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

为我解决了这个问题

答案 1 :(得分:89)

你确定你安装了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)

我希望它有所帮助。

答案 2 :(得分:71)

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

答案 3 :(得分:48)

我收到以下错误

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

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

sudo gksu gedit /etc/mysql/my.cnf

修改

#bind-address       = 127.0.0.1

bind-address        = localhost

并重新启动

sudo /etc/init.d/mysql restart

它有效

答案 4 :(得分:22)

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

答案 5 :(得分:18)

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

shutdown -h now

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

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

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

service mysqld start

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

的新条目

答案 6 :(得分:12)

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

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

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

不要盲目地更改您的配置,因为其他人说“这适用于我的系统。”#39;弄清楚你的系统究竟出了什么问题,你会更快地获得更好的结果。

答案 7 :(得分:11)

另一种解决方法是编辑/etc/my.cnf并在[client]

部分中包含host
 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

然后重新启动mysql服务。

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

答案 8 :(得分:9)

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

尝试使用此命令:

  

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

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

答案 9 :(得分:6)

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

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

答案 10 :(得分:6)

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

 /etc/init.d/mysqld start

那么......愚蠢的错误。

答案 11 :(得分:6)

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

  

sudo service mysql stop

     

sudo service mysql start

     

sudo service apache2 stop

     

sudo service apache2 start

答案 12 :(得分:6)

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

df -h

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

答案 13 :(得分:5)

sudo service mysql start

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

答案 14 :(得分:5)

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

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

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

应该开始。

答案 15 :(得分:4)

我还发现这是一个权限问题。我将MySQL文件与工作安装(Debian 6挤压)进行了比较,并且必须进行以下所有权更改(其中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* 

答案 16 :(得分:4)

我收到错误是因为我正在运行MAMP而我的.sock文件位于不同的位置。我刚刚添加了一个符号链接,应用程序认为它应该指向实际位置,它就像一个魅力。

答案 17 :(得分:3)

如果您使用的是AWS(亚马逊网络服务)微型版,那么这是一个内存问题。我跑的时候

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。

答案 18 :(得分:3)

对我来说 - 这只是MySQL需要很长时间才能加载的情况。我的一个数据库中有超过100,000个表,它最终启动但显然需要花费很长时间才能实现。

答案 19 :(得分:3)

对于任何解决方案无效的人,请尝试:

cd /etc/mysql

检查 my.cnf 是否存在

nano my.cnf

并确保您只有一个绑定地址,如下所示:

bind-address = 127.0.0.1

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

service mysql start

请注意,如果你没有nano(它是一个文本编辑器),只需用apt-get install nano安装它,然后只需按Ctrl + X退出,别忘了说Y保存并使用同一个文件)

答案 20 :(得分:3)

你总是可以通过使用--socket选项指定mysql.sock文件的位置来启动mysql服务器,例如

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

即使套接字文件的位置在my.cnf文件中的不同位置指定,这也会起作用。

答案 21 :(得分:3)

我在尝试启动服务器时也遇到了这个问题,所以这里的许多答案只是说启动服务器不起作用。您可以做的第一件事是执行以下操作以查看是否存在任何配置错误:

/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和{{1}文件。

这允许服务器启动,我能够连接并执行查询,但是检查我的错误日志文件很快就会填满数万行,如下所示:

/var/lib/mysql/ib_logfile1

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

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.

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

答案 22 :(得分:2)

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

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中的以下错误表明:

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的命令时。如果权限检查失败,则报告磁盘已满(即使您的分区甚至没有接近完整)。

答案 23 :(得分:2)

我刚刚遇到这个问题。经过一天的检查后,我得到了答案,当MariaDB启动时创建mysql.sock文件,并在MariaDB关闭时删除。如果MariaDB没有运行,它就不会存在。 也许你没有安装MariaDB。 您可以遵循以下说明: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

答案 24 :(得分:2)

这不是直接回答你的问题,而是它的一个子集,即使用PythonAnywhere。在寻找修复时我一直绊倒这个问题,所以我在这里添加它,希望它能在我的情况下帮助其他人。

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

  

您应该用来连接帐户的官方主机名   MySQL数据库实例已从mysql.server更改为   的 yourusername .mysql.pythonanywhere-services.com 即可。这绕过了我们最近开始出现问题的基础设施的一部分   几个星期,它应该比旧的更有效和可靠   方式。

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

答案 25 :(得分:2)

sudo service mysqld start

为我工作,我使用Centos

答案 26 :(得分:2)

添加

--protocol=tcp 

连接的参数列表。

答案 27 :(得分:2)

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

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

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

  

运行MySQL(2601)[确定]

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

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

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

从那时起,一切都运转良好。

答案 28 :(得分:2)

这对我来说已经足够了

sudo /etc/init.d/mysql restart

答案 29 :(得分:1)

我使用127.0.0.1代替-h而不是localhost,一切正常。在其他情况下有什么 - 上面的错误。

答案 30 :(得分:1)

如果有人在寻找初始化错误

无法连接数据库" /var/run/mysql/mysql.sock"

运行civicrm&

中的drupal只会进行以下更改

settings.php和civicrm.settings.php

仅在您尝试建立数据库连接的地方

localhost到127.0.0.1 #local installation

答案 31 :(得分:0)

尝试运行以下命令:

sudo /etc/init.d/mysql start

答案 32 :(得分:0)

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

请注意,在全新安装时,我需要重置计算机才能使更改正常生效。重新启动后,我运行了一个新实例,并且能够打开与localhost的连接,没有任何问题。

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

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

答案 33 :(得分:0)

我删除了mysql.sock文件,但它确实有效。把权利放在上面根本不起作用。无论是重启还是其他......

答案 34 :(得分:0)

我在Freebsd上遇到了同样的问题,我通过删除my.cnf文件解决了这个问题。 Mysql版本是5.6。

似乎从5.5升级后,旧的my.cnf仍然存在,并且一些不兼容的参数会导致错误。 旧的my.cnf有很多参数,但新的只有一个

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

但是如果你这样做,请记住这可能是一个安全风险,因为没有任何进一步的输入可能会打开你的数据库到世界其他地方;-) 如果你不会添加至少这一行

bind-address = 127.0.1.1

答案 35 :(得分:0)

经过一个通宵达旦的半夜之后,这是我的故事故事,

  

您正在使用 hhvm 吗?

如果是这样,请在 /etc/hhvm/server.ini

中添加下一行
hhvm.mysql.socket = /var/run/mysqld/mysqld.sock

答案 36 :(得分:0)

我解决了通过将tc.log删除到/ var / lib / mysql目录中来解决问题,因为它在装满磁盘后已损坏。然后,当我启动mysql时,日志文件被创建为新文件。

答案 37 :(得分:0)

您可能想检查一下硬盘是否已满(控制台上的versions= [ "aaa/bbb/202007/cc/dd/v20", "aaa/bbb/202007/cc/dd/v22", "aaa/bbb/202007/cc/dd/v35", "aaa/bbb/202008/cc/dd/v15", "aaa/bbb/202008/cc/dd/v20", "aaa/bbb/202009/cc/dd/v5", "aaa/bbb/202009/cc/dd/v8" ] import json result = dict() for s in versions: l = s.split('/') if not l[2][:4] in result: result[l[2][:4]] = dict() if not l[2][4:] in result[l[2][:4]]: result[l[2][:4]][l[2][4:]] = [] result[l[2][:4]][l[2][4:]].append(l[5]) json.dumps(result) ),这才是最终触发我此错误的原因。

答案 38 :(得分:0)

有很多潜在的问题将导致此错误。另一个答案中建议的最好的办法是检查日志文件。可以在不同位置找到此文件,具体取决于平台。对我来说,它位于/var/log/mysqld.err,错误是“设备上没有剩余空间”。进行一些清理后,我可以启动服务,问题已解决。

答案 39 :(得分:-1)

修改配置文件/etc/mysql/my.cnf

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

答案 40 :(得分:-2)

对于我来说,解决方案是我安装了mariadb,别名为mysql。因此所有与service相关的mysql命令都未被识别...我只需要:

service mariadb start

好的措施:

chkconfig mariadb on