/var/lib/ MySQL / MySQL .sock'(2)

当我尝试连接mysql时,我得到以下错误:

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

有解决这个错误的方法吗?背后的原因可能是什么?

993722 次浏览

MySQL服务器没有运行,或者那不是它的套接字文件的位置(检查my.cnf)。

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

检查你的mysqld服务是否正在运行,如果没有,启动服务。

如果你的问题没有解决,寻找/etc/my.cnf并修改如下,在这里你会看到以socket开头的行。在进行此更新之前对该文件进行备份。

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

改变

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

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

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

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

mysqladmin -u root -p status

尝试更改mysql文件夹的权限。如果你在当地工作,你可以尝试:

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

这为我解决了问题

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之前是工作的,突然停止了,就“重启”服务器。

在我的CentOS vps上遇到了这个问题->

不断得到

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

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

shutdown -r now

希望这能有所帮助!!

确保您的mysql服务正在运行

service mysqld start

然后,试试下面的方法:

(如果你没有设置mysql密码)

mysql -u root

如果您已经设置了密码

mysql -u root -p

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

确保在/var中有足够的剩余空间。如果Mysql恶魔不能写入额外的信息到驱动器,Mysql服务器将不会启动,这将导致错误Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

考虑使用

expire_logs_days = 10
max_binlog_size = 100M

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

请检查是否有其他mysql服务正在运行。

遇到同样的问题——下面是我的解决方法。

假设mysqld正在运行,那么问题可能只是mysql客户端不知道在哪里寻找套接字文件。

解决这个问题最直接的方法是在用户的配置文件.my.cnf文件中添加以下一行(在linux上通常在/home/myusername下):

socket=<path to the mysql socket file>

如果你没有.my.cnf文件,那么创建一个包含以下内容的文件:

[mysql]
socket=<path to the mysql socket file>

在我的例子中,由于我将mysql默认数据文件夹(/var/lib/mysql)移动到不同的位置(/data/mysql),我添加到.my.cnf如下:

[mysql]
socket=/data/mysql/mysql.sock

希望这能有所帮助。

试一试

echo 0 > /selinux/enforce

我的问题是,我成功安装mysql,它工作得很好。

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

无法通过套接字/var/lib/ MySQL / MySQL连接到本地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现在应该启动并运行了。

我希望这也能帮助到其他人。

注意,当mysql从my.cnf文件中读取套接字文件的位置信息时,mysql_secure_installation程序有时似乎不能正确地这样做。

所以,如果你像我一样,在安装时到处乱放东西,你可能会遇到这样的情况:你可以用mysql连接到数据库,但东西不能被保护(无论如何不使用那个脚本)。

为了解决这个问题,sreddy的建议很有效:从脚本期望套接字的位置到它实际所在的位置创建一个软链接。例子:

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

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

在我的例子中,我已经将套接字文件移动到/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) < / p >

问题在于客户端的配置方式。运行诊断将实际显示正确的套接字路径。如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配置的[client]部分下添加相同的套接字行来解决这个问题。

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

[mysqld]


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


[client]


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

重新启动mysql并重新连接

Mysql -u user -p password database -h host;

当试图在SSH客户端连接mysql时遇到这个问题,发现在命令中添加套接字路径时,在套接字之间切换是必要的。

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

我做了以下更改

在[mysqld]和my.cnf的[client]中都提到了socket的任何路径,并重新启动mysql

< p > (mysqld) 套接字= / var / lib / mysql / mysql。袜子< / p > < p >[客户] 套接字= / var / lib / mysql / mysql.sock < / p >

这是一个问题,如果您正在耗尽磁盘空间。 解决方法是释放硬盘空间

请阅读更多内容了解解释:

如果你在LINUX下运行MySQL,用命令disk free检查硬盘的空闲空间:

 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实例。文件夹上的袜子文件)。

这是由于磁盘空间不足造成的。

我希望我能帮助一些人!!!! 谢谢!< / p >

确保你启动了服务器:

mysql.server start

然后用root用户连接:

mysql -uroot

我不得不从my.cnf禁用explicit_defaults_for_timestamp

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

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 ~ $

先尝试2、3种解决方案。错误仍然弹出&如果你找不到/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

检查/var/中的可用空间

df

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

rm /var/cache/*

也许你的问题现在可以解决了。

以下是对我有效的方法:

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

请确保你已经正确安装了MySQL服务器,我遇到过这个错误很多次,我认为从套接字调试很复杂,我的意思是重新安装它可能更容易。

如果你使用的是CentOS 7,下面是正确的安装方法:

首先,添加mysql团体源代码
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm < / p >

然后你可以通过yum install mysql-community-server来安装它

用systemctl: systemctl start mysqld启动它

如果你改变了/var/lib/mysql中的文件[像复制或替换它],你必须将文件的所有者设置为mysql,如果mariadb。服务重启失败

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

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

如果你在sf.net的shell中,尝试:

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

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

它告诉你找不到/var/lib/mysql/mysql。sock的套接字文件

你要做的就是连接mysql。如果文件不存在,则使用/tmp/mysql.sock创建它

touch /tmp/mysql.sock

然后执行

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

注意,如果/var/lib中没有mysql目录,请创建它

mkdir mysql

刷新应用

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

如果你在最近的RHEL上,你可能需要启动mariadb(一个开源的mysql db)而不是mysql db:

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

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

mysql -u root -p

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

首先你应该开始,

$ sudo systemctl start mariadb

如果失败了,不如试试,

$ sudo systemctl start mysqld

然后启动mysql,

$ mysql -u root -p

到今天为止,在Fedora中这个包被命名为mariadb 在Ubuntu中,它被称为mariadb-server.

因此,如果您的系统中还没有安装它,您可能必须安装它。

在我的情况下,我导入了一个新的数据库,在那之后我无法再次连接。最后我意识到这是一个空间问题。

你可以删除最后一个数据库,然后扩展硬盘或者像我做的那样,恢复虚拟机的快照。

以防有人觉得这有用

Navicat15:无法通过套接字/var/lib/ MySQL / MySQL .sock连接到本地MySQL服务器

Ubuntu16.04版本,如果mysql服务器正在运行,在/etc/mysql中配置如下:

[mysqld] socket = /var/run/mysqld/mysqld.sock

那么Navicat15 localhost的默认设置是: “/ var / lib / mysql / mysql.sock" < / p >

你可以像这样提前编辑:

enter image description here

我也有同样的问题,当我研究日志时

sudo tail -f /var/log/mysqld.log

InnoDB: mmap(137363456 bytes) failed; errno 12
200610  6:27:27 InnoDB: Completed initialization of buffer pool
200610  6:27:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
200610  6:27:27 [ERROR] Plugin 'InnoDB' init function returned error.
200610  6:27:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
200610  6:27:27 [ERROR] Unknown/unsupported storage engine: InnoDB
200610  6:27:27 [ERROR] Aborting

很明显没有足够的内存来启动InnoDB。我意识到我从来没有设置交换文件…

我遵循来设置交换文件,它工作。

当我用yum重新安装mariadb时,我遇到了这个问题,它将我的/etc/my.cnf.d/client.cnf重命名为/etc/my.cnf.d/client.cnf.rpmsave,但保留/etc/my.cnf不变。

因为我已经在/etc/my.cnf中配置了mysqld的套接字,在/etc/my.cnf.d/client.cnf中配置了mysql的套接字,并自定义了路径。

所以安装后,mysql客户端找不到mysql的socket conf,所以它尝试使用默认的socket路径来连接msyqld,这将导致这个问题。

以下是定位此问题的一些步骤。

  1. 检查mysqld是否运行ps -aef | grep mysqld
$ps -aef | grep mysqld | grep -v grep
mysql    19946     1  0 09:54 ?        00:00:03 /usr/sbin/mysqld
  1. 如果mysqld正在运行,显示它使用netstat -ln | grep mysql的套接字
$netstat -ln | grep mysql
unix  2      [ ACC ]     STREAM     LISTENING     560340807 /data/mysql/mysql.sock
  1. 检查套接字是否是mysql客户端试图连接。 如果不是,编辑/etc/my.conf.d/client.cnf或my.conf使套接字与mysqld
  2. 中的套接字相同
[client]
socket=/data/mysql/mysql.sock

你也可以编辑mysqld的套接字,但你需要重新启动或重新加载mysqld。

我没有从上面所有的答案中找到任何解决方案,我确实有mariadb安装,从Debian 11的源代码安装(不是从Debian apt包)。所以每当我在终端中触发mysql命令时,我都会得到这个错误:

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

和mysql错误日志只显示相同的错误套接字上面,这是我很难知道背后的原因

我所做的是删除我的发行版中有mariadb依赖文件的mailutils包。

因此,我只需要触发这两个命令

apt -y remove mailutils
apt -y autoremove

当我在终端运行mysql命令时,我再也没有socket错误了

我使用MyXQL访问Elixir中的数据库。我的实际错误是使用/tmp/mysql。当/etc/my.conf使用/var/lib/mysql/mysql.sock时。

我的解决方案是在Elixir设置中设置一个环境变量:
export MYSQL_UNIX_PORT=/var/lib/mysql/mysql.sock,这样MyXQL就不会使用它的默认位置

这种解决方案的原则是,您可以将MyXQL重定向到另一个位置,以避免这种类型的问题。

无法通过socket '/var/lib/ MySQL / MySQL .sock'连接到本地MySQL服务器 它可以用两种方法来解决

  1. 使用短链接
  2. 在客户端和服务器文件中提到套接字文件链接。

< >强方法1: 要做链接,可以使用

Ln -s /data/mysql_datadir/mysql。袜子/var/lib/mysql/mysql.sock

< >强方法2: 要提到客户端和服务器端的套接字文件,您需要为客户端和服务器文件设置套接字文件路径,如下所示。服务器文件名可以是Server .cnf,客户端文件名可以是client.cnf。在这个文件中,你会发现一个类似[client]或[server]的部分。你必须把更新套接字文件路径为服务器和客户端通信..

client.cnf

< p >[客户]
套接字= / mydata / db / mysql / mysql.sock < / p >

server.cnf

(服务器)< p >
套接字= / mydata / db / mysql / mysql.sock < / p >

我更喜欢用方法2代替方法1。因为链接是一个依赖文件,如果以某种方式删除它,那么你会遇到麻烦。既然你知道更好的链接选项,你应该使用它