mysqld.sock 应该包含什么,为什么我没有它?

egb*_*ter 25 mysql kde socket ubuntu-10.04

有谁知道为什么我/var/run/mysqld/mysqld.sock安装(或重新安装)MySQL 5.1 时我的计算机上没有套接字文件?

现在,当我尝试使用 mysqld 启动服务器时,出现类似 的错误Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect,但是创建具有该名称的空白文件(如 ubuntu 论坛上的建议)未成功。

在不久前我升级到 natty 之前,我的 mysql 和 postgres 都运行良好;我花了几个小时浏览这两个数据库,试图弄清楚发生了什么。我可以放弃 postgres,但如果没有 mysql 的工作副本,我就无法工作。

最奇怪的部分:我使用 Kubuntu,我的理解是 KDE 使用 mysql 来存储用户权限等。我没有遇到任何奇怪的权限问题;我可以认为这意味着(不知何故?)MySQL 实际上在工作吗?

也许这些套接字文件在整洁的不同地方?重新安装操作系统会更容易吗?在这一点上,我愿意接受任何不会浪费我时间的建议。

Pau*_*aul 22

套接字文件实际上并不包含数据,它传输数据。它是一种特殊的、不寻常的文件类型,使用特殊的系统调用/命令创建。它不是一个普通的文件。

它就像一个管道,服务器和客户端可以用来连接和交换请求和数据。此外,它仅在本地使用。它的意义仅仅是作为文件系统中商定的集合位置。

创建一个普通的旧文件并将其放在该位置实际上可能会干扰创建它的服务器......从而阻止本地客户端连接到服务器。

我的建议是删除您放置在该位置的任何文件。特殊套接字文件由服务器创建。

  • 感谢您对套接字文件的解释,并对措辞不佳的问题表示抱歉:我最初的问题是缺少套接字文件 - mysql 不断抛出的错误是“无法通过套接字连接到本地 MySQL 服务器”/var/run /mysqld/mysqld.sock' (2) 尝试连接时` (3认同)

scc*_*ott 22

当您指定时host=localhost,mysql 客户端将尝试使用需要.sock文件的unix 命名管道登录到 mysql 服务器。

这可以通过指定 host=127.0.0.1 来绕过。这将使 mysql 客户端使用 TCP 连接到服务器。

取自MySQL 的文档

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 14

套接字是一种特殊的伪文件,用于通过读写进行数据传输,而不是数据存储。

socket文件在服务启动时创建,服务终止时删除。文件的位置定义/etc/my.cnf如下:

[mysqld]
socket=/var/run/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)


小智 7

就我而言,运行mysqld_safe创建了一个新mysqld.sock文件。

$ cd /etc/init.d/
$ mysqld_safe
Run Code Online (Sandbox Code Playgroud)

您可能不会得到提示,但如果您重新启动会话,mysqld.sock 文件将在某处。找到它

$ sudo find / -type s | grep mysqld.sock
Run Code Online (Sandbox Code Playgroud)