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

新手上路,请多包涵

我的问题开始于我无法在我的 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 命令来重置密码。

当我按 CTRL + C 杀死它时,我收到以下消息:

 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 文件不存在。文件夹有,但文件没有。

另外,我不知道这是否有帮助,但我跑了 find / -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

然后我尝试再次重新安装 mysql-servermysql-client 。但我注意到它不会提示我输入密码。不是应该要求管理员密码吗?

原文由 dot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 660
2 个回答

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

 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 设置使用的具体方法,请尝试以下方法之一:

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

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

确保您的套接字上的权限使得任何运行 mysqld 的用户都可以读取/写入它。一个简单的测试是打开它以完全读/写,看看它是否仍然有效:

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

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

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

原文由 Ray 发布,翻译遵循 CC BY-SA 3.0 许可协议

试试这个命令,

 sudo service mysql start

原文由 Joe Cheng 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题