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

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

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

有这个错误的解决scheme吗? 这背后的原因是什么?

你连接到“本地主机”或“127.0.0.1”? 我注意到,当你连接到“本地主机”使用套接字连接器,但是当你连接到“127.0.0.1”使用TCP / IP连接器。 如果套接字连接器未启用/正在工作,则可以尝试使用“127.0.0.1”。

确保您的mysql服务正在运行

 service mysqld start 

然后,尝试以下方法之一:

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

 mysql -u root 

如果你已经设置了密码

 mysql -u root -p 

如果你的文件my.cnf(通常在etc文件夹下)configuration正确

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

你可以用下面的命令检查mysql是否在运行:

 mysqladmin -u root -p status 

尝试更改您的权限到MySQL文件夹。 如果你在本地工作,你可以尝试:

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

为我解决了它

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

/var/lib/mysql/中不存在mysql.sock

如果您在另一个位置find相同的文件,则将其链接:

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

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

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

这解决了我的问题

检查你的mysqld服务是否运行,如果不运行,启动服务。

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

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

改成

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

在我的情况下,我已经将套接字文件从/var/lib/mysql/mysql.sock /etc/my.cnf内的另一个位置移动到/tmp/mysql.sock

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

问题在于客户端configuration的方式。 运行诊断程序将实际显示正确的套接字path。 例如ps aux | grep mysqld 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 

您可以通过在mysqlconfiguration中的[client]部分下添加相同的套接字解决这个问题。

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

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

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

 mysql -u root -p 

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

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

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

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

重新启动mysql并重新连接

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

以下是对我有用的东西:

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

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

所以首先你应该开始,

 $ sudo systemctl start mariadb 

如果这失败了,

 $ sudo systemctl start mysqld 

然后启动mysql,

 $ mysql -u root -p 

到目前为止,在Fedora中这个软件包被命名为mariadb ,在Ubuntu中它被称为mariadb-server

所以你可能需要安装它,如果它尚未安装在你的系统中。

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

尝试

 echo 0 > /selinux/enforce 

确保你启动了服务器:

 mysql.server start 

然后连接到root用户:

 mysql -uroot 

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

在我的CentOS VPS上面临这个问题

不断得到

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

试了一下所有的技巧,最后重启服务器修复了这个问题 – >

shutdown -r now

希望这可以帮助 !!

首先input“service mysqld start”并login

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

如果您正在使用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

如果你改变/ var / lib / mysql中的文件(如复制或replace),你必须将文件的所有者设置为mysql,这是如此重要,如果mariadb.service重启已经faild

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

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

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

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

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

并没有mysql.sock文件存在。

这种溶解解决了我的问题,并且mysql重新运行:

以root身份login:

 sudo su - 

跑:

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

作为根进行testing:

 mysql -u root -p 

MySQL现在应该启动并运行。

我希望这可以帮助别人。

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

所以,如果你像我一样,在安装的时候洗牌,你可能会遇到你可以用mysql连接到数据库的情况,但是这个东西不能被保护(不pipe怎么说也不能使用这个脚本)。

为了解决这个问题,sreddy的build议很有效:从脚本所期望的套接字的位置开始build立一个softlink。 例:

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

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

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

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

在尝试连接SSH客户端中的mysql时遇到了这个问题,发现在需要在套接字之间切换时有助于添加套接字path。

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

它为我工作了以下更改

在my.cnf的[mysqld]和[client]中都提到socket的path,并重新启动mysql

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

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

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

请阅读更多的解释:

如果您在LINUX上运行MySQL,请使用命令盘免费检查硬盘的可用空间:

  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 

那么这是问题,现在你有解决scheme!

由于mysql.sock希望在几乎总是在根文件夹下的mysql文件夹中创build,因为缺less空间而无法实现它。

如果你是定期在mysql目录下(在openSUSE 11.1在/ var / lib / mysql下)给出ls命令,你将得到如下所示:

 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文件)。

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

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

我不得不从my.cnf禁用explicit_defaults_for_timestamp

尝试第2,3个解决scheme。 错误是stil popup&如果你找不到/var/lib/mysql/mysql.sock

 find /var/ -name mysql.sock 

检查/ var /

 df 

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

 rm /var/cache/* 

可能你的问题现在sorting。

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

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

更改项目pipe理员configuration文件的MySQL数据库中显示的{LETTER}和{GROUP ID}。

这可能是一个愚蠢的build议,但要100%确定你的数据库仍在localhost托pipe。 例如,如果networkingpipe理员select(或更改为)Amazon DB托pipe,则您将需要该主机名!

下雨的同样的问题 – 这是我如何解决它。

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

解决这个问题的最简单的方法是在你的用户configuration文件.my.cnf文件(通常在/ home / myusername下的linux上)中添加以下行:

 socket=<path to the mysql socket file> 

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

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

在我的情况下,因为我将MySQL默认数据文件夹(/ var / lib / mysql)移到了不同​​的位置(/ data / mysql),所以我在.my.cnf中添加了以下内容:

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

希望这可以帮助。