MySQL socket 文件是本地连接用的 Unix 域套接字,路径可通过 SHOW VARIABLES LIKE ‘socket’ 查询;需在 my.cnf 的 [mysqld] 和[client]段统一配置,重启服务生效;客户端可使用 - S 参数或连接字符串中指定 unix_socket。

MySQL 的 socket 文件是本地客户端连接 MySQL 服务器时使用的 Unix 域套接字(Unix domain socket),它绕过 TCP/IP 协议 栈,性能更高、更安全,仅适用于本机连接。配置的关键在于确保 mysqld 服务启动时正确生成 socket 文件,且客户端(如 mysql 命令行 工具、PHP、Python 等)能准确定位该文件。
查看当前 MySQL 使用的 socket 路径
登录 MySQL 后执行以下 SQL 命令即可查到实际路径:
mysql> SHOW VARIABLES LIKE ‘socket’;
输出类似:
+—————+—————————–+
| Variable_name | Value |
+—————+—————————–+
| socket | /var/run/mysqld/mysqld.sock |
+—————+—————————–+
这个路径就是当前生效的 socket 文件位置,后续配置需保持一致。
在 my.cnf 中统一配置 socket 路径
编辑 MySQL 主 配置文件(常见路径:/etc/my.cnf 或 /etc/mysql/my.cnf 或 /usr/etc/my.cnf),在 [mysqld] 和 [client] 两个段落下分别指定 socket:
- [mysqld] 段控制服务端监听路径,例如:
socket = /var/run/mysqld/mysqld.sock - [client] 段控制默认客户端连接路径,例如:
socket = /var/run/mysqld/mysqld.sock - 可选:为兼容性,在
[mysql]、[mysqldump]等子段也显式声明相同路径
修改后需重启 MySQL 服务生效:
sudo systemctl restart mysql(或 mysqld,依系统而定)
客户端连接时显式指定 socket 路径
若未在 [client] 段配置,或需临时切换 socket,可通过命令行参数指定:
- 使用
-S参数连接:
mysql -u root -p -S /var/run/mysqld/mysqld.sock - PHP 中使用 PDO 或 mysqli 时,在 DSN 或连接参数中设置:
mysqli://root:pass@localhost:3306/db?unix_socket=/var/run/mysqld/mysqld.sock - Python 的
pymysql或mysql-connector-python支持unix_socket参数
常见问题 与注意事项
- socket 文件目录(如
/var/run/mysqld/)必须存在,且mysql用户有读写权限 - SELinux 或 AppArmor 可能阻止 mysqld 创建 socket,需检查日志并调整策略
- Docker 容器中运行 MySQL 时,宿主机和容器内路径不同,需通过卷映射确保客户端访问路径一致
- Mac 上 Homebrew 安装的 MySQL 默认 socket 通常在
/tmp/mysql.sock,Linux 发行版多为/var/run/mysqld/mysqld.sock






























