尝试连接 mysql 时出现以下错误:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
有解决此错误的方法吗?背后的原因可能是什么?
您是连接到“localhost”还是“127.0.0.1”?我注意到,当您连接到“localhost”时,使用了套接字连接器,但是当您连接到“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 文件夹中)正确配置为
socket=/var/lib/mysql/mysql.sock
您可以使用以下命令检查 mysql 是否正在运行:
mysqladmin -u root -p status
尝试将您的权限更改为 mysql 文件夹。如果您在本地工作,可以尝试:
sudo chmod -R 777 /var/lib/mysql/
为我解决了
MySQL 服务器没有运行,或者不是它的套接字文件的位置(检查 my.cnf)。
很可能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
这解决了我的问题
如果您使用的是最近的 RHEL,您可能需要启动 mariadb(一个开源 mysql 数据库)而不是 mysql 数据库:
yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start
然后,您应该能够以通常的方式访问 mysql:
mysql -u root -p
只需编辑将以下行/etc/my.cnf
添加到my.cnf
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
重启mysql并再次连接
mysql -u 用户 -p 密码数据库 -h 主机;
在我的情况下,我已将套接字文件移动到内部的/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 配置部分下添加相同的套接字行来解决此问题。[client]
检查您的 mysqld 服务是否正在运行,如果没有运行,请启动该服务。
如果您的问题没有解决,请查找/etc/my.cnf
并修改如下,您会看到以 . 开头的行socket
。在执行此更新之前备份该文件。
socket=/var/lib/mysql/mysql.sock
改成
socket=/opt/lampp/var/mysql/mysql.sock -u root
MariaDB 是 MySQL 的一个社区开发分支,已成为许多发行版中 MySQL 的默认实现。
所以首先你应该开始,
$ sudo systemctl start mariadb
如果这失败了,不如试试,
$ sudo systemctl start mysqld
然后启动mysql,
$ mysql -u root -p
到今天为止,在 Fedora 中,这个包被命名为mariadb
而在 Ubuntu 中,它被命名为mariadb-server
.
因此,如果您的系统中尚未安装它,您可能必须安装它。
确保您有足够的空间留在/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
这将帮助您降低磁盘使用率。
请检查是否有另一个mysql服务正在运行。
这对我有用:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
确保您启动了服务器:
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
希望这可以帮助 !!
尝试
echo 0 > /selinux/enforce
重现此错误的一种方法:如果您打算连接到外部服务器,但连接到不存在的本地服务器:
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 ~ $
如果您更改 /var/lib/mysql 中的文件 [例如复制或替换该文件],则必须将文件所有者设置为 mysql 如果 mariadb.service 重启失败,这一点非常重要
chown -R mysql:mysql /var/lib/mysql/*
chmod -R 700 /var/lib/mysql/*
首先输入“service mysqld start”并登录
请确保您已正确安装 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
我的问题是我成功安装了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 现在应该启动并运行。
我希望这也可以帮助其他人。
请注意,虽然 mysql 从 my.cnf 文件中读取套接字文件的位置信息,但 mysql_secure_installation 程序有时似乎无法正确执行此操作。
因此,如果您像我一样在安装时随机播放,您可能会遇到这样的情况:您可以使用 mysql 连接到数据库就好了,但无法确保事情的安全(无论如何都不使用该脚本)。
为了解决这个问题,sreddy 的建议效果很好:从脚本期望套接字的位置到它实际所在的位置建立一个软链接。例子:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
(我使用 /tmp/ 作为套接字的默认位置)
通过以下更改对我有用
[mysqld] 中提到的套接字路径和 my.cnf 中的 [client] 中的相同路径并重新启动 mysql
[mysqld] socket=/var/lib/mysql/mysql.sock
[客户端] socket=/var/lib/mysql/mysql.sock
这可能是一个愚蠢的建议,但要 100% 确保您的数据库仍然托管在本地主机上。例如,如果网络管理员选择(或更改为)亚马逊数据库托管,您将需要该主机名!
就我而言,我正在导入一个新数据库,之后我无法再次连接。最后我意识到这是一个空间问题。
所以你可以删除最后一个数据库并扩展你的硬盘驱动器或我所做的,恢复我的虚拟机的快照。
以防万一有人认为这很有用
当我用 yum 重新安装 mariadb 时,我遇到了这个问题,它将 my 重命名/etc/my.cnf.d/client.cnf
为/etc/my.cnf.d/client.cnf.rpmsave
但保持 /etc/my.cnf 不变。
因为我已经配置了mysqld的socket in /etc/my.cnf
,mysql的socket in/etc/my.cnf.d/client.cnf
有自定义的路径。
所以安装后mysql客户端找不到mysql的socket conf,所以尝试使用默认的socket路径连接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的socket,但是你需要重启或者重新加载mysqld。
只是遇到同样的问题——这就是我解决它的方法。
假设 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
希望这可以帮助。
尝试在 SSH 客户端中连接 mysql 时遇到此问题,发现在需要在套接字之间切换时将套接字路径添加到命令中很有帮助。
> mysql -u user -p --socket=/path/to/mysql5143.sock
如果磁盘空间不足,这是一个问题。解决方案是从 HDD 中释放一些空间。
请阅读更多以获得解释:
如果您在 LINUX 上运行 MySQL,请使用命令 disk free 检查硬盘的可用空间:
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 文件命中实例)。
这是由于磁盘空间不足造成的。
我希望我能帮助一些人!!!!谢谢!
我不得不explicit_defaults_for_timestamp
从 my.cnf 禁用。
尝试前 2、3 个解决方案。错误仍然是弹出窗口&如果你找不到/var/lib/mysql/mysql.sock
find /var/ -name mysql.sock
检查 /var/ 中的可用空间
df
如果目录已满,请删除一些无用的文件/目录
rm /var/cache/*
可能您的问题现在将得到解决。
如果您在sf.net的外壳中,请尝试:
mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p
更改 {LETTER} 和 {GROUP ID},如项目管理员配置文件的 MySQL 数据库中所示。
我没有从上述所有答案中找到任何解决方案,我确实安装了从 Debian 11 中的源代码安装的 mariadb 安装(而不是从 Debian apt 包)。所以每当我在终端触发 mysql 命令时,我都会收到这个错误:
ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)
并且mysql错误日志只显示上面相同的错误套接字,我很难知道这背后的原因
我所做的是删除mailutils
我的发行版中包含 mariadb 依赖文件的包。
所以,我只需要触发这两个命令
apt -y remove mailutils
apt -y autoremove
当我在终端中运行 mysql 命令时,我不再有那个套接字错误
我有同样的问题,当我挖掘日志时:
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 启动。我意识到我从来没有设置交换文件......
我按照这个来设置交换文件并且它可以工作。
所以它告诉你他们在'/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
注意如果里面没有mysql目录/var/lib
创建它
mkdir mysql
刷新您的应用