当前位置: 首页 > 知识库问答 >
问题:

错误:“无法通过套接字连接到本地MySQL服务器”(2)“ - 缺少/变量/运行/mysqld/mysqld.sock。

百里丁雨
2023-03-14

我的问题始于我无法在mysql安装上以root身份登录。我试图在不打开密码的情况下运行mysql……但每当我运行该命令时

# mysqld_safe --skip-grant-tables &

我将永远得不到提示。我试图按照这些指示来恢复密码。

屏幕如下所示:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

并且我没有收到开始键入SQL命令以重置密码的提示。

当我按CTRLC杀死它时,我收到以下消息:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

如果我重试该命令并将其保留足够长的时间,我确实会收到以下一系列消息:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

但是,如果我尝试以root用户身份登录,执行以下操作:

# mysql -u root

我收到以下错误消息

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我检查并/var/run/mysqld/mysqld。sock文件不存在。文件夹可以,但文件不能。

另外,我不知道这是否有帮助,但我运行了查找/ -name mysqld,它提出了:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

我是Linux和MySQL的新手,所以我不知道这是否正常。但我会把这些信息包括进来,以防有用。

我最终决定卸载并重新安装mysql。

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

按上述顺序重新安装所有软件包后,在phpmyadmin安装过程中,我收到了相同的错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

所以我再次尝试卸载/重新安装。这一次,在我卸载软件包后,我还手动将所有mysql文件和目录重命名为mysql.bad在各自的位置。

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

然后我尝试重新安装< code>mysql-server和< code>mysql-client。但是我注意到它没有提示我输入密码。它不是应该询问管理员密码吗?

共有3个答案

夏英发
2023-03-14

此错误是由于 mysql 的多次安装而发生的。运行以下命令:

ps -A|grep mysql

使用以下方法终止进程:

sudo pkill mysql

然后运行命令:

ps -A|grep mysqld

还可以通过运行以下命令终止该进程:

sudo pkill mysqld

现在您已完全设置好,只需运行以下命令:

service mysql restart
mysql -u root -p

再次有非常好的工作

单于煌
2023-03-14

要查找系统上的所有套接字文件,请运行:

sudo find / -type s

我的MySQL服务器系统打开了/var/lib/mysql/mysql.sock的套接字。

找到套接字的打开位置后,将包含套接字文件路径的行添加到 /etc/my.cnf 文件中:

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

有时,启动命令行可执行文件的系统启动脚本会指定一个标志--socket=path。此标志可以覆盖my。cnf位置,这将导致在my所在的位置找不到套接字。cnf文件指出它应该是。然后,当您尝试运行mysql命令行客户端时,它将显示my。cnf查找套接字,但它不会找到它,因为它偏离了服务器创建套接字的位置。所以,除非您关心套接字驻留在哪里,否则只需更改my。cnf匹配应该有效。

然后,停止mysqld进程。如何做到这一点将因系统而异。

如果您是linux系统中的超级用户,如果您不知道Mysql设置使用的具体方法,请尝试以下方法之一:

  • 服务 mysqld stop
  • /etc/init.d/mysqld 停止
  • mysqladmin -u root -p shutdown
  • 一些系统没有设置为具有停止mysql的优雅方法(或者由于某种原因mysql没有响应),您可以使用以下两种方式强制终止mysql:
    • 一步:pkill -9 mysqld
    • 两步(最不优先):
      • 使用 pgrep mysqlps aux | grep mysql | grep -v grep 查找 mysql 的进程 id
      • 假设进程 ID 为 4969,则终止时为 kill -9 4969

      完成此操作后,您可能需要在 /var/run/mysqld/ 中查找 pid 文件并将其删除

      确保套接字上的权限是这样的,无论mysqld正在运行的任何用户都可以读/写。一个简单的测试是打开它进行完全读/写,看看它是否仍然有效:

      chmod 777 /var/run/mysqld/mysqld.sock
      

      如果这解决了问题,您可以根据安全设置根据需要定制套接字的权限和所有权。

      此外,运行mysqld进程的用户必须能够访问套接字所在的目录。

侯焱
2023-03-14

试试这个命令,

sudo service mysql start
 类似资料: