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


Answers:


222

您要连接到“ localhost”还是“ 127.0.0.1”?我注意到,当您连接到“ localhost”时,使用套接字连接器,但是当您连接到“ 127.0.0.1”时,则使用TCP / IP连接器。如果套接字连接器未启用/工作,则可以尝试使用“ 127.0.0.1”。


27
在这种情况下,您可能应该检查MYSQL服务器是否正在实际运行。
JanThomä2014年

3
您还可以强制采用带插座的参数(-S通过/ usr / bin中/ MySQL的)一个插座,并迫使TCP / IP通过提供端口(-P用的/ usr / bin中/ MySQL的。)

使用本地主机以外的标准网络名称对我有用。只需确保在客户端“主机”文件中声明了它即可。
法比恩·哈达迪

2
cygwin用户注意:例如,如果cygwin mysql客户端尝试挂接到本地WAMP mysql服务器,请使用-h <本地主机以外的主机名>。不要尝试创建mysql.sock文件并在任何my.cnf文件中声明它,它将无法正常工作。
法比恩·哈达迪

错误的主机名确实给了我完全相同的错误。查看/etc/hosts我的Docker容器中的文件后,我发现MySql主机名为mysql。在我的连接配置中使用相同的主机名解决了该问题。
Stephane

188

确保您的mysql服务正在运行

service mysqld start

然后,尝试以下任一操作:

(如果您尚未设置mysql的密码)

mysql -u root

如果您已经设置了密码

mysql -u root -p

5
关于更新的debian版本:service mariadb start因为mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra

2
给那个家伙一块奖牌。
Siraj Alam

这就是我的答案。由于我使用的是mariadb,因此解决方案是运行以​​下命令:“ sudo systemctl start mariadb”。之后一切都很好。
mohsen

给@Zahra一枚勋章
Ahmed C

28

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

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

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

mysqladmin -u root -p status

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

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

为我解决了


它也对我有用,但是在我升级到最新版本之后又出现了此问题,我可以知道为什么会这样吗?

sudo chmod -R 777 / var / lib / mysql /为我解决了一个在启动
docker


19

极有可能mysql.sock在中不存在/var/lib/mysql/

如果在其他位置找到相同文件,则将其符号链接:

例如:我有 /data/mysql_datadir/mysql.sock

将用户切换到mysql并按如下所述执行:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

那解决了我的问题


将mysql.sock重命名为其他名称,然后重新启动mysqld(“服务mysqld restart”),然后将其他名称重命名为mysql.sock对我有用。此答案略有变化,非常感谢。
模糊分析

答案可能有助于查找mysql.sock文件
Nobita

15

如果您使用的是最新的RHEL,则可能需要启动mariadb(开源mysql db)而不是mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

然后,您应该能够以通常的方式访问mysql了:

mysql -u root -p

仅供参考,这也适用于CentOS 8.1。安装mariadb-server和之后mariadb,请不要忘记运行mysql_secure_installation以清理一些默认的不安全设置。
Dio Phung

13

在我来说,我已经搬到套接字文件到另一个位置,里面/etc/my.cnf/var/lib/mysql/mysql.sock/tmp/mysql.sock

即使重新启动mysqld服务,尝试连接时我仍然会看到错误消息。 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

问题在于客户端的配置方式。运行诊断程序实际上将显示正确的套接字路径。例如ps aux | grep mysqld

作品:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

不起作用:

mysql -uroot -p
mysql -uroot -p -hlocalhost

您可以通过在mysql config中的section 下添加相同的套接字行来解决此问题。[client]


13

只需编辑将以下行/etc/my.cnf 添加到my.cnf

[mysqld]

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

[client]

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

重新启动mysql并再次连接

mysql -u用户-p密码数据库-h主机;


唯一正确的答案。我想知道为什么它没有足够的赞成票。
CentAu

11

检查您的mysqld服务是否正在运行,如果未运行,请启动该服务。

如果您的问题仍未解决,请/etc/my.cnf按照以下说明进行查找和修改,在该行中看到以开头的行socket。在执行此更新之前,请对该文件进行备份。

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

改成

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
嗨,塞卡尔,我输入了“ find / -name my.cnf”,我有两个位置。1)/opt/lampp/etc/my.cnf 2)/etc/mysql/my.cnf。因此,要使用哪一个。我问的问题在这里.. stackoverflow.com/questions/32437796/...
娜娜Partykar

7

MariaDB是社区开发的MySQL分支,现已成为许多发行版中MySQL的默认实现。

所以首先你应该开始

$ sudo systemctl start mariadb

如果失败,请尝试

$ sudo systemctl start mysqld

然后启动mysql,

$ mysql -u root -p

到目前为止,在Fedora中,程序包的名称为mariadbmariadb-server

因此,如果尚未在系统中安装它,则可能必须安装它。


7

确保剩余空间 /var。如果Mysql demon无法将其他信息写入驱动器,则mysql服务器将无法启动,并导致错误Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

考虑使用

expire_logs_days = 10
max_binlog_size = 100M

这将帮助您降低磁盘使用率。


谢谢,我在oracle virtualbox上运行mysql,当我对bd进行转储时,我空间不足,无法启动mysql服务器,当我删除转储文件时,我能够重新启动mysql服务器。
2013年

1
这为我解决了。对于生产环境,我将innodb_buffer_pool_size设置为很高的值,这使mysql在我的虚拟机上崩溃。
Benjamin Brizzi 2014年

1
我有这个问题,当使用phabricator和解决办法是改变innodb_buffer_pool_sizemy.cnf。将其设置为一个较小的值innodb_buffer_pool_size = 50M是丢弃此假设的一个很好的检验;)
Yercalamarino 2015年

那是个可怕的问题,检查了除磁盘空间以外的所有内容。从/ var释放空间,它又回来了!
Nadjib Mami

5

这对我有用:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart



3

如果您的mysql以前可以正常工作并且突然停止,则只需“重启”服务器即可。

在我的CentOS VPS上遇到了这个问题。

不断得到

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

尝试了所有技术,最后重新启动服务器,修复了问题->

shutdown -r now

希望这可以帮助 !!



3

如果您更改/ var / lib / mysql中的文件[如复制或替换],则必须将文件所有者设置为mysql,如果mariadb.service重新启动失败,则这非常重要。

chown -R mysql:mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

首先输入“ service mysqld start”并登录


你想说什么?请在这里提问之前先阅读常见问题解答
怪胎

该问题已在三年前成功回答。确切的答案是在去年给出的。
Cairnarvon

2

请确保您已正确安装MySQL服务器,我多次遇到此错误,并且我认为从套接字调试很复杂,这意味着重新安装它可能会更容易。

如果您使用的是CentOS 7,这是安装它的正确方法:

首先,添加mysql社区源码
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

然后您可以通过安装 yum install mysql-community-server

用systemctl启动它: systemctl start mysqld


1

我的问题是我成功安装了mysql,并且工作正常。

但是有一天,发生了同样的错误。

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

并且不存在mysql.sock文件。

此解决方案解决了我的问题,并且mysql重新启动并运行:

以root身份登录:

sudo su -

跑:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

以root身份测试:

mysql -u root -p

mysql现在应该已启动并正在运行。

我希望这也可以帮助其他人。


1

请注意,虽然mysql从my.cnf文件读取套接字文件的位置信息,但mysql_secure_installation程序有时似乎无法正确执行此操作。

因此,如果您像我一样,在安装时进行一些改动,则可能会遇到这样的情况,您可以使用mysql连接到数据库,但是这种情况无法得到保护(无论如何也不使用该脚本)。

要解决此问题,请使用sreddy的建议,使其效果很好:从脚本期望套接字的位置到实际位置建立一个软链接。例:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(我使用/ tmp /作为套接字的默认位置)


1

它通过以下更改为我工作

无论在[mysqld]中提到套接字的任何路径,并在my.cnf中在[client]中提及相同的路径,然后重新启动mysql

[mysqld]套接字= / var / lib / mysql / mysql.sock

[客户端]套接字= / var / lib / mysql / mysql.sock


1

重现此错误的一种方法:如果您打算连接到外部服务器,而连接到不存在的本地服务器:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

因此,您必须像这样指定主机:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

这可能是一个愚蠢的建议,但请确保100%确保您的数据库仍在本地主机上托管。例如,如果网络管理员选择(或更改为)Amazon DB托管,则您将需要该主机名!


我正在使用托管服务提供商1and1,并在将其SSH到主机后出现此错误。解决方法只是提供主机名“ mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520”
抢劫

1

以我为例,我正在导入一个新的数据库,但之后无法再次连接。最终我意识到这是一个空间问题。

因此,您可以删除最后一个数据库并扩展您的硬盘驱动器,或者执行我的操作,还原虚拟机的快照。

以防万一有人认为有用


0

尝试在SSH客户端中连接mysql时遇到此问题,发现当需要在套接字之间进行切换时,将套接字路径添加到命令很有用。

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

如果磁盘空间不足,这将是一个问题。解决方案是从硬盘中释放一些空间。

请阅读更多以获取解释:

如果您在LINUX上运行MySQL,请使用命令disk free检查HDD的可用空间:

 df 

如果您得到这样的东西:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

这就是问题所在,现在您有了解决方案!

由于mysql.sock想要在几乎总是位于根文件夹下的mysql文件夹中创建,因为空间不足,无法实现它。

如果您定期在mysql目录下提供ls命令(在openSUSE 11.1位于/ var / lib / mysql),您将得到类似以下内容的信息:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

mysql.sock文件经常出现和消失(您必须尝试使用​​ls分配,以使用文件夹上的mysql.sock文件命中实例)。

这是由于磁盘空间不足引起的。

我希望我能帮助一些人!谢谢!


0

我不得不explicit_defaults_for_timestamp从my.cnf 禁用。


0

尝试前2,3解决方案。错误是stil popup&如果找不到/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

检查/ var /中的可用空间

df

如果目录已满,请删除一些未使用的文件/目录

rm /var/cache/*

您的问题可能会立即解决。


0

如果您位于sf.net的外壳中,请尝试:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

更改{LETTER}和{GROUP ID},如项目管理员配置文件的MySQL数据库中所示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.