首页 文章

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

提问于
浏览
226

我尝试连接到mysql时收到以下错误:

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

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

30 回答

  • 168

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

  • 2

    确保您的mysql服务正在运行

    service mysqld start
    

    然后,尝试以下之一:

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

    mysql -u root
    

    如果你已经设置了密码

    mysql -u root -p
    
  • 3

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

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

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

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

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

    这解决了我的问题

  • 17

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

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

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

    mysqladmin -u root -p status
    

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

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

    这解决了我

  • 0

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

  • 4

    在我的情况下,我已将套接字文件移动到 /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] 部分下添加相同的 socket 行来解决此问题 .

  • 8

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

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

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

    mysql -u root -p
    
  • 1

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

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

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

    改成

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

    只需编辑 /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;

  • 10

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

    这将有助于您降低磁盘使用率 .

  • 7

    这对我有用:

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

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

    所以首先你应该开始,

    $ sudo systemctl start mariadb
    

    如果这失败了,请尝试,

    $ sudo systemctl start mysqld
    

    然后启动mysql,

    $ mysql -u root -p
    

    截至今天,在Fedora中,软件包名为 mariadb . 在Ubuntu中,它被称为 mariadb-server .

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

  • 5

    请检查是否有另一个mysql服务正在运行 .

  • 0

    确保启动服务器:

    mysql.server start
    

    然后用root用户连接:

    mysql -uroot
    
  • 2

    尝试

    echo 0 > /selinux/enforce
    
  • 0

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

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

  • 4

    如果你的mysql以前工作并且突然停止只是“重新启动”服务器 .

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

    不断得到

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

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

    shutdown -r now

    希望这可以帮助 !!

  • 1

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

  • 1

    请确保您已正确安装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

  • 20

    我的问题是我成功安装了mysql,它工作正常 .

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

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

    并且不存在mysql.sock文件 .

    This sollution solved my problem and mysql was up and running again:

    以root身份登录:

    sudo su -
    

    跑:

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

    以root身份测试:

    mysql -u root -p
    

    mysql现在应该启动并运行 .

    我希望这也可以帮助别人 .

  • 0

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

    因此,如果你像我一样在安装时间乱扔东西,你可能会遇到可以用mysql连接到数据库的情况,但事情是无法保证的(不管怎么说都不使用那个脚本) .

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

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

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

  • 5

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

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

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

  • 1

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

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

    它对我有用,有以下变化

    无论在[mysqld]中提到套接字的路径是什么,在my.cnf中的[client]中都是如此,并重新启动mysql

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

    [client] socket = / var / lib / mysql / mysql.sock

  • 202

    如果磁盘空间不足,则会出现此问题 . 解决方案是从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文件命中实例) .

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

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

  • 3

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

  • 25

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

    find /var/ -name mysql.sock
    

    检查/ var /中的可用空间

    df
    

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

    rm /var/cache/*
    

    可能你的问题现在会排序 .

  • 2

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

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

    更改,如项目管理员配置文件的MySQL数据库中所示 .

  • -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
    

    希望这可以帮助 .

相关问题