有人知道为什么/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 实际上正在运行?
也许这些套接字文件位于 natty 中的不同位置?重新安装操作系统会更容易吗?目前,我愿意接受任何不会浪费我时间的建议。
答案1
套接字文件实际上并不包含数据,它只是传输数据。它是使用特殊系统调用/命令创建的一种特殊、不寻常的文件类型。它不是普通文件。
它就像是服务器和客户端用来连接和交换请求和数据的管道。而且,它只在本地使用。它的意义仅仅是作为文件系统中约定的会合位置。
创建一个普通的旧文件并将其放在该位置实际上可能会干扰服务器创建它......从而阻止本地客户端连接到服务器。
我的建议是删除您放置在该位置的所有文件。特殊套接字文件由服务器创建。
答案2
当您指定时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
答案3
套接字是一种特殊的伪文件,用于通过读写进行数据传输,而不是数据存储。
套接字文件在服务启动时创建,在服务终止时删除。文件的位置定义如下/etc/my.cnf
:
[mysqld]
socket=/var/run/mysql/mysql.sock
答案4
我遇到了同样的问题,缺少 mysqld.sock。我转到包含 mysql 的目录,也就是/usr/bin
我的情况。然后我发出命令
mysql mysql --host=localhost --password=whatever --port=3306
双重 mysql 不是拼写错误,而是 mysql 是新安装的 MySQL 中始终存在的数据库。我不知道是否--host
需要--password
或--port
,但由于使用这些参数对我有用,所以我将它们包括在内。MySQL 启动后,我进入用户表并设置 root 的密码。MySQL 启动后,丢失的套接字文件已创建。我希望这能帮助到某些人,因为我已经挣扎了好几天。