当我尝试连接到mysql时出现以下错误:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
是否有针对此错误的解决方案?它背后的原因可能是什么?
答案 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,这将导致此问题。
以下是定位此问题的一些步骤。
ps -aef | grep mysqld
上运行$ps -aef | grep mysqld | grep -v grep
mysql 19946 1 0 09:54 ? 00:00:03 /usr/sbin/mysqld
netstat -ln | grep mysql
一起使用的套接字$netstat -ln | grep mysql
unix 2 [ ACC ] STREAM LISTENING 560340807 /data/mysql/mysql.sock
[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)
Ubuntu16.04,如果mysql服务器正在运行,并且在/ etc / mysql中的配置是这样的:
[mysqld]套接字= /var/run/mysqld/mysqld.sock
然后Navicat15本地主机的默认设置为: “ /var/lib/mysql/mysql.sock”
答案 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
刷新您的应用