无法通过套接字“/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
希望这可以帮助。