在Linux上,mysql.sock文件的正确位置是什么?

16

我有一个位于以下位置的mysql.sock文件:

/tmp/mysql.sock

但是my.cnf指向了这个位置:

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

这是否正确?


没有 '/var/lib/mysql/mysql.sock' 文件。 - Victor
MySQL搜索配置文件的路径顺序为/var/lib/mysql/my.cnf/etc/my.cnf~mysql/.my.cnf - alvits
在某些情况下,您要查找的文件可能被称为mysqld.sock。这至少适用于Ubuntu 16.04上的Ver 14.14 Distrib 5.7.22,for Linux (x86_64) - MatrixManAtYrService
2个回答

41

在你的my.cnf文件中,socket声明应该位于[mysqld]下面。如果你已经在那里声明了它,但仍然指向另一个地方,比如tmp,那么你编辑过的my.cnf文件在mysql启动时可能没有被读取,或者有另一个my.cnf文件覆盖了你编辑过的文件。还有可能是同一个my.cnf文件中有第二个Socket声明,覆盖了你期望在mysql启动时读取的声明。

你可以通过登录mysql并运行以下命令来检查其绝对路径:

mysql> show variables like 'socket';
+-----------------------------------------+-------------------------------+
| Variable_name                           | Value                         |
+-----------------------------------------+-------------------------------+
| socket                                  | /yourpath/mysql.sock          |
+-----------------------------------------+-------------------------------+
1 rows in set (0.00 sec)

3
你很棒。 - Haisum Usman

1
在Linux上,保存套接字的位置没有对错之分,除了外部设备会随时卸载或者定期清空的文件夹。您需要配置想要放置它的位置。
对于MySQL控制台客户端,还有一些需要考虑的问题:客户端似乎使用[client]中提供的套接字配置值而不是[mysqld]中提供的值。如果您像我一样设置了多个MySQL服务器(4.1、5.5、5.7),您可能希望为每个不同的服务器使用一个“--defaults-extra-file”选项,并将套接字写入[client]部分。套接字需要与在服务器上使用的my.cnf [mysqld]部分定义的套接字相同。 这是一个defaults-extra-file.cnf的示例,请记得根据您的需求更改用户、密码和套接字,并保持访问权限为400(毕竟存储了密码):
[client]
user = guardian
password = I-4m.Gr00t!
host = localhost
socket = /var/run/mysqld/mysqld-5.6.sock

如果您将“localhost”用作“host”的值,则仅适用于此。如果您有多个本地地址(127.0.0.2、127.0.0.3等),则需要将“host”的配置变量保留在“localhost”上以使用配置的套接字。否则,客户端将使用TCP连接到服务器。
这是在我的Debian 9.5服务器上测试的,使用了MySQL 4.1.22、5.5.49和5.7.19及其各自的客户端。

嗨,“在Linux上保存套接字没有正确或错误的位置,除了在任何时候卸载的外部设备上”:这也适用于自动挂载在/mnt/中的外部磁盘吗?我连接套接字时遇到问题,除非使用“sudo”...谢谢。 - lbrutti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接