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

时间:2010-12-15 09:33:01

标签: mysql sockets connect

当我尝试连接到mysql时出现以下错误:

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

是否有针对此错误的解决方案?它背后的原因可能是什么?

35 个答案:

答案 0 :(得分:207)

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

答案 1 :(得分:174)

确保您的mysql服务正在运行

service mysqld start

然后,尝试以下其中一项:

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

mysql -u root

如果您已设置密码

mysql -u root -p

答案 2 :(得分:26)

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

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

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

mysqladmin -u root -p status

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

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

为我解决了这个问题

答案 3 :(得分:20)

MySQL服务器未运行,或者不是其套接字文件的位置(请查看my.cnf)。

答案 4 :(得分:18)

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

这解决了我的问题

答案 5 :(得分:12)

在我的情况下,我已将套接字文件移到/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中的[client]部分下添加相同的套接字行来修复此问题。

答案 6 :(得分:12)

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

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

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

mysql -u root -p

答案 7 :(得分:11)

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

如果问题仍未解决,请查看/etc/my.cnf并修改如下,其中您会看到以socket开头的行。在执行此更新之前,请备份该文件。

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

更改为

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

答案 8 :(得分:11)

只需修改/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;

答案 9 :(得分:7)

确保/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

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

答案 10 :(得分:6)

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

首先你应该开始,


package android.support.v4.widget;

import android.content.Context;
import android.util.AttributeSet;

/**
 *
 */

public class MySwipeRefreshLayout extends SwipeRefreshLayout {
    private boolean settingEnabled = false;

    public MySwipeRefreshLayout(Context context) {
        super(context);
    }

    public MySwipeRefreshLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setEnabled(boolean enabled) {
        try {
            settingEnabled = true;
            super.setEnabled(enabled);
        } finally {
            settingEnabled = false;
        }
    }

    @Override
    void reset() {
        if (!settingEnabled) {
            super.reset();
        }
    }
}

如果失败而不是尝试,

$ sudo systemctl start mariadb

然后启动mysql,

$ sudo systemctl start mysqld

截至今天,在Fedora中,程序包名为$ mysql -u root -p 在Ubuntu中,它被称为mariadb

因此,如果您的系统中尚未安装它,则可能需要安装它。

答案 11 :(得分:5)

这对我有用:

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

答案 12 :(得分:4)

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

答案 13 :(得分:4)

确保启动服务器:

mysql.server start

然后与root用户连接:

mysql -uroot

答案 14 :(得分:3)

echo 0 > /selinux/enforce

答案 15 :(得分:3)

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

  

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

     

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

答案 16 :(得分:2)

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

答案 17 :(得分:2)

如果您的mysql以前正在运行并且突然停止,只需“重新启动”服务器。

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

不断得到

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

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

shutdown -r now

希望这会有所帮助!!

答案 18 :(得分: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

启动它

答案 19 :(得分:1)

通过以下更改对我有用

[mysqld]中提到的socket的路径是什么,my.cnf中的[client]中也是如此,重启mysql

的[mysqld] socket = / var / lib / mysql / mysql.sock

[客户] 插座=的/ var / lib中/ MySQL的/的mysql.sock

答案 20 :(得分:1)

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

答案 21 :(得分: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 ~ $

答案 22 :(得分:1)

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

因此,如果你像我一样在安装时间随机播放,你可能会遇到可以用mysql连接到数据库的情况,但事情是无法保证的(不管怎样都不使用该脚本)。

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

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

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

答案 23 :(得分: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。

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

答案 24 :(得分:0)

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

find /var/ -name mysql.sock

检查/ var /

中的可用空间
df

如果目录已满,则删除一些unusefull文件/目录

rm /var/cache/*

可能您的问题现在会排序。

答案 25 :(得分:0)

我必须从my.cnf禁用explicit_defaults_for_timestamp

答案 26 :(得分:0)

如果磁盘空间不足,则会出现此问题。 解决方案是从HDD中释放一些空间。

请阅读更多内容以获得解释:

如果您在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文件的实例)。

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

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

答案 27 :(得分:0)

尝试在SSH客户端连接mysql时遇到此问题,发现在插槽之间切换时添加命令的套接字路径很有用。

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

答案 28 :(得分:0)

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

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

更改{LETTER}和{GROUP ID},如项目管理员个人资料的MySQL数据库中所示。

答案 29 :(得分:0)

就我而言,我正在导入一个新数据库,此后我无法再次连接。最终我意识到这是一个空间问题。

因此,您可以删除最后一个数据库并扩展您的硬盘驱动器,也可以这样做,还原虚拟机的快照。

以防万一有人认为这有用

答案 30 :(得分:0)

当我用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中配置了带有自定义路径的mysqld套接字。

因此,安装后,mysql客户端找不到mysql的套接字conf,因此它尝试使用默认的套接字路径连接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中与之相同
[client]
socket=/data/mysql/mysql.sock

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

答案 31 :(得分:-1)

只是陷入同样的​​问题 - 这就是我如何解决它。

假设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

希望这有帮助。

答案 32 :(得分:-1)

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

Ubuntu16.04,如果mysql服务器正在运行,并且在/ etc / mysql中的配置是这样的:

[mysqld]套接字= /var/run/mysqld/mysqld.sock

然后Navicat15本地主机的默认设置为: “ /var/lib/mysql/mysql.sock”

您可以像这样进一步编辑: enter image description here

答案 33 :(得分:-1)

我有同样的问题,当我挖掘日志时:

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。我意识到我从未设置交换文件...

我跟随this来设置交换文件,它可以工作。

答案 34 :(得分:-3)

所以它告诉你他们找不到'/var/lib/mysql/mysql.sock'的套接字文件

你要做的是你需要将mysql.sock文件连接到它最有可能是/tmp/mysql.sock如果文件不存在则使用

创建它
touch /tmp/mysql.sock

然后执行

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

注意/var/lib内部没有mysql目录创建它

mkdir mysql

刷新您的应用